nodejs:ws 模块使用 pm2 -i max cluster 模式启动 一核有难 其他核围观? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
f2yx
V2EX    Node.js

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

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

    服务端是提供的纯 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 需要群发的时候 应该怎么做呢?
    solu
        5
    solu  
       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     Solana     2565 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:06 PVG 20:06 LAX 05:06 JFK 08:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86