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

标签 node.js nginx redis socket.io pm2

我一直在寻找各种解决方案,但是当我把它们放在一起时,它看起来非常困惑。

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

1) 我们的 friend Cam says刚刚实现 socket.io-redis当我们在最大数量的 CPU 上生成时会正常工作。
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”运行它。然后是我们心爱的 nginxupstreamip_hash 组会给我们带来同样的效果。

此外,我想让我的应用程序具有弹性。不仅在集群级别,而且在纵向扩展和横向扩展。鉴于我的应用程序在 redis 中包含 socket.io 实现和 session token 管理,最佳实践是什么? ?

我错过了什么还是我在这里完全错了?哪种扩展方式最好?

最佳答案

我有 solution !!!它对我来说非常好!感谢@elad 和贡献者。我已经进行了大量的测试(超过 2 个月!)并且从未遇到过问题。我不会通过解释代码片段的作用来不尊重作者,因为它已经被逐行描述得足够多了。
我花了很长时间,因为 repo 中有 Unresolved 问题,必须确定。现在我确信这些问题在理解不同组件的情况下是可行的。毕竟,这不是魔法!
看一看,如果您仍有疑问/问题,请告诉我。

关于node.js - 如何让socket.io在pm2集群模式下正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151166/

相关文章:

node.js - 如何设置端点来处理nginx后面的express中的websockets

nginx 大型静态文件在 AWS EBS 支持的服务器上服务缓慢

spring - 如果只做简单缓存,Redis 缓存比 Spring 缓存有优势吗?

node.js - 谷歌云 node.js 灵活的环境

node.js - 使用 .map 来丰富对象

node.js - 引用错误 : primordials is not defined error when installing Semantic UI

ubuntu - ERR_CONNECTION_REFUSED NGINX 代理反向

javascript - 流式传输文件而不下载它

laravel - 在 laravel 中每次测试后重置 Redis 数据库

python - 在 Redis 中获取多个哈希的最有效方法是什么?