1

使用 SignalR 2.2.0,我想验证有关在多服务器横向扩展设置中执行集线器方法的客户端的观察结果。

我使用 SQL Server 横向扩展消息总线在多服务器模型中运行 SignalR。

当客户端连接时,OnConnected会按预期调用 Hub 的方法。我保存Context.ConnectionId在静态字典中。

当客户端稍后调用集线器的方法时,似乎场中的另一台服务器正在执行集线器方法,而不是最初运行 OnConnected 方法的服务器。hub 方法中的Context.ConnectionId值是正确的,但它在字典中不存在。

这是扩展模型中的预期行为吗?如果是这样,那么我假设我应该将连接状态数据保存在数据库中,以便所有服务器上的所有 Hub 都能够根据 ConnectionId 查找连接状态。

4

1 回答 1

1

这是扩展模型中的预期行为吗?如果是这样,那么我假设我应该将连接状态数据保存在数据库中,以便所有服务器上的所有 Hub 都能够根据 ConnectionId 查找连接状态。

是的,这是预期的行为,您应该使用共享资源,如数据库或缓存。但是 connectionIds 本身是不够的。因为客户端会在不同的服务器上或刷新时获得不同的 connectionId。所以你应该映射connectionId和client。当发生断开连接时,找到具有 connectionId 的客户端并检查该客户端是否有另一个 connectionId。

这里,我根据问题回答了更多细节。

于 2016-06-04T16:28:35.377 回答