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

时间:2019-06-03 15:59:24

标签: javascript typescript websocket socket.io nestjs

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

我尝试ping服务器端和pong客户端,但是服务器端无能为力...

服务器端(nest.js)

@WebSocketGateway({
  pingTimeout: 100
})
export class LockGateway {

  @SubscribeMessage('ping')
    ping(socket: Socket, data: any) {
      console.log(`Ping with ${data.toString()}`);
      socket.emit('pong', (response) => {
        console.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,但是在服务器端,什么都没有:/

2 个答案:

答案 0 :(得分:0)

您不能对SubscribeMessage使用“ ping”。尝试用另一个事件名称替换它。

答案 1 :(得分:0)

工作解决方案:

客户端:

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

}