• 请不要在回答技术问题时复制粘贴 AI 生成的内容
imherer
V2EX  ›  程序员

请教关于 socket.io 负载均衡问题

  •  
  •   imherer · Sep 13, 2017 · 3211 views
    This topic created in 3343 days ago, the information mentioned may be changed or developed.

    最近用 socket.io 做游戏服务端,按照官方的方案: https://socket.io/docs/using-multiple-nodes 做了负载均衡,主要思想就是用 Nginx 做 ip_hash。但是现在问题来了: 假如我有 S1,S2,S3 这 3 台服务器来做 socket 服务器,还有一台服务器 A 上面装了 Nginx 用来负载前面的 S1,S2,S3。这样用户一上来先连到 A,然后通过 A 分发到后面的 S1,S2,S3,但是这样 A 这台服务器就会产生单点故障,如何解决呢?

    因为之前的业务基本上都是用 AWS 的 ELB,所以不存在这个问题,但是 ELB 不支持 TCP 的粘性会话,所以这里想用 Nginx 来解决。 不知道各位大大有没有更好的解决方案。

    还有一个问题就是因为游戏是开房间机制的,几个用户在同一个房间内游戏(游戏时间很短,就几分钟),在游戏的过程中有一些服务端主动发起的倒计时什么的,如果我用了负载均衡(即多个 socket )如何保证多个服务器不会重复下发同样的指令呢?

    10 replies  •  2017-09-14 13:06:56 +08:00
    aru
    aru
    Sep 13, 2017 via iPhone❤️1
    1
    1. nginx 非常稳定,负载均衡的开销也很小,一般不会成为瓶颈,如果不是服务器本身原因,也很难挂掉。
    2. socket 服务器在后端通过某种方式选举每个房间的主动发起指令 socket 服务
    t123yh
    t123yh
    Sep 13, 2017 via Android❤️1
    2
    后端可以使用消息队列来管理推送。
    imherer
    imherer
    OP
    Sep 14, 2017
    3
    @aru 但是毕竟只有只有一台,还是不够保修。 不知道 Nginx 通用的做法是什么
    imherer
    imherer
    OP
    Sep 14, 2017
    4
    @t123yh 好的,谢谢。我看看消息队列。
    mooncakejs
    mooncakejs
    Sep 14, 2017❤️1
    5
    socket.io 自己维护了 session,也支持断线重连,所以用 tcp 代理就够了。
    imherer
    imherer
    OP
    Sep 14, 2017
    6
    @mooncakejs 能详细点吗? 这块不是很懂。Nginx 的 ip_hash 是可以实现的对吧?
    mooncakejs
    mooncakejs
    Sep 14, 2017❤️1
    7
    @imherer socket.io 负载均衡关键的不是前面是 nginx 还是 slb 或者 haproxy 之类,而是 socket.io Adapter 可以同步事件消息, 如果你担心 nginx 会造成单点故障,直接用 ELB 没问题的。
    imherer
    imherer
    OP
    Sep 14, 2017
    8
    @mooncakejs
    @aru
    谢谢,但是现在对于 1 楼的 2 这个问题,我不知道怎么选举。
    aru
    aru
    Sep 14, 2017
    9
    @imherer
    我猜推送消耗的资源不算多,用简单的办法来实现就行了。
    将房间人数除以房间 socket 服务的数量,取编号为余数的 socket 服务
    imherer
    imherer
    OP
    Sep 14, 2017
    10
    @aru 谢谢,我研究研究。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1483 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 00:24 · PVG 08:24 · LAX 16:24 · JFK 19:24
    ♥ Do have faith in what you're doing.