当我在没有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);
});
答案 0 :(得分:2)
这是正确的解决方案。发现服务器用来设置默认房间的默认房间socket.id与客户端socket.id不同。请指教。
在客户端上,如果您评估$(".openButton").click(function() {
$("#div1, #div2, #div3").css("width", "500px");
});
,可以获得类似的内容,socket.id
在服务器上,v4eEdSX5RnDSXjzuAAAA
如果您评估io.on('connection', function(socket){})
,您会得到socket.id
。
请注意 /#前置于客户端socket.id。
所以你有两种解决这个问题的方法
/#v4eEdSX5RnDSXjzuAAAA
到套接字ID /#
选择的选项二如下:
/#