连接到聊天应用中的特定客户端

时间:2015-07-24 00:44:38

标签: javascript redis chat

我正在制作一个简单的聊天应用,通过redis发布/订阅频道发送消息。我不使用任何登录选项只是让用户选择用户名和聊天。我正在尝试实现私人聊天,其中一个客户端能够与另一个连接客户端进行通信。我是新手聊天客户端编程,我试图弄清楚如何只与一个客户端进行通信。我可以考虑哪些选项来获得1对1聊天的能力?我不介意改变我的架构以采用新工具。任何建议表示赞赏

2 个答案:

答案 0 :(得分:0)

我使用原始套接字做了类似的事情。我持有包含连接套接字的用户对象,名称以及是否正在聊天。如果用户未在聊天中,则可以键入命令/list users,该命令提供当前连接的用户列表。当他找到某人聊天时,他输入命令/chat bob。如果用户bob已在聊天,他将收到来自服务器的消息,说明bob is in a chat already。否则,将在两个用户之间建立聊天会话。他们现在将进行聊天,直到其中一人进入/endchat。然后他们就能找到新人聊天。

技巧是实现服务器,以便它可以跟踪用户列表及其聊天状态以及他们与谁聊天,因此当他们键入/endchat时,可以通知其他用户。

答案 1 :(得分:0)

我想,Nodejs + Socket.io的组合可以解决你的问题。具体的房间功能是你在这里寻找的。

假设你有两个用户bob和gob。考虑两者都在线(虽然您可以将Redis添加为会话存储并稍后存储历史记录,这是我在我的情况下所做的)。说鲍勃想与他选择gob的gob聊天。现在让鲍勃加入一个房间

 var roomname = 'bob'>'gob'?'bob'+'gob':'gob'+'bob' ;
 //this type of naming ensures roomname is same for both users
 socket.join(roomname);

这只有在两者互相选择的情况下才有效。所以现在当gob选择bob时,两者都加入了同一个房间。每当有人发送消息时,都会使用

将其发送到该房间
 socket.broadcast.to(roomname).emit('message_event',msgObj);

确保您已添加了侦听器

 socket.on('message_event',messageHandler);

聊天完成后,让他们使用

离开房间
socket.leave(roomname);