PM2 with socket.io

一般比较喜欢通过 PM2 来管理 node application,部署时一般也会使用 -i max 参数来打开尽可能多的进程,多数情况下这样做并不存在任何问题。

但是,socket.io 使用 XHR-Polling 方式来验证 SID,进而建立链接时,即使使用了 socket.io-redis,依然是无济于事的。因为 socket.io 需要 sticky load balance 固定到同一个进程上。官方提到一些方法 http://socket.io/docs/using-multiple-nodes,可以参考。基于此,也有另一些包,可以解决问题,比如 https://github.com/PROGrand/sticky-socket-cluster

总之,不能用简单用 PM2 来管理 cluster 了。PM2 和 socket.io 双方有一些踢皮球,所以这事儿暂时无解。哈