【发布时间】:2011-09-22 14:17:15
【问题描述】:
根据socket.io示例:
要广播,只需将
broadcast标志添加到emit和send方法调用。广播意味着向除了启动它的套接字之外的所有其他人发送消息。
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);
});
});
并得到一个异常:'无法调用未定义的方法'发送'。' 好的,所以我想,广播是单个套接字的功能(虽然感觉有点奇怪 - 单个套接字如何广播到所有其他......)。 所以我尝试了:
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.broadcast.send(msg);
});
});
但现在情况更糟——没有人收到消息,甚至发件人也没有。无论如何,这是我合乎逻辑的预期 - 一个套接字不能通过自身广播某些内容。这次也没有例外,所以为socket定义了广播。
如果我这样做:
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.send(msg);
});
});
那么只有原始发送者会收到消息,这又是非常合乎逻辑的——我使用了客户端相关套接字的“发送”。
那么问题来了:使用广播功能的正确方法是什么?
可能socket.io的开发者犯了一个错误,将广播功能添加到错误的对象(据我了解,它应该是命名空间的功能,但现在它只是为套接字定义的)?
【问题讨论】:
-
你试过
chat.socket.broadcast吗? -
@Raynos:感谢您的想法,但仍然 chat.socket.broadcast.send 和 chat.socket.broadcast 抛出未定义的异常。
标签: node.js broadcast socket.io