2013-05-09 77 views
11

有沒有什麼我可以在客戶端檢測到socket.io websocket不可用?沿着線的東西:socket.io/node.js檢測服務器是否發生故障

  • 服務器啓動時按通常
  • 客戶端連接
  • 消息服務器和客戶機之間來回發送
  • 服務器關閉(不再可用)
  • 警告連接的客戶端服務器不可用

我試着在客戶端添加'錯誤'和'connect_failed'選項,但沒有任何運氣,那些根本沒有觸發。任何人的想法如何我可以實現這一點?

+3

'var sio = io.connect(); sio.socket.on('error',function(reason){ console.error('Unable to connect Socket.IO',reason); });' 你試過了嗎? – 2013-05-09 03:58:04

+0

是的。我確實嘗試過 - 這在客戶端是正確的?也嘗試過「connect_failed」,但沒有運氣。 – Tamas 2013-05-09 04:06:57

+0

AnhTú的解決方案在客戶端嘗試連接到停機的服務器時起作用。所以基本上需要兩個腳本來涵蓋所有可能的場景。 – 2014-04-11 16:22:34

回答

9

disconnect事件是你想聽的。

var socket = io.connect(); 

socket.on('connect', function() { 
    alert('Socket is connected.'); 
}); 

socket.on('disconnect', function() { 
    alert('Socket is disconnected.'); 
}); 
+0

謝謝馬修! – Tamas 2013-05-09 23:49:54

+0

我還建議偵聽'connect_error'事件[由cbautista建議](http://stackoverflow.com/questions/16454005/socket-io-node-js-detecting-if-server-is-down#31599873)。這兩個事件很有用,但如果*初始連接嘗試*失敗,它們將不顯示任何內容。 – joeytwiddle 2017-03-06 07:55:00

8

如果你希望能夠檢測到客戶端無法連接到服務器,然後嘗試使用connect_error。這適用於socket.io-1.3.5.js。我在https://stackoverflow.com/a/28893421/2262092中發現了這個。

這裏是我的代碼片段:我的發展過程中

var socket = io.connect('http://<ip>:<port>', { 
    reconnection: false 
}); 
socket.on('connect_error', function() { 
    console.log('Failed to connect to server'); 
}); 
0

命中此問題,並注意到我每次重啓服務器的時間我的事件調用都增加了一倍,因爲我的插座重新連接。原來我的解決方案,這是不是重複連接是這樣的

var socket = io.connect();

socket.on( '連接',函數(){

的console.log( '用戶連接!');

});

socket.on( '信息',函數(消息){

的console.log(消息);

});

(由KasperTidemann找到這在https://github.com/socketio/socket.io/issues/430

事實證明,這是我監守放「消息」偵聽器「連接」功能的內部。安置在聽衆之外,解決了這個問題。

無論您身在何處,都歡迎您來到Kasper Tidemann。

繼續前進!