SignalR try to connect all current clients and CPU usage increase up to 100%

Viewed 184

We use SignalR library 2.4.2 version in our ASP.NET MVC web application. Usually it works fine but sometimes I don't know why all currents clients connected send /MyApp/signalr/connect request (some /aborts and /pings also) and server doesn't receive any more request, cpu usage increase and IIS get blocked.Then pool is recycled because of recycling rules

IIS log is like:

IIS log

Server side:

    public class SignalsDataHub : Microsoft.AspNet.SignalR.Hub
    {

        public readonly static ConnectionMapping<string> _connections =
           new ConnectionMapping<string>();

        public override Task OnConnected()
        {    
            var idMachine = Context.QueryString["idMachine"];
            var idconnection = Context.ConnectionId;

            //Ahora que tengo esta asociación puedo guardar en una tabla los clientes conectados
            _connections.Add(idMachine, Context.ConnectionId);     

            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled)
        {
                var idconnection = Context.ConnectionId;
                var idMachine = Context.QueryString["idMachine"];
                //Con esto solo ya podria borrar la asociación del cliente conectado
                _connections.Remove(idMachine, idconnection);

            return base.OnDisconnected(stopCalled);
        }
        public override Task OnReconnected()
        {
            return base.OnReconnected();
        }
        
    }
 public class BroadCastSignals
    {  
        private IHubConnectionContext<dynamic> Clients { set; get; }

        private readonly object _updateValueLock = new object();

        private BroadCastSignals(IHubConnectionContext<dynamic> clients)
        {
            Clients = clients;
        }

        private readonly static Lazy<BroadCastSignals> _instance = new Lazy<BroadCastSignals>(() => new BroadCastSignals(GlobalHost.ConnectionManager.GetHubContext<SignalsDataHub>().Clients));

        public static BroadCastSignals Instance
        {
            get
            {
                return _instance.Value;
            }
        }

        public void BroadCastCycleValue(string idMachine, string value)
        {
            var client = SignalsDataHub._connections.GetConnections(idMachine);

            foreach (var connectionId in client)
            {
                Clients.Client(connectionId).DisplayCycles(value);
            }          
        }

        public void BroadCastMarchaParoValue(string idMachine)
        {
            var client = SignalsDataHub._connections.GetConnections(idMachine);

            foreach (var connectionId in client)
            {
                Clients.Client(connectionId).DisplayMarchaParo();
            }       
        }
    }

Client side:

            let currentIdMachine= '@ViewBag.idMachine'

            let broadCaster=$.connection.signalsDataHub

            //Contadores ciclos
            broadCaster.client.DisplayCycles= function (hits){
                const golpes= document.querySelector('#hits');
                if(golpes!=null){
                    golpes.innerText=hits
                }
            }

            broadCaster.client.DisplayMarchaParo= function (){
                CurrentIncidence();
            }

            $.connection.hub.qs = { "idMachine" : currentIdMachine };

            $.connection.hub.start().done(function(){
            })

Any idea of why happen this?? Thank you!

1 Answers

we are getting the same behavior with 2.3.0 , CPU raises to 100%.

Related