2011-05-11 240 views
2

我有一个socket.io连接来连接服务器和客户端,
它工作正常。
现在,当我试图重新连接它从服务器断开它连接,但然后socket.on('message'不会再被解雇。
我从服务器端检查它推送该消息。重新连接socket.io问题'socket.on('message',function(){})`

请给我推荐一些东西我现在不在想法
我相信这个问题是在客户端socket.on message

客户端代码

var socket = new io.Socket('some host name',{port:80,rememberTransport:true}); 
socket.on('connect', function(){ 
    clearInterval(socketInterval); 
}); 
socket.on('message', function(obj) 
{ 
    alert("meg from server"); 
}); 
socket.on('disconnect', function() 
{ 
    socketInterval=setInterval("socket.connect()",5000); 
}); 
socket.connect(); 
+0

我没有得到答案,这是第一次。请帮助请帮助.......... – Wazzzy 2011-05-12 06:25:54

+1

Socket.IO具有内置的重新连接支持与相应的事件。检查最新版本的readme.md。无需重新创建自己的重新连接逻辑。 – 2011-05-23 18:20:45

+0

谢谢我已经尝试使用,但问题是连接后消息事件没有被解雇... socket.on('消息'事件工作正常,当页面重新加载但重新连接后,它停止工作... 你觉得什么我正在做的错误 – Wazzzy 2011-05-23 19:20:49

回答

2

它似乎是“问题”最有可能在服务器端。服务器有两种发送消息给客户端的方式(发送和广播)。如果你正在做一对一的信息,大多数人使用发射。我假设你建立了一个存储客户端的sessionIds的聊天服务器。它在初始连接时工作正常,因为服务器具有正确的sessionId,但假设连接丢失并且重新建立连接,现在服务器尝试向客户端发送消息。如果你的服务器存储了初始sessionId,比如在一个数组中,并且试图使用原始sessionId发出一条消息,它将失败,因为重新连接会导致创建一个新的sessionId。

在这种情况下,解决方案是从阵列中删除前一个sessionId,并在重新连接时添加新的sessionId。

5

我不知道node.js的,但它看起来像语法错误,你没有忘了正确的paratheses?

socket.on('connect', function(){ 
    clearInterval(socketInterval); 
}); 
socket.on('message', function(obj) 
{ 
    alert("meg from server"); 
}); 
socket.on('disconnect', function() 
{ 
    socketInterval=setInterval("socket.connect()",5000); 
}); 
+0

我很欣赏你的答案,但仍然在等待合适的答案!!! – Wazzzy 2011-05-12 19:14:32

+1

@Wasim:是的,我看到我希望有人能尽快帮助你解决这个问题。 – Jonas 2011-05-12 20:57:01