簡體   English   中英

socket.io/node.js檢測服務器是否關閉

[英]socket.io/node.js detecting if server is down

我可以在客戶端執行某些操作來檢測到socket.io websocket不可用嗎? 類似於以下內容:

  • 服務器照常啟動
  • 客戶連接
  • 消息在服務器和客戶端之間來回發送
  • 服務器關閉 (不再可用)
  • 警告連接的客戶端服務器不可用

我試圖在客戶端添加'error'和'connect_failed'選項,但是沒有運氣,這些根本沒有觸發。 任何人有什么想法可以實現這一目標?

disconnect事件是您要監聽的事件。

var socket = io.connect();

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

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

如果您希望能夠檢測到客戶端無法連接到服務器,請嘗試使用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');
});

在開發過程中遇到此錯誤,並注意到每次重新設置服務器時,套接字重新連接時,事件調用都會增加一倍。 原來對我有用的解決方案,這不是在欺騙連接,這是

var socket = io.connect();

socket.on('connect',function(){

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

});

socket.on('message',function(message){

console.log(消息);

});

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

原來,這是因為我將“消息”偵聽器放在了“連接”功能中。 將其放在聽眾之外,可以解決此問題。

無論您身在何處,都為Kasper Tidemann喝彩。

繼續!!

connect_error對我不起作用(使用Apache ProxyPass並返回503)。

如果需要檢測初始失敗的連接,可以執行此操作。

var socket;
try {
    socket = io();
}
catch(e) {
    window.location = "nodeServerDown.php";
}

服務器關閉時,將用戶重定向到自定義錯誤頁面。

連接一次后,如果需要斷開連接。

你做這個:

socket.on('disconnect', function() {
    //whatever your disconnect logic is
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM