
[英]Emit() to everyone in /namespace - NodeJS, Socket.IO
我尝试了几种尝试尝试向连接到特定/ namespace的所有用户发出警报的方法,但是没有运气。 我可能会误会套接字的工作方式。 但是我现在所拥有的是两个在不同页面上打开的浏览器。 当用户连接到pageA时,该用户现在是'/ users'名称空间的一部分。 当用户连接到pageB时,该 ...
[英]Broadcasting to everyone except sender socket.io
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我正在我的应用程序中建立聊天。 我为此使用 socket.io。 当用户发送消息时,我会向我的服务器发送 api 请求。 api 将消息存储在数据库中,然后才发出,通过套接字服务向房间中的每个人提供新消息。 我有一个 SocketService class 这个方法:
private async broadcast({ type, data, chatId, senderId }: { type: string; data: any; chatId: string; senderId: string }) {
const excludedSocket = await this.getUserSocket(senderId);
if (chatId && excludedSocket) {
excludedSocket.emit;
} else if (excludedSocket) {
excludedSocket.emit(type, data);
} else if (room) {
gIo.to(room).emit(type, data);
} else {
gIo.emit(type, data);
}
}
我遇到的问题是 getUserSocket 返回一个没有广播或方法的 RemoteSocket object。 那么我该如何实现呢?
private async getUserSocket(userId: string) {
const sockets = await this.getAllSockets();
const socket = sockets.find((s) => s.data.uid === userId);
return socket;
}
private async getAllSockets() {
const sockets = await this.io.fetchSockets();
return sockets
}
socket.broadcast.emit
等同于发送到一组空房间(意思是“所有房间”)的BroadcastOperator ,不包括发送方套接字的套接字 ID“房间”。
可以使用server.except()从服务器实例创建相同的 BroadcastOperator
const sockets = await this.io.except(socketIdString).emit('blah', x)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.