自己在使用cnode源代码在阿里云上搭建了服务(代码稍有改动), 在某些情况下, 程序会异常崩溃, 导致无法访问. 每次都要远程登入重启程序. 不知cnode社区是怎么应对这种情况, 是否后台有守护进程在跑么, 在服务挂掉的时候,能够重启服务. 如果有的话,能否提供下守护进程的源代码,学习一下.
@dayuoba 内部实现原理都是一样的,cluster也是child_porcess的封装,forever和pm2也不会例外的。
子进程监控本质上SIGCHLD信号的处理,当主进程收到子进程的SIGCHLD信号,就说明子进程挂掉了,我们可以重新fork一个进程出来顶上。
不知道你说的反向代理是什么问题?能详细说下么?
@coordcn cluster确实是对child_process的封装,但是cluster模块为了实现共享监听端口额外做了一些工作 cluster重表象理解可以理解为 nginx(shared port)->processes(different ports) 可控性不如拆分出来做高。
nginx下用cluster的问题是我在用socket.io时候遇到的,nginx 用upstream iphash ,cluster 用sticky-socket,这两个一起用的时候连接异常的紊乱。就是websocket的链接不断的断开重连。。。
@dayuoba cluster的确存在处理进程的不确定性问题,如果进程内不保持状态的话,是没有问题的,游戏,聊天服务器容易出问题。碰到这种问题,多进程监听不同的端口(做反向代理),或者将链接固定到某个进程上都是可行的。
cluster和nginx都会存在这样的问题,这个是共享端口多进程最大的问题,做web没什么问题,其他的就不保险了。
我跟楼主推荐cluster主要原因是简单,几句代码立竿见影,细节上没有你考虑的周到。