使用Redis商店扩展Engine.IO(与Socket.IO对比)

ben*_*ree 13 node.js socket.io

关于这个主题有几个问题,但没有一个问题可以解决.

我正在使用带有redis-store的Socket.IO,而我正在为流量增加做准备.我的托管公司说,"你需要使用Engine.IO而不是Socket.IO,因为它的效率更高",所以我很想弄明白这意味着什么.

像这样的问题似乎有相互矛盾的答案:

所以我看待它的方式:

  • Socket.IO 0.9降级
  • Engine.IO增强了
  • Socket.IO 1.0将使用Engine.IO
  • 如果要在多个实例上运行Engine.IO,则必须自己编写redis存储

但随后Engine.IO称其"负载平衡器友好",但对redis一无所知.它必须有某种外店,对吧?但如果它有多个传输和商店,那么Socket.IO有什么意义呢?

然后,我看到Socket.IO 可能被抛弃高调的公司正在博智.

如何扩展Engine.IO?我自己要写店吗?

ben*_*ree 10

只是想分享我上周学到的东西,但希望其他人出现并明确回答这个问题,这样我就可以给他们一张支票.

1)永远不要使用Socket.IO(截至0.9.16)

我的主人告诉我使用Engine.IO(或其他任何东西)是正确的.Socket.IO有很多重大问题,最糟糕的是它会意外地DDoS你的服务器.我亲身体验过这个客户端相对较少,它完全禁用了我的服务器,直到我可以重写Socket.IO.我缩放到25+无人机以吸收这一击,这无所谓.单个客户端每秒可以发送1000个请求.

2)其他发动机没有Redis商店

Socket.IO允许您通过放入Redis商店来跨节点进行广播.据我所知,Engine.IO,Primus和SockJS不提供此功能.因此,当这些引擎声称"负载均衡器"友好时,并不意味着您可以跨节点进行广播.我开始认为这实际上是一件好事.使用redis编写pub/sub相对容易,并且将它分离出来一直很好.

我最终使用PrimusEngine.IO,然后使用redis pub/sub在节点之间共享事件.我花了大约5个小时来删除Socket.IO,连接Primus,写下pub/sub,然后上线.到目前为止,这是一次更好的体验.

更新:

结束Engine.IO也进入重新连接循环(每秒几次),所以我最终使用了SockJS.它给了我最好的连接性和稳定性,Primus现在处理重新连接(SockJS没有做到).


Kur*_*tyn -1

好吧,正如你自己提到的,我应该看看 Primus。扩展是使用 HAProxy 实现的。作为底层通信,您仍然可以使用 Socket.io,也可以使用 engine.io。通过使用 Primus,您可以尝试不同的库。http://pusher.com/docs/server_libraries上有一篇关于扩展 Redis 的有趣文章。