我将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,但是在服务器端,什么都没有:/
答案 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);
}
}