socket.io为什么不能支持同端口多进程模式?

justkids

之前一个问题中说socket.io的服务端运行机制决定每个端口只能开启一个进程。(http://wenda.workerman.net/?/question/882
能再进一步说明一下 为啥么,它的机制有什么不同的导致一个端口只能开启一个进程?

5644 1 0
1个回答

walkor

主要是因为多个进程间需要实时同步客户端数据非常困难。数据包括socket.io客户端sid数据、要推送给客户端的数据、业务给socket.io连接对象赋值的动态属性变量等

拿推送数据同步问题举例
1、在浏览器不支持websocket时,socket.io会使用http协议和服务器通讯(socket.io握手时也是http请求)。
2、http协议是请求响应式的,客户端没有发起http请求时,服务端无法主动推送数据给浏览器。
3、如果一个端口多个进程监听,浏览器发起http请求可能会发送到不同的进程。
4、假如服务端要给某个客户端推送数据,此时客户端还没发出http请求,服务端不能直接发送给浏览器
5、这时请求只能在某个进程(假设是A进程)内部缓冲,等待客户端发器http请求
6、假设浏览器发起http请求到B进程,那么会导致A进程的要推送的数据无法推送给浏览器

  • lt 2017-01-30

    A进程与B进程能不能通过GlobalData之类的组件共享缓冲数据解决这个问题?如果可以,GW框架应该能实现对socketIO协议的支持吧?那就完美了,分布式部署更方便。

年代过于久远,无法发表回答
🔝