最近在使用socket.io开发一个实时交互应用,遇到一个问题:
1、socket.io所在的nodejs进程,由于需要负责与所有的client进行通信、心跳,再加上要做游戏内部的逻辑处理,所以占用了主线程cpu,并发连接数上不去
现在想把架构修改一下: 1、Nodejs工作进程(水平扩展) 负责与client通信、广播消息、心跳等,不处理业务逻辑。收到请求后,把请求转发给逻辑处理进程来进行业务处理
2、逻辑处理进程 负责内存中保存业务数据,接收工作进程的消息,进行逻辑处理,并把处理结果返回。
现在的问题是,如何实现这2种进程之间的通信比较好。 1、据我所知,node只提供了主、子进程之间的通信api,且写起来很麻烦 2、一种方法是工作进程和逻辑处理进程都作为一个http服务器存在,互相之间通过http通信,但感觉这种方式好像比较‘重‘
请教高手有没有好的办法
我做的一个项目中,是用socket进行服务通信,主要是考虑到服务可以异地部署,数据格式定义也要容易些。看了一篇文章,三种进程间通信方式,匿名管道、共享内存、套接字,其中匿名管道效率是最高的,Node的子进程通信应该也是采用这种方式吧
感谢,可以给个文章地址么。那你们的项目中是自己写socket,定义消息的格式来做的么
@wbpmrck 用的Node的socket模块,消息格式是JSON,可以多实践哈
可以起多个node进程啊(cluster)
可以多子进程处理,通信可以通过主进程的事件来触发和广播。
其实这是nodejs进程间通信协议的选择,考虑到以后的扩展性、分布式部署、简单易用等特点,socket.io长连接挺好。如果想提高效率,就用原生的socket协议吧。