2

我连接到我的服务器,该服务器为别名进行负载平衡以指向 2 个服务器 01 和 02,并且它为了参数而循环连接。我可以毫无问题地连接到集线器,我什至可以将内容发送到服务器,但是当它返回给客户端时,我从未调用过我的方法。如果我绕过负载平衡器并明确使用服务器名称,它总是可以正常工作。

我什至在跟踪它,并使用 Clients.Client(clientId).completeJob(stuff) 从确切的原始服务器发回消息,并且在服务器上执行得很好,但如果我继续使用,它永远不会完成。

哦,它与服务器发送的事件有关。我错过了什么还是不支持?

4

1 回答 1

0

服务器发送的事件建立一个长时间运行的连接,但与 WebSockets 不同,它不是双向的。该连接只能用于向客户端推送数据。

当 WebSocket 传输不可用时,SignalR 使用常规 XHR 从客户端发送数据。这意味着负载平衡器可能会将客户端到服务器集线器方法调用路由到与客户端最初建立服务器发送事件连接的服务器不同的服务器。

执行的服务器Clients.Client(clientId).completeJob(stuff)可能不拥有可以将消息推送到指定客户端的连接。(尽管从服务器上的集线器方法返回值将通过调用该方法的同一连接将数据发送回客户端。)

SignalR 可以在负载均衡器后面工作。它只需要更多的设置,因此所有 SignalR 服务器都可以通过诸如服务总线或 Redis 之类的背板相互通信。这允许将消息分派到拥有服务器到客户端连接的服务器。

https://github.com/SignalR/SignalR/wiki/Azure-service-bus详细介绍了如何在 Azure 上设置服务总线背板。

于 2013-02-14T09:14:04.590 回答