我正在制作一个简单的聊天应用程序,通过redis pub/sub通道发送消息。我没有使用任何登录选项,只是让用户选择一个用户名和聊天。我正在尝试实现私人聊天,其中一个客户端能够与另一个连接客户端进行通信。我是聊天客户端编程的新手,我正在尝试弄清楚如何只与一个客户端通信。我可以考虑哪些选项来获得一对一聊天的能力?我不介意改变我的架构来加入一个新的工具。如有任何建议,欢迎光临。
发布于 2015-07-24 08:51:29
我用原始套接字做了类似的事情。我保存了user对象,其中包含连接的套接字、名称以及它们是否正在聊天。如果用户不在聊天中,他可以输入命令/list users,该命令会给出当前连接的用户列表。当他找到可以聊天的人时,他输入命令/chat bob。如果用户bob已经在聊天,他将从服务器收到一条消息,告知bob is in a chat already。否则,将在两个用户之间建立聊天会话。他们现在将一直处于聊天状态,直到其中一人进入/endchat。然后,他们将能够找到新的聊天对象。
诀窍是实现服务器,这样它就可以跟踪用户列表和他们的聊天状态,以及他们正在聊天的人,这样当他们输入/endchat时,其他用户就可以得到通知。
发布于 2015-07-26 19:04:40
我想Nodejs + Socket.io的组合可以解决你的问题。具体地说,房间功能就是您在这里寻找的功能。
假设您有两个用户bob和gob。考虑到两者都是在线的(尽管您可以添加Redis作为会话存储,并在以后存储历史,我在本例中就是这样做的)。假设bob想和gob聊天,他选择了gob。现在让bob加入一个房间,使用
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);https://stackoverflow.com/questions/31600410
复制相似问题