node.js创建的tcp server与websocket server如何进行通信?
发布于 5 年前 作者 chengquan223 3305 次浏览 来自 问答

刚接触node.js。还望大手指导一二,感谢。 最近在做一个物联网的项目,通过手机端小程序、PC端网页发送指令控制设备,主要就是这样的一件事。下面是构思的流程图。我用node.js分别创建了一个tcp server(net)和一个websocket server(socket.io)服务器,现在卡在tcp server与websocket server通信上。请教各位大手可有思路或demo可以提供给我参考一下,再次感谢。 flow.png

4 回复

可分为三种情况: 1、TCP与WS在同一Node应用内,直接引用对象调用方法即可 2、TCP与WS在同一服务器的不同进程内,可用进程间通信的种种方式 3、TCP与WS在不同服务器,需要进行跨机的数据传输,一般通过网络方式

@alli 谢谢你的回复,我自己尝试了你说的第二种情况,tcp server与websocket server通过127.0.0.1:port的形式相互调用,现在可以走通了,现在担心的就是稳定性以及抗压能力,我尝试用pm2创建了多个tcp server和websocket server的进程,这里我又遇到了另一个问题,pm2创建的进程端口不固定,那我要如何做到一个websocket server进程对应另一个tcp server呢?

我也经常从事这种服务的设计,你这个图看起来还比较笼统,不太好直接给出参考,有下行控制,你的tcp和ws服务进程之间的数据传输以及设备标识绑定,还是需要详细考虑一个传输的结构的,并且这个结构会直接影响你如何实现tcp服务与ws服务的通讯,另外,不太理解你说的进程端口不固定,tcp服务端是可以固定端口的,pm2的多进程只是无脑创建cluster而已,再一个,你做这种应用,我觉得肯定是需要自己去实现cluster进程间通讯的,PM2解决不了问题,因为在nodejs,这种通讯系统,使用多核优势,进程间通迅少不了。

@chengquan223 进程间通信的方式很多,网络更加通用。建议使用消息队列中间件,架构可大可小。我喜欢用ZMQ,你可以查阅一下。另外,Node特别擅长IO处理,我把它定位成一种胶水,采取适当的架构,让执行模块各司其职,通过消息队列形式的数据或服务总线联合协作,共同实现分布式的有弹性的业务系统。

回到顶部