检查计算机在线状态的最佳方法是什么?

时间:2016-10-21 15:23:03

标签: node.js rest sockets websocket socket.io

我有一台服务器和几台客户端设备。所有设备都运行Ubuntu OS。我在服务器中有一个基于ExpressJs的Node应用程序。我正在尝试跟踪客户端设备的在线状态。

服务器中的NodeJs应用程序通过SocketIO与get / post端点和Web套接字集成。服务器在Internet上具有公共IP,并且设备没有公共IP

客户端设备还有一个小应用程序,可以通过Web套接字与服务器通信,并可以发送API调用。

跟踪每台设备在线状态的最佳方法是什么? (考虑服务器应用程序的性能,延迟,可靠性等。)

  1. 定期从客户端设备向服务器发送api呼叫
  2. 通过定期从客户端向服务器发送Web Socket消息
  3. 服务器通过Web Socket调用对设备进行按需检查
  4. 还有其他办法吗?请解释

1 个答案:

答案 0 :(得分:1)

如果您在设备中打开与服务器的永久websocket连接,socket.io将提供您所需的一切。

请参阅pingTimeoutpingInterval选项here

示例:

var io = require('socket.io')();
io.engine.pingInterval = 5000; // considers the connection closed after 5 seconds without a pong response from the client
io.engine.pingTimeout = 3000; // sends a new ping packet after 3 seconds  

当客户端由于ping超时而断开连接时,套接字的disconnect事件中会传递“ping timeout”:

io.on("connection", function(socket) {
    socket.on("disconnect", function(socket, e) {
        // e contains "ping timeout"
        // possible other values: "transport close" (connection closed by the client)
        // or "server namespace disconnect" (connection closed by the server)
    });
}); 

客户端也一样。

另请参阅客户端中的reconnectionreconnectionAttempts等:http://socket.io/docs/client-api/