前文[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消息,如果超时为收到消息,则认为断线了。