我有一台服务器和几台客户端设备。所有设备都运行Ubuntu OS。我在服务器中有一个基于ExpressJs的Node应用程序。我正在尝试跟踪客户端设备的在线状态。
服务器中的NodeJs应用程序通过SocketIO与get / post端点和Web套接字集成。服务器在Internet上具有公共IP,并且设备没有公共IP
客户端设备还有一个小应用程序,可以通过Web套接字与服务器通信,并可以发送API调用。
跟踪每台设备在线状态的最佳方法是什么? (考虑服务器应用程序的性能,延迟,可靠性等。)
答案 0 :(得分:1)
如果您在设备中打开与服务器的永久websocket连接,socket.io将提供您所需的一切。
请参阅pingTimeout
和pingInterval
选项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)
});
});
客户端也一样。
另请参阅客户端中的reconnection
,reconnectionAttempts
等:http://socket.io/docs/client-api/