Socket.io广播到房间不工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket.io广播到房间不工作相关的知识,希望对你有一定的参考价值。
在使用"socket.io": "^2.0.4"
的node.js应用程序中
Socket.io初始化如下:
export let io: any;
io = socketio(server,
{
secure: secure,
rejectUnauthorized: false,
},
);
io.set('origins', '*:*');
io.origins('*:*');
io.on('connection', (socket) => {
socket.on('message', async (data) => {
}
}
我想将message
广播到房间里的所有插座
所以我做了 :
io.to(roomName).emit('message', data);
我记录了io()。to()。emit()后没有发出roomName和数据的问题
但是没有事件在message
传递,我错过了什么?
答案
您的sockect.IO是否在服务器端正确配置,这是一个基于rxjs for Angular的低级套接字服务api,可以使用,你可以使用
import { Injectable } from '@angular/core';
import * as socketio from 'socket.io-client';
import {environment} from '../../../environments/environment';
import {Observable} from 'rxjs/Observable';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class SocketService {
private socket: SocketIOClient.Socket;
connected$ = new BehaviorSubject<boolean>(false);
constructor() {
this.socket = socketio(environment.socket.baseUrl, environment.socket.config);
this.socket.on('connect', () => this.connected$.next(true));
this.socket.on('disconnect', () => this.connected$.next(false));
}
join(room: string) {
// auto rejoin after reconnect mechanism
this.connected$.subscribe(connected => {
if (connected) {
this.socket.emit('join', {room});
}
});
}
disconnect() {
this.socket.disconnect();
this.connected$.next(false);
}
emit(event: string, data?: any) {
console.group();
console.log('----- SOCKET OUTBAND -----');
console.log('Action: ', event);
console.log('Payload: ', data);
console.groupEnd();
this.socket.emit(event, data);
}
listen(event: string): Observable<any> {
return new Observable( observer => {
this.socket.on(event, data => {
console.group();
console.log('----- SOCKET INBOUND -----');
console.log('Action: ', event);
console.log('Payload: ', data);
console.groupEnd();
observer.next(data);
});
// dispose of the event listener when unsubscribed
return () => this.socket.off(event);
});
}
}
这段代码来自Avatsaev,感谢他与NGRX一起使用socket Io分享他的酷应用程序,你可以看看它与his service code的搭配方式
另一答案
请尝试以下代码:
socket.broadcast.to(roomName).emit('message', data);
更多信息:https://socket.io/docs/emit-cheatsheet/#
以上是关于Socket.io广播到房间不工作的主要内容,如果未能解决你的问题,请参考以下文章