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