socket.io 发送到默认房间不起作用
socket.io emit to default room does not work
当我在没有 io.emit() 的情况下调用 emit 时,所有连接的客户端都会收到您期望的消息。但是,当尝试使用 io.to(socket.id).emit() 向默认房间发送消息时,客户端收不到消息。
参考默认房间文档
http://socket.io/docs/rooms-and-namespaces/#default-room
使用 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);
});
这是正确的解决方案。发现服务器用来设置默认房间的默认房间socket.id与客户端socket.id不一样。请指教
在 客户端 如果你评估 socket.id
你会得到类似 v4eEdSX5RnDSXjzuAAAA
在 服务器 中,io.on('connection', function(socket){})
如果你评估 socket.id
你会得到类似 /#v4eEdSX5RnDSXjzuAAAA
的东西。
注意客户端 socket.id.
前面的 /#
所以你有两种方法可以解决这个问题
- 调用 emit 时将
/#
添加到套接字 ID
- 覆盖 io "connection" 侦听器以将房间设置为没有
/#
前缀的套接字 ID
选择的选项二如下:
io.on('connection', function(socket) {
socketID = socket.client.id;
socket.join(socketID);
console.log('a user connected ' + socketID);
});
当我在没有 io.emit() 的情况下调用 emit 时,所有连接的客户端都会收到您期望的消息。但是,当尝试使用 io.to(socket.id).emit() 向默认房间发送消息时,客户端收不到消息。
参考默认房间文档 http://socket.io/docs/rooms-and-namespaces/#default-room
使用 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);
});
这是正确的解决方案。发现服务器用来设置默认房间的默认房间socket.id与客户端socket.id不一样。请指教
在 客户端 如果你评估 socket.id
你会得到类似 v4eEdSX5RnDSXjzuAAAA
在 服务器 中,io.on('connection', function(socket){})
如果你评估 socket.id
你会得到类似 /#v4eEdSX5RnDSXjzuAAAA
的东西。
注意客户端 socket.id.
所以你有两种方法可以解决这个问题
- 调用 emit 时将
/#
添加到套接字 ID - 覆盖 io "connection" 侦听器以将房间设置为没有
/#
前缀的套接字 ID
选择的选项二如下:
io.on('connection', function(socket) {
socketID = socket.client.id;
socket.join(socketID);
console.log('a user connected ' + socketID);
});