Websocket 确定是否需要信号机背板

Websocket 确定是否需要信号机背板,websocket,signalr,Websocket,Signalr,我很难确定我的场景是否需要使用信号器背板。不幸的是,我无法获得我需要自己测试的测试环境,所以我来这里;) 在我的场景中,我们使用signar从服务器应用程序(一种windows服务)与特定的客户端通信(使用连接id)。当客户端访问某个页面时,我们将连接到signalr OnConnected事件,并注册用户以在数据存储中接收通知。现在,我们存储连接id、它们来自的服务器的IP以及一些其他特定于应用程序的信息 当服务器进程运行并确定需要向客户端发送消息时,它将使用客户端连接/订阅时捕获的IP构造一

我很难确定我的场景是否需要使用信号器背板。不幸的是,我无法获得我需要自己测试的测试环境,所以我来这里;)

在我的场景中,我们使用signar从服务器应用程序(一种windows服务)与特定的客户端通信(使用连接id)。当客户端访问某个页面时,我们将连接到signalr OnConnected事件,并注册用户以在数据存储中接收通知。现在,我们存储连接id、它们来自的服务器的IP以及一些其他特定于应用程序的信息

当服务器进程运行并确定需要向客户端发送消息时,它将使用客户端连接/订阅时捕获的IP构造一个代理(顺便说一句,代理已缓存)并发送消息

这个现在很好用。但是,我担心这在负载平衡的场景中不起作用。我认为,如果使用web套接字,没有问题,但可以说,这要追溯到长轮询。难道这不会发生吗:

  • 用户A访问该页面,并通过信令器从IP为1.1.1.1的web服务器X注册
  • 另一个长轮询请求来自用户A,但它通过IP为2.2.2.2的web服务器Y
  • 服务器进程运行并确定需要发送消息,但它使用与用户连接的服务器的IP-1.1.1.1
  • 无法将消息发送到客户端

我是否偏离了这一思路?我试图避免使用背板,因为每个扩展选项都会给我们带来问题。

简单的回答是肯定的,在负载平衡的环境中,您将始终需要背板


对于较长的版本,您有两台服务器服务器A和B负载平衡。用户连接到,用户可以自愿断开连接,或通过网络超时,或通过信号器刷新(关于这一点,存在几个漏洞,这是某种回归,但在未来版本中仍然可以重新合并,与使用的通信无关),但基本上用户有时可以“突然”发现自己已连接到服务器B。现在服务器A将无法向用户发送数据。

有人在那里吗?如果您的集线器采用负载平衡设置,那么您将需要一个背板。谢谢你的确认!但是,我正在存储用户“注册”的服务器地址。因此,如果用户重新连接到服务器B,我将保存该服务器地址,并使用该地址从.net客户端与集线器通信。这难道不能解决问题吗?对我来说,一个不太好的临时解决方案可能是在我们的应用服务器上托管集线器(只有一个实例)。是的,这会起作用,但是您必须让集线器彼此通信,当原始集线器在负载平衡器下回收时会发生什么?但无论如何,您都在尝试实现SignalR已经实现的功能。你为什么不想使用背板呢?不是我不想,而是提供的选项都不适用于我们的场景。直接从web群集访问数据库是不可能的,Redis是不可能的(太糟糕了),Azure也是如此。你想过为此使用专用SQL server吗,取决于您的预期负载。SQL server express edition可能比我的好,而且可能会尝试推出此选项。或者只使用Redis,不告诉任何人;)谢谢