Я использую бэкэнд Nest JS с внешним интерфейсом React-native (expo) и пытаюсь подключить эти два через библиотеку socket.io.
Я могу создать события от моего сервера до моего мобильного приложения, но по какой-то причине не удается получить событие, связанное с указанным c местом для запуска.
Код моего мобильного приложения:
static socket = socketIOClient(HttpService.socketUrl + '/room', {
transports: ['websocket'],
reconnectionDelay: 1000,
reconnection: true
});
//Called on button click
static joinRoom(roomId) {
console.log('subscribing to room', roomId); //This successfully logs to the console
RoomListener.socket.emit('room-subscription', roomId);
RoomListener.socket.on('room-event', function(data) {
console.log(data); //This never happens!
}
}
и мой внутренний код:
@WebSocketGateway(80, { namespace: 'room' })
export class RoomGateway implements OnGatewayConnection {
@WebSocketServer() server: Server;
handleConnection(client: any, ...args: any[]) {
//These successfully log to the console
console.log('connection');
console.log(client.id);
}
@SubscribeMessage('room-subscription')
async joinRoom(
@MessageBody() data: string,
@ConnectedSocket() socket: Socket,
): Promise<string> {
console.log('adding to room ', data); //This successfully logs to the console
socket.join(data);
return data;
}
@SubscribeMessage('roomTest')
roomTest(
@MessageBody() data: string,
@ConnectedSocket() socket: Socket,
): string {
console.log('emitting to room', roomId); //This successfully logs to the console with the proper data
this.server.in(roomId).emit('room-event', 'hello');
return data;
}
}
Я также пробовал this.server.of('/room').in(roomId).emit('room-event', 'hello);
, а также this.server.to(...).emit(...)
и те же 3 комбинации с this.server.sockets
. Мне не удалось найти четкую документацию о разнице между ними, и я смущен тем, почему я не могу отправить свое мобильное приложение.
Заранее спасибо!