当前位置: 首页 > 知识库问答 >
问题:

使用PM2在多实例节点环境中设置websockets

戚高洁
2023-03-14

我目前的设置是运行多个节点实例,使用PM2来管理实例并充当负载平衡器。

目前,我正在npm上使用WebSocket包,但如果有更好的替代方案,我绝不会与此联系在一起。

我希望套接字或多或少地推送数据单向从服务器到客户机,避免任何来自客户机到服务器。

到目前为止,我的解决方案是旋转另一个单独充当websocket服务器的节点实例。

我不确定这是最好的选择,我正在尝试看看是否有其他推荐的方法来管理跨多个节点实例的websockets,但仍然允许我根据需要向上/向下旋转节点实例。

共有1个答案

柯甫
2023-03-14

我建议您避免复杂的设置,只需让socket.io跨多个节点工作,从而分配负载;如果您想避免数据从客户机到服务器,只需不要监听服务器上传入的事件。

socket.io支持多个节点,在以下条件下:

>

  • 您已启用粘滞会话。这可以确保请求连接回它们所来自的进程。

    // setup io as usual
    const io = require('socket.io')(3000)
    
    // Set a redisAdapter as an adapter.
    const redisAdapter = require('socket.io-redis')
    io.adapter(redisAdapter({ host: 'localhost', port: 6379 }))
    

    从此一切照旧:

    io.emit('hello', 'to all clients')
    

    您可以在这里阅读更多内容:socket.io-使用多个节点。

  •  类似资料:
    • 我目前正在努力解决以下问题: 我有一个Java EE应用程序,它应该能够在集群中运行(实际上是这样)。对于节点之间的数据交换,我使用Hazelcast 3.3.3。因为我们的客户害怕UDP,所以我们使用TCP。因此,我为每个节点配置了3个hazelcast参数:要使用的网络接口、端口和集群成员。在现实生活中(不是docker环境),一切都正常。现在,我想将Java EE服务器放入docker容器中

    • 问题内容: 我正在尝试遵循一个教程,它说: 有几种加载凭证的方法。 从环境变量加载, 从磁盘上的JSON文件加载, 密钥需要如下: …这意味着,如果您正确设置环境变量,则根本不需要管理应用程序中的凭据。 基于一些谷歌搜索,看来我需要将变量设置为?如何以及在哪里设置这些凭据?请举例。 问题答案: 使用环境变量(在这种情况下)将凭据传递给您的应用程序。并且都可以分别从和访问。您无需对其进行编辑,只需访

    • 设置实验环境 我们参考了MIT的xv6、Harvard的OS161和Linux等设计了ucore OS实验,所有OS实验需在Linux下运行。对于经验不足的同学,推荐参考“通过虚拟机使用Linux实验环境”一节用虚拟机方式进行试验。 也有同学在MAC系统和Windows系统中搭建实验环境,不过过程相对比较复杂,这里就不展开介绍了。

    • 问题内容: 我的Jenkins管道看起来像这样(请原谅一些小的语法错误): 我的意图是与拥有一个节点,与拥有一个节点。 我实际上看到的是,命令运行时在两个节点上都设置了。 根据本教程,“ [特殊变量]的属性是当前节点上的环境变量。” 因此,我希望这能奏效。 问题答案: 在本教程的后面,它说: 在这种情况下,请勿使用env: 因为环境变量的覆盖仅限于对管道运行是全局的,而不是当前线程(以及代理)的局

    • 我正在进行一项预定的工作,该工作将以一定的间隔运行(例如每天下午1点),通过Cron安排。我正在使用Java和Spring。 编写计划作业非常简单 - 它确实如此:从db中抓取人员列表将某些条件,为每个人做一些计算并触发消息。 我正在本地和测试中开发单节点环境,但是当我们投入生产时,它将是多节点环境(带有负载均衡器等)。我关心的是多节点环境会如何影响计划的作业? 我的猜测是,我可能(或很可能)最终

    • 我试着去看一本教程,上面写着: 有几种方法可以加载凭据。 null 根据一些谷歌搜索,我似乎需要设置中的变量?如何以及在何处设置这些凭据?请举例。