Javascript Nest.js socket.io服务器/客户端之间的ping/pong

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

我将nestjs后端和Vuejs前端与socket.io一起使用,并需要查看用户是否为“isAlive”

我试着在服务器端和客户端使用乒乓球,但服务器端没有任何作用

服务器端(nest.js)

@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毫秒)测试客户端的不活动性