关于 SignalR 连接的问题

Questions about SignalR Connection

全部,

我正在使用 SignalR (.net 6) 并且有几个关于 SignalR 连接的问题(特别是使用网络套接字的 SignalR 连接):

问 #1) 如果 SignalR 客户端崩溃,SignalR 服务器是否会自动为我处理底层连接(并触发 OnDisconnectedAsync() 事件)? 这个想法是处理与每个连接相关的客户端资源(在服务器上,资源例如:NHibernate 会话)。

我的测试表明(在本地机器上,服务器和客户端):

我尝试模拟这种情况,其中我有一个 运行 客户端,然后我使用任务管理器关闭该客户端,并且 Windows 分钟释放进程资源,SignalR 服务器以某种方式检测到该连接丢失并释放了连接,并调用了 OnDisconnectedAsync()。我不确定我的测试是否足以满足这个用例(客户端崩溃)。我很好奇服务器是怎么知道的,这是客户端连接的终结器吗运行?

Q #2) 如果客户端和服务器之间的当前连接断开或中断,SignalR 需要重新连接,并且成功重新连接,它是否使用相同的连接(与相同的连接 ID/same 网络套接字)还是尝试创建新连接(绑定到新的网络套接字)?

  1. https://docs.microsoft.com/en-us/aspnet/core/signalr/configuration?view=aspnetcore-6.0&tabs=dotnet

如果服务器在此时间间隔内没有收到消息(包括keep-alive),则认为客户端已断开连接。由于实现方式的不同,客户端被标记为断开连接所需的时间可能比此超时间隔更长。推荐值是 KeepAliveInterval 值的两倍。

  1. 它分配了一个新的连接ID。考虑使用其他数据来跟踪它是哪个用户,例如。检查 on connect 和 on disconnect 方法。 https://docs.microsoft.com/en-us/aspnet/core/signalr/groups?view=aspnetcore-6.0