集线器内的 SignalR 静态对象使背板重新连接失败
SignalR static objects inside hub makes reconnect fail with backplane
我们已经实现了一个带有背板的服务器,其中有超过 100 个客户端正在连接。但是,当我们对其进行测试时,我们发现只要客户端断开连接,none 客户端就能够重新连接。我们还注意到 w3wp.exe 使用了大量线程(超过 5000),然后 IIS 崩溃。
为了确定这是什么原因,我们清理了集线器,我们发现当记录器 class 被移除时,背板工作正常。我们使用了 NLog 记录器并将其启动为静态记录器。
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
为了确认 NLog 是否有问题,我们在集线器内创建了另一个静态对象 class,但它也显示了同样高的线程使用率。因此,似乎只要有静态对象,客户端就无法重新连接,并且 w3wp.exe 服务中的线程使用率很高。造成这种情况的原因是什么?
PS- 我们使用 SQL 和 redis 背板进行了测试,结果完全相同。
问题不是在集线器内使用静态对象,而是使用 NLogTraceListener 进行日志信号器跟踪。
我们已经实现了一个带有背板的服务器,其中有超过 100 个客户端正在连接。但是,当我们对其进行测试时,我们发现只要客户端断开连接,none 客户端就能够重新连接。我们还注意到 w3wp.exe 使用了大量线程(超过 5000),然后 IIS 崩溃。
为了确定这是什么原因,我们清理了集线器,我们发现当记录器 class 被移除时,背板工作正常。我们使用了 NLog 记录器并将其启动为静态记录器。
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
为了确认 NLog 是否有问题,我们在集线器内创建了另一个静态对象 class,但它也显示了同样高的线程使用率。因此,似乎只要有静态对象,客户端就无法重新连接,并且 w3wp.exe 服务中的线程使用率很高。造成这种情况的原因是什么?
PS- 我们使用 SQL 和 redis 背板进行了测试,结果完全相同。
问题不是在集线器内使用静态对象,而是使用 NLogTraceListener 进行日志信号器跟踪。