websocket SocketIO在客户端非常频繁地使用“transfer close”关闭连接

xytpbqjk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(104)

我已经用我的express服务器设置了socket.io-client v2.3.0,我无法跟踪客户端(Angular 8)出现此错误的原因-“transfer close”。下面是我的代码示例:
Server:
var socketIO = require('socket.io');
var io = socketIO(server);
Client:
import * as io from 'socket. io-client';
私有套接字;
this.socket = io(url,{transmits:请选择“websocket”],升级:});
this.socket.on(“disconnect”,(reason)=> {console.log(reason)});//打印“运输关闭”
客户端重新连接很好,但这会造成很多不便。由于客户端的“传输关闭”问题,它无法从服务器接收一些发射,从而导致数据完整性问题。请告诉我这个问题的可能原因是什么,是否有任何工作来克服这个问题?
我在这个问题上纠结了好几天了。任何帮助将不胜感激。
谢谢.

klsxnrf1

klsxnrf11#

这个问题是重复的,但我会张贴我找到的解决方案之一,希望它有帮助。
尝试在空闲超时结束之前在服务器和客户端之间实现心跳。

{transports: ["websocket"],
        pingInterval: 60000,
        pingTimeout: 60000,
        upgradeTimeout: 30000, ...}

然后

setTimeout(() => this.sendHeartbeat(socket), 10000)
            socket.on("pong", (_data) => {})

private sendHeartbeat = (socket: socketIo.Socket) => {
    setTimeout(() => this.sendHeartbeat(socket), 10000)
    socket.emit("ping", { beat: 1 })
}

不要忘记实现接收方客户端。使用这个方法,我成功地避免了每次套接字空闲时的传输关闭。
如果有帮助就告诉我

相关问题