如何让socket.io在pm2集群模式下正常工作?

How to make socket.io work properly with pm2 cluster mode?

我一直在寻找各种解决方案,但是当我把它们放在一起时,看起来很混乱。

我正在尝试为我的应用程序实现 pm2 集群模式,该应用程序具有 socket.io 实现。现在,我明白了为了使我的应用程序在集群模式下正常工作需要无状态的概念。 socket.io 不是无国籍的。困惑是,

1) 我们的朋友 Cam says 当我们在最大数量的 CPU 上生成时,只要实现 socket.io-redis 就可以正常工作。
2) 当 socket.io says 和我引用时,

Note: sticky-session is still needed when using the Redis adapter."

对于 1),根据我的研究,互联网应该不同意它会起作用。也许 Cam 先生幸运地拥有 websocket 的传输方法,并且可能不必处理 polling。但同时我认为它应该起作用,因为 redis-adapter 是我们用来使其无状态的。

信息:使用 websocket 作为传输方法对我有用,但我无法使用 polling 对其进行测试。

对于 2),我认为我们可以将 Joni 先生的 advice 与 运行 与 "pm2" IN "cluster" 合并,但在不同的端口上。然后我们亲爱的 nginxupstream 组和 ip_hash 会给我们 相同的效果。

此外,我想让我的应用程序具有弹性。不仅在集群级别,而且可以向上和向外扩展。考虑到我的应用程序在 redis 中包含 socket.io 实施和会话令牌管理,最佳实践是什么?

我是不是遗漏了什么或者我完全错了?哪种扩展方式最好?

我拿到了solution!!!它对我来说工作得很好!感谢@elad 和贡献者。我已经做了一些大量的测试(超过 2 个月!)并且从来没有遇到过问题。我不会通过解释代码片段的作用来不尊重作者,因为它已经被逐行描述得足够多了。
我花了足够长的时间,因为回购协议上有未解决的问题,必须确定。现在我确信这些问题在理解不同组件的情况下是可行的。毕竟,这不是魔法!

看看,如果您还有 doubts/questions,请告诉我。