繁体   English   中英

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

[英]Socket IO send to specified user ID

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

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

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) { ... }); - 每次有连接事件时都会执行该功能。 每次该事件触发时,'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值的var socket = io.sockets.sockets['1981672396123987']; (上面的语法使用socket.io v0.7.9测试)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM