2012-05-17 13 views

Respuesta

9

En resumen, si el uso de concentradores, será suficiente utilizar el cliente .Net.

En mi caso, tengo un concentrador de suministro de noticias que diseña datos específicos del cliente basados ​​en el ID del perfil del usuario. En mi caso de prueba, cargué un montón de identificaciones de perfil (6000 en este caso), invoco un método concentrador llamado JoinNewsfeed() junto con la ID de conexión y el ID de perfil específicos del cliente. Cada 100 ms 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); 
    } 

métricas de rendimiento que figuran here hacer el truco en el servidor. Para garantizar que un cliente se haya conectado y el proceso de rellenar el objeto cliente en el servidor se haya completado con éxito, 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 del cliente conectado colección.

1

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

El wiki del proyecto también tiene una cierta dirección en útiles performance counters and settings

+6

Según tengo entendido, Crank no es para usar con cubos. ¿Algo más? – ElHaix

+1

@Morgan: su enlace de Crank está roto ... – billy

8

@ElHaix Por lo que he visto en mis propias pruebas, su método no crea una nueva conexión, sino que reutiliza la conexión existente. A medida que recorre la colección de ID de perfil, debería ver que hubConnection.ConnectionID permanece igual. Para crear una nueva conexión, necesitaría 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); 
     } 
+0

¿Qué paquetes ha agregado? – RredCat

3

manivela puede sólo PersistenConnections de ensayo, pero ya que usted está buscando para probar el Hub SignalR sí, puede utilizar Tresi. Sin embargo, es una aplicación comercial. Estos son algunos enlaces sobre cómo la prueba de rendimiento se lleva a cabo para diferentes tipos de cargas

  1. Gradually Incrementing Load
  2. Burst Load

Configuración del contador de rendimiento para HTTPWebRequests como Creado/Sec, Abortado/seg., Vida útil media etc. se muestran durante la ejecución de la prueba de carga. También muestra otras métricas calculadas como Throughput/usuario A continuación se muestra captura de pantalla de la aplicación

enter image description here

0

Haga su propia escritura usando la herramienta para la creación de Gatling usuario virtual (multihilo) y el uso de Java cliente signalr. especifique en el comentario si desea saber cómo adjuntar su script personalizado escrito en java o scala a gatling usuarios virtuales. Dígame si desea un plan de prueba para las pruebas de rendimiento del señalizador, ya que es un punto clave en la realización de pruebas.

Cuestiones relacionadas