如何使用套接字io和节点快递发送个人消息

问题描述:

即时通讯实现一个聊天系统,您可以将个人消息发送给连接到便携式计算机的特定人员。 首先即时将用户名作为密钥与shocket.id一起放入名为“connectedUser”的jason中。如何使用套接字io和节点快递发送个人消息

socket.username=loggeduser; 
connectedUser[socket.username]=socket.id; 

然后即时通讯使用此代码发送个人信息

socket.broadcast.to(connectedUser[usersnametobesent]).emit('chat', { message:result}); 

这个完美的作品,但每当我用这个就只显示在接收机端的消息,但没有客户端。我需要将它显示在发送者和接收者的身边。

简单,

这是你所需要的:

io.to(socket.id).emit("event", data); 

每当用户连接到服务器时,会产生插座细节,包括ID.This是ID确实有助于将消息发送到特定的人。

首先我们需要所有的socket.ids存储阵列,

var people={}; 

people[name] = socket.id; 

这里的名字是reciever名。例如:

people["ccccc"]=2387423cjhgfwerwer23; 

所以,现在我们可以每当我们发送的消息获得与reciever名称socket.id:为此,我们需要知道recievername.You

需要发出reciever名到服务器。

最后一件事是:

socket.on('chat message', function(data){ 
io.to(people[data.reciever]).emit('chat message', data.msg); 
}); 

希望这很适合你!祝你好运

+0

真棒我做了一些类似的事情,它的工作得很好。无论如何都在等待更早的答案:D – TRomesh

您需要发送同样的东西给发件人。

socket.emit('chat', {}); 

该函数将只发送到这一点插座。

为什么不使用一些DOM操作将聊天消息添加到客户端。这也将增加更好的用户体验,因为无论出于何种原因,如果发生严重滞后,您的发件人会立即看到他发送的消息,而不是等待看到从套接字返回的消息。

这里是插座一个可爱的小小抄:

// sending to sender-client only 
socket.emit('message', "this is a test"); 

// sending to all clients, include sender 
io.emit('message', "this is a test"); 

// sending to all clients except sender 
socket.broadcast.emit('message', "this is a test"); 

// sending to all clients in 'game' room(channel) except sender 
socket.broadcast.to('game').emit('message', 'nice game'); 

// sending to all clients in 'game' room(channel), include sender 
io.in('game').emit('message', 'cool game'); 

// sending to sender client, only if they are in 'game' room(channel) 
socket.to('game').emit('message', 'enjoy the game'); 

// sending to all clients in namespace 'myNamespace', include sender 
io.of('myNamespace').emit('message', 'gg'); 

// sending to individual socketid 
socket.broadcast.to(socketid).emit('message', 'for your eyes only'); 

感谢https://stackoverflow.com/a/10099325


为了回答您的评论:

在插座的情况下,如果你是从客户端发送聊天消息,所以我们得到了client1和client2

假设你有一个聊天窗口,你可能有一些divs,也许一些像列出ul

客户端1发送到客户端2 --->“你好”

客户端1应该立即看到消息“你好”用简单的Dom比如创建一个新的div/li并将其附加到聊天窗口中,可能会使用某种ID来跟踪消息。

然后,如果邮件发送失败,您可以通过id找到失败的邮件,将其删除,也可以附加一条错误消息,说什么,邮件发送失败。

同时客户端2是没有任何的消息曾经被发送

如果您使用套接字来填充消息为用户,那么你可能会遇到在那里

客户端1发送到客户端2的情况下,明智的---- >“你好”

现在,也许您的服务器具有打嗝或客户端失去了第二个连接无论出于何种原因,他没有看到他的消息,但和去哦,也许它没有派让他去

Client1发送给Cli ENT2 ----> “你好”

客户端1发送到客户端2 ----> “你好”

客户端1发送到客户端2 ----> “你好”

还是什么都没有,他不它再多20次。

突然,服务器或任何解锁并发送300 hello消息这两个客户端都是垃圾邮件。

对不起格式我手机上。

+1

IM还挺新本shocketio东西你能解释一下多一点? 以及如何使用DOM操作将聊天消息添加到客户端? – TRomesh

+0

@tromesz看到我的编辑 – Datsik

+1

感谢得到它工作:)和备忘单是有用的 – TRomesh