定期使用SignalR(Core)会导致线程挂起

时间:2019-05-24 11:22:59

标签: c# websocket .net-core signalr asp.net-core-signalr

我们在生产中确实很难诊断出一个问题。症状是,使用SignalR时,服务器上的一个或多个线程会定期挂起。当发生这种情况时,除非其中一个线程也遇到此问题,否则其他线程似乎会继续快乐。

没有记录任何错误,但是创建转储会揭示线程在以下位置遇到ObjectDisposedException:

System.Net.Sockets.SafeCloseSocket.GetOrAllocateThreadPoolBoundHandle(Boolean) 
System.Net.Sockets.Socket.GetOrAllocateThreadPoolBoundHandleSlow() 
System.Net.Sockets.SocketAsyncEventArgs.DoOperationSendSingleBuffer(System.Net.Sockets.SafeCloseSocket) 
System.Net.Sockets.Socket.SendAsync(System.Net.Sockets.SocketAsyncEventArgs) 

如果我们在客户端禁用SignalR,就没有问题。

我们已经将websocket功能缩减到只创建一个空集线器的位置,问题仍然存在。

我们用以下方法初始化SignalR:

services.AddSignalR();

app.UseSignalR(routes =>
{
   routes.MapHub<LiveHub>("/live");
});

LiveHub.cs的内容是:

 public class LiveHub : Hub<ILiveHub>
    {
        public Task Ping()
        {
            return Clients.Caller.SendMessage("pong");
        }
    }

我们在Application Loadbalancer后面的AWS上运行,但目前仅在一台服务器上运行。

还有其他人有这个问题吗?

0 个答案:

没有答案