Node.js'net'模块处理多个TCP客户端

时间:2016-01-13 16:31:30

标签: node.js sockets tcp node.js-client

尊敬的,
我使用Node.js创建TCP客户端,使用'net'模块连接硬件设备(仅支持TCP协议),Streams数据可用,这样我就可以收听 on('data',callback)事件,
这对单个客户端来说很好,但是当我有10个以上具有唯一IP地址的硬件设备时,我需要管理多个客户端和事件。 问题是

  

虽然客户端数量增加但来自不同设备的数据仍然是异步的,或者它将被阻止?

     

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

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

当TCP连接中断时(网络问题,以太网电缆问题),但我很确定没有“可靠的方法来检测连接中断”。我如何处理并重新连接到断开的连接?

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

提前致谢

1 个答案:

答案 0 :(得分:1)

这应该是节点擅长的东西,并且是节点的一个很好的用例。

  

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

即使存在大量客户端,从so​​cket读取和写入也应该是异步的。

  

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

是的,节点事件循环是通过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连接断开时(网络问题,以太网电缆   问题),但我很确定没有"可靠的方法   检测连接中断"。如何解决和重新连接   破碎的连接?

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

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