gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:56 25 4
gpt4 key购买 nike

我正在制作一个用 ccapture 记录的 threejs 动画

它取决于每个客户端都有一个到 Node 后端的连接,它接收一个“渲染帧”套接字事件。

这工作了一段时间,但几分钟后,客户端在没有出错的情况下静静地关闭了连接,然后创建了一个新连接,从而失去了第一个初始套接字连接。我始终保持窗口打开并保持专注。

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

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!

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

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 connections dropping/reconnecting?

Your problem is around socket timeouts. If there's no activity on a certain socket, socket.io will close it automatically.

An easy (and hackish) fix is to send a heartbeat to the connected client to create activity and stop the socket from timing out.

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});
});

关于javascript - socketio 客户端静静地失去连接并创建新的套接字(传输关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com