¿Cuál es la mejor manera de probar la carga de una aplicación SignalR hubs?


Me gustaría conocer algunos de los diferentes métodos que se han utilizado para probar una aplicación basada en SignalR hubs.

Author: ElHaix, 2012-05-17

5 answers

En resumen, si se utilizan Hubs, el uso del cliente.Net será suficiente.

En mi caso, tengo un centro de noticias que distribuye datos específicos del cliente basados en el ID del perfil del usuario. En mi caso de prueba, cargo un montón de ID de perfil (6000 en este caso), invoco un método hub llamado JoinNewsfeed () junto con el ID de conexión específico del cliente y el ID de perfil. Cada 100ms se establece una nueva conexión.

    [TestMethod]
    public void TestJoinNewsfeedHub()
    {
        int successfulConnections = 0;

        // get profile ID's
        memberService = new MemberServiceClient();
        List<int> profileIDs = memberService.GetProfileIDs(6000).ToList<int>();

        HubConnection hubConnection = new HubConnection(HUB_URL);
        IHubProxy newsfeedHub = hubConnection.CreateProxy("NewsfeedHub");


        foreach (int profileID in profileIDs)
        {
            hubConnection.Start().Wait();
            //hubConnection = EstablishHubConnection();
            newsfeedHub.Invoke<string>("JoinNewsfeed", hubConnection.ConnectionId, profileID).ContinueWith(task2 =>
            {
                if (task2.IsFaulted)
                {
                    System.Diagnostics.Debug.Write(String.Format("An error occurred during the method call {0}", task2.Exception.GetBaseException()));
                }
                else
                {
                    successfulConnections++;
                    System.Diagnostics.Debug.Write(String.Format("Successfully called MethodOnServer: {0}", successfulConnections));

                }
            });

            Thread.Sleep(100);

        }

        Assert.IsNotNull(newsfeedHub);
    }

Las métricas de rendimiento enumeradas aquí hacen el truco en el servidor. A asegúrese de que un cliente se haya conectado de hecho y que el proceso de rellenar el objeto cliente en el servidor se haya completado correctamente, tengo un método del lado del servidor que invoca una función del lado del cliente con el número y la lista de clientes conectados derivados de la colección de clientes conectados.

 10
Author: ElHaix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 14:29:58

@ElHaix Por lo que he visto en mis propias pruebas, su método no es crear una nueva conexión, sino reutilizar la conexión existente. A medida que recorre la colección de profileIDs, debería ver esa conexión.connectionId permanece igual. Con el fin de crear una nueva conexión que tendría que crear una instancia de HubConnection dentro del bucle foreach.

        int successfulConnections = 0;
        const int loopId = 10;

        Console.WriteLine("Starting...");
        for (int i = 1; i <= loopId; i++)
        {
            Console.WriteLine("loop " + i);

            var hubConnection = new HubConnection(HUB_URL);
            IHubProxy chatHub = hubConnection.CreateProxy(HUB_NAME);

            Console.WriteLine("Starting connection");
            hubConnection.Start().Wait();
            Console.WriteLine("Connection started: " + hubConnection.ConnectionId);

            chatHub.Invoke("Register", "testroom").ContinueWith(task2 =>
            {
                if (task2.IsFaulted)
                {
                    Console.WriteLine(String.Format("An error occurred during the method call {0}", task2.Exception.GetBaseException()));
                }
                else
                {
                    Console.WriteLine("Connected: " + hubConnection.ConnectionId);
                    successfulConnections++;
                }
            });

            Thread.Sleep(1000);
        }
 8
Author: codingintherain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-17 22:15:34

Crank solo puede probar PersistenConnections, pero ya que está buscando probar el Hub SignalR en sí, puede usar Tresi. Aunque es una aplicación comercial. Aquí hay algunos enlaces sobre cómo se realiza la prueba de rendimiento para diferentes tipos de cargas

  1. Carga Constante
  2. Aumento gradual de la carga
  3. Carga de ráfaga

Configuración del contador de rendimiento para HttpWebRequests como Creado / Sec, Abortado/Seg, Vida media etc. se muestran durante la ejecución de la prueba de carga. También muestra otras métricas calculadas como Rendimiento / usuario Que se muestra a continuación es la captura de pantalla de la aplicación

introduzca la descripción de la imagen aquí

 3
Author: Erik Araojo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-05 03:48:06

No he hecho muchas pruebas de rendimiento en SignalR, pero el proyecto proporciona una herramienta útil - Crank - para generar carga de cliente.

El wiki del proyecto también tiene alguna guía sobre útiles contadores de rendimiento y configuraciones

 1
Author: Morgan Bruce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-04 12:45:52

Haga su propio script utilizando la herramienta Gatling para la creación de usuarios virtuales(multithreading) y utilice el cliente java signalr. por favor, especifique en el comentario si desea saber cómo adjuntar su script personalizado escrito en java o scala a los usuarios virtuales de gatling. Dígame si desea un plan de prueba para las pruebas de rendimiento de signalr, ya que es un punto clave en la realización de pruebas.

 0
Author: positivecrux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-17 06:46:32