使用网络套接字时在多个应用程序实例之间进行通信?

时间:2018-10-21 16:03:06

标签: node.js websocket redis system-design

当用户通过websocket连接到服务器时。套接字连接是有状态的,它所连接的服务器是唯一能够通过该套接字进行通信的服务器。

我正在设计聊天。一共有n台服务器,每台服务器包含与其连接的n个用户/套接字。

聊天具有连接到随机的功能,可将您连接到从所有服务器中选择的随机用户。

当前通过Redis使用PUB / SUB在服务器之间进行通信。

  • Redis PUB / SUB是处理服务器之间通信的最佳方法,因为大多数通信可以在两个服务器之间进行,而不是1到N。

用户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与另一个实时用户配对。

0 个答案:

没有答案