通过GCP负载平衡器进行Socket.io重新连接问题

时间:2019-04-02 17:50:30

标签: javascript node.js sockets socket.io

当我通过GCP负载平衡器使用socket.io库时,发生了奇怪的事情。

我在负载均衡器后面只有一个节点。

在用户连接到任何套接字后30秒钟内,负载均衡器会断开套接字连接。默认情况下,GCP将任何请求的HTTP超时设置为30秒。这是由于GCP LB超时而发生的。我们可以增加它来避免出现套接字问题Google say.,但是就客户端而言,这种方式对我来说并不可行,因为客户端可以使用具有自己的HTTP超时设置的本地防火墙。

第一次断开连接发生在30秒内,客户端上的socket.io立即重新连接到套接字,并且当我因Google中断而中断连接后,库似乎没有问题,就可以正常连接了,但是最主要的问题是,重新连接后我再也无法通过套接字接收消息了。 Node.JS侧的Connect事件在第一次连接后仅触发一次,因此由于客户端重新连接,我看不到与新连接相关的任何日志。为什么呢为什么在UI端没有看到任何错误,而在后端却看不到成功的连接,并且套接字停止工作了,我还能看到成功的连接吗?

我正在使用房间,这是客户端连接的外观:

var socket = io.connect('https://load.balancer.host');
socket.emit('join', { conversationId: 'conversation1' });
socket.on("new_msg", function (data) {
      alert(JSON.stringify(data));
});

我的后端如何处理此连接:

io.sockets.on("connection", (socket) => {
    socket.on("join", (data) => {
        socket.join(data.conversationId); // We are using room of socket io

        socket.on("disconnect", (data) => {
            socket.leave(data.conversationId);
            console.log("Got disconnect!");
        });
    });
});

谢谢您的建议

0 个答案:

没有答案