socket.io私人消息

我一直在网上search,没有运气。 我想弄清楚如何发送一个用户的私人消息到另一个。 有很多片段,但我不确定客户端/服务器的交互。 如果我有要发送到的套接字的ID,如何将它发送到服务器,以及如何确保服务器只发送消息到该接收器套接字?

有没有人知道的教程或演练?

没有教程需要。 Socket.IO常见问题在这个问题上非常简单:

socket.emit('news', { hello: 'world' }); 

编辑:当询问如何获得该socket对象后,人们链接到这个问题。 没有必要。 当一个新的客户端连接时,保存对你的用户信息所在的任何对象的引用。 我的评论如下:

在脚本的顶部,设置一个对象来保存用户的信息。

var connectedUsers = {};

.on('connection')函数中,将该套接字添加到您的新对象中。 connectedUsers[USER_NAME_HERE] = socket; 然后你可以很容易地检索它。 connectedUsers[USER_NAME_HERE].emit('something', 'something');

这是一个应该帮助的代码片段

客户端(发送消息)

  socket.emit("private", { msg: chatMsg.val(), to: selected.text() }); 

其中'to'是指发送私人消息的id,'msg'是内容

客户端(接收消息)

  socket.on("private", function(data) { chatLog.append('<li class="private"><em><strong>'+ data.from +' -> '+ data.to +'</strong>: '+ data.msg +'</em></li>'); 

chatLog是一个显示聊天消息的div

服务器端

  client.on("private", function(data) { io.sockets.sockets[data.to].emit("private", { from: client.id, to: data.to, msg: data.msg }); client.emit("private", { from: client.id, to: data.to, msg: data.msg }); }); 

我能想到的最简单的方法就是让所有的用户使用他们的ID或名称作为密钥,并将他们的套接字作为值的一部分,然后当你想发送消息给他们,你拉那个套接字和发出它…这样的事情:

 users[toUser].emit('msg',"Hello, "+toUser+"!"); 

在socket.io 1.0中使用

 io.sockets.connected[<socketid>] 

你可以存储只是套接字ID。 像这样:

 var users = {}; users[USER_NAME] = socket.id; 

然后:

 io.sockets.connected[users[USER_NAME]] .emit('private', { msg:'private message for user with name '+ USER_NAME });