V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
f2yx
V2EX  ›  Node.js

nodejs:ws 模块使用 pm2 -i max cluster 模式启动 一核有难 其他核围观?

  •  
  •   f2yx · 2018-12-04 18:43:27 +08:00 · 4796 次点击
    这是一个创建于 2180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务端是提供的纯 WebSocket 服务做的游戏服务器,模块是 ws,没有用 express,使用 pm2 启动:pm2 start app.js -i max,虽然启动之后能正常显示,但是我拿虚拟机实际测试,分了 2 个 CPU 核心,本地客户端 20-30 个连接不停地发消息给服务端,结果是虚拟机的一个核心占用 50%,另一个核心 0%,测了很多次,结果都一样的,这是不是说明 pm2 不支持 Socket/WebSocket 形式的负载均衡?只支持纯 Web 服务的负载均衡?因为我看百度上对 pm2 的使用,也没说 pm2 这个负载均衡有什么问题,所以请教一下大家,是不是这么回事?

    另外想问下,如果 pm2 实现不了 ws 的单机多核负载平衡,有什么其他办法可以实现?我的需求是单机多核心的原生 websocket 服务,谢谢大家.

    10 条回复    2019-03-01 23:32:33 +08:00
    imherer
        1
    imherer  
       2018-12-04 18:54:35 +08:00
    长连接的确实没试过,不知道行不行

    实在不行,你把代码复制多份,然后单核启动,一个进程一个端口😂😂
    f2yx
        2
    f2yx  
    OP
       2018-12-04 18:57:33 +08:00
    @imherer 这样的话 进程间通信就会变的极为复杂
    imherer
        3
    imherer  
       2018-12-04 19:04:14 +08:00
    @f2yx 别考虑进程间通信的事。 你就把多个端口看成多个地址,在这个上面在做一层逻辑用来维护每个客户端应该连接到哪一个地址
    f2yx
        4
    f2yx  
    OP
       2018-12-04 19:11:46 +08:00
    @imherer 需要群发的时候 应该怎么做呢?
    solupro
        5
    solupro  
       2018-12-04 19:19:50 +08:00
    @f2yx redis 发布订阅?每个进程既是订阅者也是发布者
    f2yx
        6
    f2yx  
    OP
       2018-12-04 19:33:25 +08:00
    请问下还有没有更好的方案 总感觉这样的思路写代码越来越复杂
    dbolo123
        7
    dbolo123  
       2018-12-04 20:14:03 +08:00 via Android
    把 ws 那块写成无业务无关的中间件,然后再搭个 http 后台跟中间件通信?
    sunzongzheng
        8
    sunzongzheng  
       2018-12-04 21:26:12 +08:00 via Android
    我也找过答案,只找到这个方案: 一实例一端口,cluster 模式下通过环境变量拿到当前的实例 id 递增端口号,通过 nginx 负载均衡 socket,配置 ip-hash 保证同 ip 的请求发到同一实例,实例间通信用 redis。后面想想非单机的场景,这样也能理解了
    f2yx
        9
    f2yx  
    OP
       2018-12-08 15:42:50 +08:00
    @sunzongzheng 谢谢
    skyshy
        10
    skyshy  
       2019-03-01 23:32:33 +08:00
    PM2 官方文档已做出说明了,在 cluster 模式下,你程序的这些进程之间不能有状态或数据直接共享。可选择用 Redis 或其他数据库共享进程数据。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   908 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:49 · PVG 05:49 · LAX 13:49 · JFK 16:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.