SignalR没有在客户端上使用DNS别名调用结果

时间:2013-02-13 19:00:26

标签: signalr

我连接到我的服务器,该服务器负载均衡,别名指向2台服务器,01& 02和它为了争论而进行循环连接。我可以毫无问题地连接到集线器,我甚至可以将内容发送到服务器,但是当它返回到客户端时,我永远不会调用我的方法。如果我绕过负载均衡器并明确使用服务器名称,它总能正常工作。

我甚至在追踪它,并且我使用Clients.Client(clientId).completeJob(stuff)从确切的原始服务器发回消息,并且在服务器上执行正常,但是如果我继续,它永远不会完了。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

https://github.com/SignalR/SignalR/wiki/Azure-service-bus详细说明了如何在Azure上设置Service Bus背板。