2015-04-27 173 views
2

我正在開發一個使用socket.io的node.js應用程序來在服務器和客戶端之間進行通信。如果服務器面臨任何錯誤,我會向客戶端發送錯誤消息,並關閉服務器和客戶端的連接。但是,當客戶端嘗試重新連接時,它不再能夠連接到服務器。我的代碼socket.io在斷開連接後不重新連接

server.js

io.sockets.on('connection', function(socket) { 

    /*Some code*/ 
    stream.on('error',function(errormsg){ 
     socket.emit('error',{txt: "Error!"}); 
     socket.disconnect(); 
    }); 
}); 

client.js

var server_name = "http://127.0.0.1:5000/"; 
var socket = io.connect(server_name); 

socket.on('error',function(data){ 
    console.log(data.txt); 
    socket.disconnect(); 
}); 

function submitclick() 
{ 
    var text="hello"; 
    if(socket.connected ==false) 
    socket= io.connect({'forceNew': true}); 
    console.log(socket.connected); 
} 

的socket.connected狀態是假的。我也沒有在服務器端收到它。

回答

2

我不認爲你的電話io.conncet是同步的,你太早檢查socket.connected。如果你想驗證你的重新連接成功,嘗試這樣的:

function submitclick() 
{ 
    var text="hello"; 
    if(socket.connected ==false) { 
    socket= io.connect({'forceNew': true}); 
    socket.on('connect', function() { 
     console.log('Connected!'); 
    }); 
    } 
} 

編輯: 作爲@ jfriend00指出,可能沒有必要爲你做的socket.disconnect()在首位的socket.io應該自動處理重新連接。

+1

它現在可以運行:) – user1692342

+1

socket.io的一個主要特性是它可以爲你自動重新連接。如果配置正確,我不明白爲什麼需要手動重新連接它。換言之,正確配置的socket.io代碼不應該包含代碼在你的答案中。建立連接一次,讓socket.io爲您處理重新連接。 – jfriend00

+0

@ jfriend00好的建議 –

相關問題