socketio 客户端默默地失去连接并创建新的套接字(传输关闭)

2024-01-12

我正在制作一个用 录制的 Threejs 动画ccapture https://github.com/spite/ccapture.js/

它取决于每个客户端与节点后端有一个连接,该连接接收“渲染帧”套接字事件。

这可以工作一段时间,但几分钟后,客户端在没有错误的情况下默默地关闭连接,然后创建一个新连接,从而丢失第一个初始套接字连接。我始终保持窗户打开并保持焦点。

我的套接字调试日志显示以下内容。它总是适用于几帧,但总是在一定但不一致的时间后下降:

socket.io:socket emitting event ["render-frame",{"frame":168}] +0ms
render frame
{ frame: 168 }
socket.io:client client close with reason transport close +6ms
socket.io:socket closing socket - reason transport close +0ms
socket.io:client ignoring remove for fbD1a4Wx0jBzJ7hqAAAA +1ms
SOCKET DISCONNECTED!

我简化了节点后端上的渲​​染帧侦听器以进行调试,现在它看起来像这样:

io.on("connection", function (socket) {
    socket.on("disconnect", function (socket) {
        console.log("SOCKET DISCONNECTED!");
    });
    socket.on("render-frame", function (data) {
        console.log(data);
    });
});

这种情况在所有浏览器中都会发生,尽管我只需要它在 Chrome 中工作。使用socket.io 1.3.7

任何有关“传输关闭”错误原因的帮助将不胜感激。


我认为你应该看看这个问题:NodeJS + Socket.io 连接断开/重新连接? https://stackoverflow.com/questions/9708604/nodejs-socket-io-connections-dropping-reconnecting

您的问题与套接字超时有关。如果某个套接字上没有活动,socket.io 将自动关闭它。

一个简单(且黑客)的修复方法是向连接的客户端发送心跳以创建活动并阻止套接字超时。

Server:

function sendHeartbeat(){
    setTimeout(sendHeartbeat, 8000);
    io.sockets.emit('ping', { beat : 1 });
}

io.sockets.on('connection', function (socket) {
    socket.on('pong', function(data){
        console.log("Pong received from client");
    });
}

setTimeout(sendHeartbeat, 8000);

Client:

socket.on('ping', function(data){
    socket.emit('pong', {beat: 1});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socketio 客户端默默地失去连接并创建新的套接字(传输关闭) 的相关文章

随机推荐