2011-05-11 241 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