2012-03-12 95 views
6

我已經構建了一個簡單的Web應用程序,它使用socket.io通過node.js服務器進行一些通信。是否socket.io重新連接重新運行連接?

當用戶連接時,節點傳回的信息告訴客戶訂閱某些事件。這工作正常。

但是,如果您讓瀏覽器設置爲空閒狀態,那麼客戶端最終會訂閱兩次事件。訂閱過程是這樣的:

當用戶連接的node.js得到一個「的adduser」消息

,在該函數hapen兩個關鍵的事情是這樣的:

socket.on('adduser', function(data) 
    <snip> 
    socket.emit('nodeinfo', {node_id: NODE_ID}); 
    socket.emit('update', {msg: 'you are connected'}); 

插座。發出('nodeinfo')通知客戶訂閱事件。

所以客戶有

socket.on('nodeinfo', function(data) { ... } 

的事情是它永遠不會說「你」連接兩次,沒有執行console.log()函數「的adduser」的再次調用上的節點側。似乎發生的唯一情況是node.js再次發出nodeinfo(或者客戶端認爲)導致客戶端重新訂閱。

任何人都可以向我解釋如何重新連接在socket.io工作,以及如何發生?

回答

4

默認情況下,客戶端嘗試在斷開連接後重新連接。如果你喜歡,可以改變它: socket.io client

如果重新連接,服務器將看到一個新的連接,並由你來實現邏輯來識別與前一個連接的新連接。所以在實踐中 - 不是在「連接」時實現adduser邏輯,而是在客戶端向服務器發送一些信息之後(或不)。

+0

是的。與結果相同,我只是注意到我們的應用程序會發生什麼情況。謝謝 – Xin 2017-04-06 03:26:12

相關問題