Azure网站可以根据负载设置为自动缩放。请考虑以下情形:
通常我只运行2个实例,但如果需要可以扩展到10个实例。流量很高所以我有10个实例,多个客户端使用实例3-8进行websocket连接。流量消失,实例回落到2。
连接到实例3-8的客户端会发生什么?
答案 0 :(得分:0)
SignalR尝试打开与特定服务器的套接字连接。因此,如果该特定服务器被拆除(如Azure App Service缩小的情况),那么该客户端连接将被关闭。
您可以在JavaScript中处理SignalR生命周期事件,以便在发生这种情况时重新建立连接,以最大限度地减少对用户的影响。
http://www.asp.net/signalr/overview/guide-to-the-api/handling-connection-lifetime-events
例如,如果您通常运行两个实例并且连接了10个用户。这10个用户在实例#1和2上具有SignalR连接。然后自动缩放触发器,现在突然设置了第三个实例。另外十个用户来到他们的实例#1,2和3上获得SignalR连接。五个用户离开并自动缩放,缩小到两个实例。其余5个与第三个实例建立SignalR连接的用户将具有已关闭的连接。您需要在客户端上处理close生命周期事件,以尝试在实例#1或2上重新启动SignalR连接。
我假设您已配置了背板,否则您可能会问,"为什么我的用户偶尔会收到消息?!"。 :)
这是nice article,我发现它对理解SignalR非常有用。