V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
macscsbf
V2EX  ›  程序员

websocket 多实例问题

  •  
  •   macscsbf · 2021-12-10 15:41:36 +08:00 · 1718 次点击
    这是一个创建于 1111 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在是 k8s 上我开了多个 pod 的服务,每个服务都是一个 websocket 服务端,外部有设备通过 nginx 代理随机选择我的一个 pod 进行连接,我接收连接会请求另一个服务校验, 另一个服务就会查看这个设备之前是否在线,如果在线就往 消息队列里推送踢设备请求,然后我会再建立新的连接。现在问题是设备关机了,但是 socket 连接还未断开,如果设备重启的很快又会创建一个新的连接进来,然后这个连接和之前的连接可能在同一个 pod 上,因为另一个服务会知道这个设备是在线,所以要踢掉旧的连接,但是他是往消息队列里推送,所以另一个服务并不知道到底有没有成功踢除设备, 而这时候我的服务又创建一个新的连接把新的连接踢掉了,这就不知道怎么处理了,目前我就是让服务睡了几秒保证踢掉那个设备。不知道大佬们有什么想法。

    4 条回复    2021-12-13 10:18:51 +08:00
    XyIsMy
        1
    XyIsMy  
       2021-12-10 16:52:47 +08:00
    就不能简化下描述么。而且设备关机了,socket 资源也会释放的呀,没有这个机制就加一层 心跳机制,N 秒没有心跳,就直接 T 掉就好了
    sujin190
        2
    sujin190  
       2021-12-10 17:01:31 +08:00 via Android
    websocket 过 nginx 跪了

    关于下线问题客户端开心跳,服务端也还要做心跳超时啊,而且吧一般来说负载均衡应该设置为同一个设备始终连接到同一个 pod ,这样可以确保新连接建立时踢掉老连接,保证一个设备只会有一个连接在线才是
    macscsbf
        3
    macscsbf  
    OP
       2021-12-13 10:17:29 +08:00
    这个能做到指定吗,我是有超时的呀,但是超时时间是 95 秒,客户端是 90 秒 1ping,客户端关机了立马上线的话就会有问题
    macscsbf
        4
    macscsbf  
    OP
       2021-12-13 10:18:51 +08:00
    @XyIsMy 客户端是 90s 1 次 ping 我设置的超时时间是 95 秒,现在设备关机就不会释放 socket,所以如果设备立马重新连上来就会有这个问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:08 · PVG 23:08 · LAX 07:08 · JFK 10:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.