【问题标题】:How to keep a tcp connection always open with node.js如何使用 node.js 保持 tcp 连接始终打开
【发布时间】: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。这有点用词不当,因为它实际上检测到断开的连接并关闭它们。它不会做任何事情来使连接保持打开的时间比其他方式更长。

标签: node.js sockets tcp


【解决方案1】:

最好的办法是定期发送自己的心跳消息。

另外,您不需要soc.on('connect', ...),因为在执行回调时客户端套接字已经连接。

【讨论】:

  • 好的。那是心跳。你建议什么间隔?心跳必须是角色吗?或者它也可能与数据不同?
  • 它可以是您认为应用程序所需的任何间隔。实际有效载荷无关紧要,只要您可以在另一端唯一且轻松地识别它即可。
  • @mscdex 嗨,我需要连接到 tcp 服务器,我有服务器的主机和端口。我可以使用除net 之外的其他模块来连接吗?
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2019-10-19
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
相关资源
最近更新 更多