套接字IO发送到指定的用户ID

时间:2012-02-04 02:18:27

标签: javascript node.js socket.io send broadcast

我想将数据发送给指定的用户,而不是其他任何人。

目前向我所做的每个人广播:

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});
});

到(5)将是ID为5的用户。

2 个答案:

答案 0 :(得分:7)

我认为缺少的部分是在这个函数中:io.sockets.on('connection', function(socket) { ... }); - 每次有连接事件时都会执行该函数。每次该事件触发时,'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.sockets.sockets['1981672396123987'];获得一个具有特定id值的套接字(上面的语法使用socket.io v0.7.9测试

答案 1 :(得分:0)

如果没有看到完整的代码,很难确切地说明如何执行此操作,但听起来您想在您尝试发送的单个套接字上调用emit方法。如果这与进行连接的套接字(即私人聊天伙伴)不同,那么您将需要一些其他方式来存储和检索您尝试与之通信的正确套接字。

var sck = someFunctionToGetAppropriateSocketObject();
sck.emit('newChatMessage_response', { data: message});

请参阅http://socket.io/#how-to-usehttps://github.com/learnboost/socket.io