当用户通过websocket连接到服务器时。套接字连接是有状态的,它所连接的服务器是唯一能够通过该套接字进行通信的服务器。
我正在设计聊天。一共有n台服务器,每台服务器包含与其连接的n个用户/套接字。
聊天具有连接到随机的功能,可将您连接到从所有服务器中选择的随机用户。
当前通过Redis使用PUB / SUB在服务器之间进行通信。
用户x在服务器A中,用户y在服务器B中。所有N个服务器都订阅了“消息”通道。 x想要向y发送消息。服务器A在“消息”通道上发布。仅服务器B需要时,所有N台服务器均点亮。我可以使用Redis pub / sub跟踪x的伙伴y连接到哪台服务器,并且仅发送到该服务器。广播还是发射?
A->要求(用户x的需要伙伴)
B <-要求
C <-要求
B->提供(用户y可用于用户x)
C -X(无人可用,什么也不做)
A <-报价(处理报价)
C <-提供(没有用户x,不执行任何操作)
A->接受(将用户x的伙伴指定为用户y,并通知其他服务器)
B(服务器崩溃不再存在,出现问题)
服务器A如何知道带有y的服务器B崩溃了,或者y已经离开了。并且它应该继续搜索在线用户。现在,它只是坐着,以为它已将其用户x与另一个实时用户配对。