【发布时间】:2014-05-28 11:23:52
【问题描述】:
我正在用 nodejs 构建一个 tcp 消息服务器。 它只是坐在我的服务器上等待接受来自 Arduino 的连接。
因为它在连接时用唯一 ID(不是 IP)标识自己,所以我可以在不知道客户端设备 IP 地址的情况下从服务器 > arduino 写入数据。
但是为了提高效率,我希望连接尽可能长时间地打开,最好是只要 client-device 关闭连接。 (例如在 ip 更改或其他方面)
这是服务器的(相关部分):
var net = require('net'),
sockets = {};
var tcp = net.createServer(function(soc){
soc.setKeepAlive(true); //- 1
soc.on('connect', function(data){
soc.setKeepAlive(true); //- 2
});
soc.on('data', function(data) {
//- do stuff with the data, and after identification
// store in sockets{}
})
}).listen(1111);
soc.setKeepAlive(true) 是保持连接活动的正确方法吗?
如果是这样,放置它的正确位置是什么?在连接事件中 (1),或在回调中 (2)。
如果这不是这样做的方法,那是什么?
【问题讨论】:
-
socket.setKeepAlive(true) 只启用 TCP keepalive。这有点用词不当,因为它实际上检测到断开的连接并关闭它们。它不会做任何事情来使连接保持打开的时间比其他方式更长。