swoole 即时通信困惑

1.假设用swoole做个网页版微信,客户端用websocket连接到服务器
2.怎么实现好友的私聊(1对1)聊天,在不写死服务器端口的情况下
3.不写端口意思是,服务器有多个端口提供服务;有可能甲想和乙 1对1聊天,那么甲可能连接到a端口,乙连到b端口;当甲发消息给乙,服务器怎么知道乙在哪个tcp连接下?

阅读 3.1k
5 个回答

写一个userID映射到port的函数
比如最简单的

func mapUserID2Port(userID int) int {
    return userID
}

然后客户端实现同一个逻辑,这样A连接到的端口和B从user A ID获取的端口就会一致

可以尝试将多个server放到全局字典中,在message方法中,找到对应用户所在的server,并调用push方法。

好友私聊是通过客户端的标记$fd在推送,和你服务器端口有啥关系?
甲给乙发消息也就是给后端发甲的$fd要给乙的$fd发消息

这个涉及线程通信的点,按设计模式来说的话,可以做event bus,事件通知/广播机制,或者加一个独立的消息服务也可

云端或内存做一个userid到client的映射,发送包携带要发送的userid,按照映射推送到响应的client

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题