socket.io излучение в комнату по умолчанию не работает
Когда я вызываю emit без io.emit(), все подключенные клиенты получают сообщение, как вы ожидаете. Однако при попытке отправить сообщение в комнату по умолчанию с помощью io.to (socket.id).emit () клиент не получает сообщение.
Ссылка на документацию комнаты по умолчанию на http://socket.io/docs/rooms-and-namespaces/
Использование nodejs v4.2.6
Клиент:
var socket = io();
socket.on('connect', function() {
$.ajax({
url: '/some-path',
type: 'POST',
data: {socket_id: socket.id},
success: function(data) {
console.log(data);
}
});
});
Сервер:
app.post('/some-path', function(req, res) {
var socketID = req.body.socket_id;
io.to(socketID).emit('message', {'message': socketID});
res.end(socketID);
});
1 ответ
Это правильное решение. Было обнаружено, что номер комнаты socket.id по умолчанию, который используется сервером для установки комнаты по умолчанию, не совпадает с клиентским socket.id. Пожалуйста, порекомендуйте.
На клиенте, если вы оцениваете socket.id
вы получаете что-то вроде, v4eEdSX5RnDSXjzuAAAA
На сервере в, io.on('connection', function(socket){})
если вы оцениваете socket.id
вы получите что-то вроде, /#v4eEdSX5RnDSXjzuAAAA
, Обратите внимание на /# перед клиентским socket.id.
Таким образом, у вас есть два способа решения этой проблемы
- При звонке выбрасывать prepend
/#
к идентификатору сокета - Переопределите прослушиватель io "connection", чтобы установить для комнаты идентификатор сокета без
/#
указывая префикс
Выбранный второй вариант выглядит следующим образом:
io.on('connection', function(socket) {
socketID = socket.client.id;
socket.join(socketID);
console.log('a user connected ' + socketID);
});