我可以强制SignalR在握手时使用相同的5元组连接吗?

时间:2016-08-28 15:44:15

标签: azure websocket signalr owin

情景:

我在Azure Load Balancer(LB)前面有一个云服务(超过1个实例)。我是OWIN自托管SignalR端点。据我所知,SignalR握手包含3个HTTP Get-Reponses(连接,协商,启动)。

我遇到的问题是LB将它们路由到不同的机器,因此握手失败。

我猜我不是第一个遇到这个问题的人,所以有一个简单的解决方案吗? (最好不引入第三方)。

我正在考虑强制HTTP客户端使用相同的元组(客户端IP,客户端端口)并祈祷LB正在做同样的事情(将5元组映射到单个机器直到会话结束)

1 个答案:

答案 0 :(得分:0)

我对SignalR非常不熟悉,但是如果将Load Balancer哈希模式更改为3元组(源IP,目标IP,协议)或2元组(源IP,目标IP),那么,好吧,你可以做到这一点。

https://azure.microsoft.com/en-us/blog/azure-load-balancer-new-distribution-mode/

服务定义(.csdef):

<WorkerRole name="worker-role-name" vmsize="worker-role-size">
  <Endpoints>
    <InputEndpoint name="input-endpoint-name" ... loadBalancerDistribution="sourceIP" />
  </Endpoints>
</WorkerRole>
  

对于 2元组亲和关系,loadBalancerDistribution的值可以是 sourceIP ,对于 3元组< sourceIPProtocol / strong>亲和力或(没有亲和力。即 5元组