前文[https://www.cnblogs.com/catzhou/p/14048348.html](6.SignalR 連接數量的限制),抱怨了只能連接5000個客戶端,期間還找了很多辦法,試圖突破五千的限制。
其實是忘了實時連接是一個奢侈的東西,應該是在需要的時候連接上,在不需要的時候盡快短線離開。
https://docs.microsoft.com/zh-cn/aspnet/core/signalr/configuration?view=aspnetcore-5.0有:
配置服務器選項:
ClientTimeoutInterval 30 秒 如果客戶端未收到消息 (在此時間間隔內包含 keep-alive) ,服務器將認為客戶端已斷開連接。 由於實現方式的原因,客戶端實際標記為斷開連接可能需要更長的時間。 建議值為值的兩倍 KeepAliveInterval 。
KeepAliveInterval 15 秒 如果服務器未在此時間間隔內發送消息,則會自動發送 ping 消息,使連接保持打開狀態。 更改時 KeepAliveInterval ,請更改 ServerTimeout / serverTimeoutInMilliseconds 客戶端上的設置。 建議 ServerTimeout / serverTimeoutInMilliseconds 值為值的兩倍 KeepAliveInterval 。
配置客戶端選項:
ServerTimeout 30秒 (30000 毫秒) 服務器活動超時。 如果服務器未在此時間間隔內發送消息,則客戶端會將服務器視為斷開連接,並 Closed onclose 在 JavaScript) 中觸發事件 (。 此值必須足夠大,以便從服務器發送 ping 消息 ,並 在超時間隔內由客戶端接收該消息。 建議值至少為服務器值的兩倍 KeepAliveInterval ,以允許 ping 到達的時間。
KeepAliveInterval 15 秒 確定客戶端發送 ping 消息的間隔。 如果從客戶端發送任何消息,則會將計時器重置為間隔的開始時間。 如果客戶端沒有在服務器上的設置中發送消息 ClientTimeoutInterval ,則服務器會將客戶端視為已斷開連接。
意思就是空閑的時候,服務器每隔15秒向客戶端發送ping消息,客戶端每隔15秒向服務端發送ping消息,如果超時為收到消息,則認為斷線了。