我正在尝试更改signalR中的集线器连接url,以便所有请求都通过我的自定义负载均衡器。
负载均衡器然后重定向到原始的signalR web应用程序并给出响应。
为此,我试图通过这样更改url来创建一个新的集线器连接。
var signalR = $.signalR;
signalR.hub = $.hubConnection("http://localhost:64071/LoadBalancer.Web/NotificationWeb/signalr", { useDefaultPath: false });signalR尝试连接到该URL,并在协商请求中返回此响应
{ "Url":"/WE.abcd.Web/signalr", "ConnectionToken":"raYdZtwHWMP50fYIxa4MxRtR8xZAmUhhdlXreYVlB3Meo+2VeZSk4wMEdbkCbVEAzo/+gFyNofqV ......然后,您可以在响应中看到,URL包含原始URL (即WE.abc.web),因此通信直接发生在WE.abcd.Web上,而不是通过负载均衡器。Web,即使在重写URL之后也是如此。
如何强制协商请求返回我的LoadBalancer.Web网址而不是原来的网址?
发布于 2015-06-02 10:57:19
我认为,只要SignalR使用Request.LocalPath生成协商响应URL,唯一的解决方案就是加载平衡器、修改协商响应(重写URL),然后再将其返回客户端。这就是反向代理的工作原理。
只使用IIS重写功能就可以做到这一点,而不必更改负载均衡器代码。
Sidenote:我对您的需求\生产环境一无所知,但是如果负载平衡站点(承载SignalR)可以从客户端访问(而不是隐藏在防火墙\代理后面),那么描述的行为是完全正确的。只要负载均衡器是在所有服务器之间协商请求的平衡器,那么接下来的连接请求绕过负载均衡器-客户机仍然是平衡的并不重要。+减少麻烦,因为你不需要balance Web sockets连接.
https://stackoverflow.com/questions/30569280
复制相似问题