Javascript Nest.js socket.io服务器/客户端之间的ping/pong
我将nestjs后端和Vuejs前端与socket.io一起使用,并需要查看用户是否为“isAlive” 我试着在服务器端和客户端使用乒乓球,但服务器端没有任何作用 服务器端(nest.js)Javascript Nest.js socket.io服务器/客户端之间的ping/pong,javascript,typescript,websocket,socket.io,nestjs,Javascript,Typescript,Websocket,Socket.io,Nestjs,我将nestjs后端和Vuejs前端与socket.io一起使用,并需要查看用户是否为“isAlive” 我试着在服务器端和客户端使用乒乓球,但服务器端没有任何作用 服务器端(nest.js) @WebSocketGateway({ ping超时:100 }) 导出类锁网关{ @SubscribeMessage('ping') ping(套接字:套接字,数据:任意){ log(`Ping with${data.toString()}`); socket.emit('pong',(响应)=>{ l
@WebSocketGateway({
ping超时:100
})
导出类锁网关{
@SubscribeMessage('ping')
ping(套接字:套接字,数据:任意){
log(`Ping with${data.toString()}`);
socket.emit('pong',(响应)=>{
log(`Response from client-side:${Response.toString()}`);
});
}
}
客户端(vuejs/ts)
this.socket.on('pong',()=>{
console.log('PONG I m alive');
this.socket.emit('ping','I m alive');
});
在客户端,我在pong中拥有所有console.log,但在服务器端,我什么都没有://您不能对订阅消息使用“ping”。尝试用另一个事件名称替换它。工作解决方案:
客户端:
this.socket.on('isAvailable', () => {
this.socket.emit('keepAlive', socketClient.userUid);
});
服务器端:
@SubscribeMessage('join')
join(socket: Socket, data: any) {
if (data.userUid != null) {
this.userUid = data.userUid;
}
if (data.userUid && data.userUid !== ANONYMOUS_USER) {
this.keepAliveInterval = setInterval(() => {
socket.emit('isAvailable');
}, RETRY_EACH);
this.setOfflineTimeout(socket, data.userUid);
}
}您是否尝试增加ping超时,可能没有pong的时间在100以上pingTimeout
没有任何变化,我改变了策略,并使用addEventListener
和window.setTimeout(this.doInactive,this.timeoutin毫秒)测试客户端的不活动性嘿,欢迎!你的回答需要更多的信息。也许可以使用有效的事件名称添加示例代码段。或者链接/doc-quote以说明为什么不能使用ping。