我想将数据发送给指定的用户,而不是其他人。
目前要向我做的每个人广播:
socket.on('newChatMessage', function (message) {
socket.broadcast.emit('newChatMessage_response', { data: message});
});
现在我想做的就是:
socket.on('newChatMessage', function (message) {
socket.to(5).send('newChatMessage_response', { data: message});
});
to(5) 将是 ID 为 5 的用户。
最佳答案
我认为您缺少的部分在这个函数中:io.sockets.on('connection', function(socket) { ... });
- 那个函数每次都执行是一个连接事件。每次触发该事件时,“套接字”参数都会引用一个全新的套接字对象,代表新连接的用户。然后,您需要将该套接字对象存储在某个地方,以便您稍后可以查找它,如果您需要发送只能由该套接字看到的消息,则可以调用它的 send 或 emit 方法。
这是一个可以帮助您入门的简单示例。 (注意:我没有测试过这个,我也不建议这是做你想做的事情的最好方法。我只是把它写在答案编辑器中给你一个想法你如何可以做你想做的事)
var allSockets = [];
io.sockets.on('connection', function(socket) {
var userId = allSockets.push(socket);
socket.on('newChatMessage', function(message) {
socket.broadcast.emit('newChatMessage_response', {data: message});
});
socket.on('privateChatMessage', function(message, toId) {
allSockets[toId-1].emit('newPrivateMessage_response', {data: message});
});
socket.broadcast.emit('newUserArrival', 'New user arrived with id of: ' + userId);
});
编辑:如果您通过 id 指的是 socket.io 分配的 id 值,而不是您分配的值,您可以使用 var socket = io 获取具有特定 id 值的套接字。 sockets.sockets['1981672396123987'];
(以上语法使用 socket.io v0.7.9 测试)
关于javascript - Socket IO发送到指定的用户ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137877/