0

尊敬的,
我使用 Node.js 创建 TCP 客户端,使用“net”模块与硬件设备(仅支持 TCP 协议)连接,该设备在可用时流式传输数据,以便我可以监听(“数据”,回调)事件,
这个对于单个客户端来说很好,但是当我有超过 10 个具有唯一 IP 地址的硬件设备时,我需要管理多个客户端和事件。问题是

当客户端数量增加时,来自不同设备的数据仍将是异步的还是将被阻止?

我可以同时从多个设备接收数据吗(意味着在几秒钟内没有任何延迟,因为应用程序是实时的,我们不需要延迟从硬件获取数据)

如何管理多个客户端或父/子进程,每个子进程通过套接字通信连接到硬件(可数)是有效的方法?

当 TCP 连接中断时(网络问题、以太网电缆问题),但我很确定不存在“检测连接中断的可靠方法”。如何解决并重新连接到断开的连接?

如果有任何指导/经验,请分享以解决此工程问题。

提前致谢

4

1 回答 1

2

这应该是 node 擅长的东西,也是 node 的一个很好的用例。

当客户端数量增加时,来自不同设备的数据仍然是异步的还是会被阻塞?

即使有大量客户端,从您的套接字读取和写入也应该是异步的。

我可以同时从多个设备接收数据吗(意味着在几秒钟内没有任何延迟,因为应用程序是实时的,我们不需要延迟从硬件获取数据)

是的,节点事件循环是通过 libuv 实现的,http: //docs.libuv.org/en/v1.x/ 。我对它或它的实现不是很熟悉,但我假设它将事件处理委托给最有效的 OS 库(epoll、kqueue)。通过它 IO 是异步的,你不需要做任何特别的事情,除了使用节点网络库并注册对套接字读取、打开、关闭等采取的操作。https://nodejs.org/api/net.html# net_class_net_socket

如何管理多个客户端或父/子进程,每个子进程通过套接字通信连接到硬件(可数)是有效的方法?

通过使用 net tcp 服务器 api,您可以注册对某些 IO 套接字事件采取的操作,并且它应该无缝处理许多并发打开的连接(成百上千)我不太清楚您设置了哪种父/子进程记住。

当 TCP 连接中断时(网络问题、以太网电缆问题),但我很确定不存在“检测连接中断的可靠方法”。如何解决并重新连接到断开的连接?

这是一个独立于节点的问题,应该有不少方法来处理它。问题是,您如何检测服务器是否无法访问,以及连接是否具有极高的延迟?

如果套接字关闭,您可以订阅关闭事件并执行适当的操作。https://nodejs.org/api/net.html#net_event_close_1。另一种策略是实现超时。如果在几分钟内没有收到数据,您可以通过关闭连接来清理连接

于 2016-01-13T18:57:19.093 回答