如何使用node.js保持TCP连接一直打开

3
我正在使用Node.js构建一个TCP消息服务器。它只是在我的服务器上等待连接,例如来自Arduino的连接。
当它在连接时使用唯一标识符(而不是IP)进行身份验证,因此我可以在服务器> Arduino之间写入数据,而无需知道客户端设备的IP地址。
但为了提高效率,我希望连接尽可能长时间保持打开状态,最好是直到客户端设备关闭连接(例如在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。这有点叫法不准确,因为它实际上检测断开的连接并关闭它们。它对于让连接保持打开状态的时间长于正常情况下的时间没有做任何事情。 - SystemParadox
1个回答

4

最好的选择是定期发送自己的心跳消息。

此外,你不需要使用 soc.on('connect', ...),因为当执行回调时,客户端套接字已经连接。


好的,那就用心跳吧。你建议设置多长时间间隔?心跳必须是一个字符吗?或者它也可以是一些不同于数据的东西吗? - stUrb
它可以是你的应用程序所需的任何间隔。实际有效载荷并不重要,只要你能在另一端唯一且轻松地识别它即可。 - mscdex
@mscdex 你好,我需要连接到TCP服务器,我有服务器的主机和端口。除了“net”模块之外,我能用其他模块进行连接吗? - Ashh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接