В соответствии с примерами 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);
});
});
, но теперь это было еще хуже - никто не получил сообщение, даже отправитель.Во всяком случае, это было то, что я логично ожидал - один сокет не может транслировать что-то через себя.И на этот раз исключений нет, поэтому для сокета определена широковещательная рассылка.
Если я сделаю:
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.send(msg);
});
});
, тогда только исходный отправитель получит сообщение, и это опять-таки довольно логично - яиспользовал 'send' клиентского сокета.
Итак, вопрос в том, как правильно использовать функцию вещания?
Может быть, разработчикsocket.io допустил ошибку и добавил функцию широковещания к неправильному объекту (как я понимаю, это должна быть функция пространства имен, но теперь она определена только для сокета)?