首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

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

  •  
  •   f2yx · 78 天前 · 876 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务端是提供的纯 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 服务,谢谢大家.

    9 回复  |  直到 2018-12-08 15:42:50 +08:00
        1
    imherer   78 天前
    长连接的确实没试过,不知道行不行

    实在不行,你把代码复制多份,然后单核启动,一个进程一个端口😂😂
        2
    f2yx   78 天前
    @imherer 这样的话 进程间通信就会变的极为复杂
        3
    imherer   78 天前
    @f2yx 别考虑进程间通信的事。 你就把多个端口看成多个地址,在这个上面在做一层逻辑用来维护每个客户端应该连接到哪一个地址
        4
    f2yx   78 天前
    @imherer 需要群发的时候 应该怎么做呢?
        5
    solupro   78 天前
    @f2yx redis 发布订阅?每个进程既是订阅者也是发布者
        6
    f2yx   78 天前
    请问下还有没有更好的方案 总感觉这样的思路写代码越来越复杂
        7
    dbolo123   78 天前 via Android
    把 ws 那块写成无业务无关的中间件,然后再搭个 http 后台跟中间件通信?
        8
    sunzongzheng   78 天前 via Android
    我也找过答案,只找到这个方案: 一实例一端口,cluster 模式下通过环境变量拿到当前的实例 id 递增端口号,通过 nginx 负载均衡 socket,配置 ip-hash 保证同 ip 的请求发到同一实例,实例间通信用 redis。后面想想非单机的场景,这样也能理解了
        9
    f2yx   74 天前
    @sunzongzheng 谢谢
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1213 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1