socket.io-如何在名称空间上广播消息?
|
根据socket.io的示例:
要广播,只需在
emit
和send
方法调用中添加broadcast
标志。广播意味着将消息发送到其他人(除了启动该消息的套接字之外)。
var io = require(\'socket.io\').listen(80);
io.sockets.on(\'connection\', function (socket) {
socket.broadcast.emit(\'user connected\');
});
我尝试将其与新的socket.io namsepace功能结合使用,因此得到了以下信息:
var chat = ioserver.of(\'/chat\');
chat.on(\'connection\', function (socket) {
console.log(\'chat connection\');
socket.on(\'message\', function (msg) {
console.log(msg);
chat.send(msg);
});
});
这可以正常工作,聊天通道中的每个人(而没有其他通道)都可以收到消息。但是发件人也可以得到它。
因此,我尝试执行以下操作:
chat.on(\'connection\', function (socket) {
console.log(\'chat connection\');
socket.on(\'message\', function (msg) {
console.log(msg);
chat.broadcast.send(msg);
});
});
并得到一个异常:\'无法调用未定义的方法'send \'。
好的,所以我认为,广播是单个套接字的功能(尽管感觉有点奇怪-单个套接字如何广播到所有其他套接字...)。
所以我尝试了:
chat.on(\'connection\', function (socket) {
console.log(\'chat connection\');
socket.on(\'message\', function (msg) {
console.log(msg);
socket.broadcast.send(msg);
});
});
但现在情况更糟了-没有人收到邮件,甚至没有发件人。无论如何,这是我逻辑上的预期-一个套接字无法通过自身广播某些内容。这次也没有例外,因此为套接字定义了广播。
如果我做:
chat.on(\'connection\', function (socket) {
console.log(\'chat connection\');
socket.on(\'message\', function (msg) {
console.log(msg);
socket.send(msg);
});
});
那么只有原始的发送者才能收到消息,这也很合逻辑-我使用了与客户端相关的套接字的\'send \'。
所以问题是:使用广播功能的正确方法是什么?
也许socket.io的开发人员犯了一个错误,并向错误的对象添加了广播功能(据我所知,它应该是名称空间的功能,但现在仅为套接字定义)?
没有找到相关结果
已邀请:
4 个回复
夏瓤跋棘
但是,如果不将其重新发送给发件人,则可以节省一些带宽并为用户创建更生动的体验。只需将他们的消息直接添加到聊天日志中,并可以选择仅使用自发射来确认已收到消息而没有问题。
补蹲农界维
进行此操作:
但是,文档尚不清楚如何对特定名称空间执行此操作。
只是
的快捷方式,因此您可以通过调用
广播给命名空间中的每个人:
帆攀缺锯欧
还检查此答案向发件人(Socket.io)以外的所有客户端发送响应
靛新比比催
看到 Nodejs和Socketio多房间聊天教程