asp.net-mvc - net - signalr tutorial
¿Cuál es la mejor manera de cargar una aplicación de concentradores SignalR? (5)
@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 ID de perfil, verá que hubConnection.ConnectionID permanece igual. Para crear una nueva conexión, debe 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);
}
Me gustaría conocer algunos de los diferentes métodos que se han utilizado para probar una aplicación basada en hubs de SignalR.
Crank solo puede probar PersistenConnections, pero como está buscando probar el SignalR Hub, 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
La configuración del contador de rendimiento para HTTPWebRequests, como Created / Sec , Aborted / Sec, Average Lifetime etc., se muestra durante la ejecución de la prueba de carga. También muestra otras métricas computadas, como el rendimiento / usuario que se muestra a continuación, es una captura de pantalla de la aplicación
Cree su propio script utilizando la herramienta Gatling para la creación de usuarios virtuales (subprocesos múltiples) y use el cliente Java Signalr. 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 la prueba de rendimiento de la señal, ya que es un punto clave en la realización de pruebas.
En resumen, si usa Hubs, será suficiente usar el cliente .Net.
En mi caso, tengo un centro de suministro de noticias que distribuye datos específicos del cliente en función de la ID de perfil del usuario. En mi caso de prueba, cargué un montón de ID de perfil (6000 en este caso), invoco un método central llamado JoinNewsfeed () junto con el ID de conexión específico del cliente y el ID de perfil. 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);
}
Las métricas de rendimiento enumeradas here hacen el truco en el servidor. Para garantizar que un cliente se haya conectado y que el proceso de llenado del 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.