async Task StartReceiveMessages(WebSocket socket) { while (socket.State == WebSocketState.Open) { var(response, message) = await ReadFullMessage(socket, CancellationToken.None); if (response.MessageType == WebSocketMessageType.Close) { break; } else { var msg = MsgConverter.FromJsonByteArray <WebSocketRequest>(message); await Task.Delay(TimeSpan.FromSeconds(0.1)); var msgResponse = new WebSocketResponse { CorrelationId = msg.CorrelationId, ResponseType = ResponseType.Pong }; var bytes = MsgConverter.ToJsonByteArray(msgResponse); await socket.SendAsync(bytes, WebSocketMessageType.Text, true, CancellationToken.None); } } }
public static void Run() { var url = "ws://localhost:5000"; var concurrentCopies = 50; var webSocketsPool = ConnectionPool.Create( name: "webSocketsPool", connectionsCount: concurrentCopies, openConnection: (number) => { var ws = new ClientWebSocket(); ws.ConnectAsync(new Uri(url), CancellationToken.None).Wait(); return(ws); }, closeConnection: (connection) => { connection.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None) .Wait(); } ); var pingStep = Step.Create("ping", webSocketsPool, async context => { var msg = new WebSocketRequest { CorrelationId = context.CorrelationId.Id, RequestType = RequestType.Ping }; var bytes = MsgConverter.ToJsonByteArray(msg); await context.Connection.SendAsync(bytes, WebSocketMessageType.Text, true, context.CancellationToken); return(Response.Ok()); }); var pongStep = Step.Create("pong", webSocketsPool, async context => { while (true) { var(response, message) = await WebSocketsMiddleware.ReadFullMessage(context.Connection, context.CancellationToken); var msg = MsgConverter.FromJsonByteArray <WebSocketResponse>(message); if (msg.CorrelationId == context.CorrelationId.Id) { return(Response.Ok(msg)); } } }); var scenario = ScenarioBuilder .CreateScenario("web_socket test", new[] { pingStep, pongStep }) .WithOutWarmUp() .WithLoadSimulations(new[] { Simulation.KeepConcurrentScenarios(concurrentCopies, during: TimeSpan.FromSeconds(10)) }); NBomberRunner.RegisterScenarios(scenario) .RunInConsole(); }
public static void Run() { var url = "ws://localhost:53231"; var webSocketsPool = ConnectionPool.Create("webSocketsPool", openConnection: () => { var ws = new ClientWebSocket(); ws.ConnectAsync(new Uri(url), CancellationToken.None).Wait(); return(ws); }, closeConnection: (connection) => { connection.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None) .Wait(); }); //connectionsCount: 50); var pingStep = Step.Create("ping", async context => { var msg = new WebSocketRequest { CorrelationId = context.CorrelationId, RequestType = RequestType.Ping }; var bytes = MsgConverter.ToJsonByteArray(msg); await context.Connection.SendAsync(bytes, WebSocketMessageType.Text, true, context.CancellationToken); return(Response.Ok()); }, pool: webSocketsPool); var pongStep = Step.Create("pong", async context => { while (true) { var(response, message) = await WebSocketsMiddleware.ReadFullMessage(context.Connection, context.CancellationToken); var msg = MsgConverter.FromJsonByteArray <WebSocketResponse>(message); if (msg.CorrelationId == context.CorrelationId) { return(Response.Ok(msg)); } } }, pool: webSocketsPool); var scenario = ScenarioBuilder.CreateScenario("web_socket test", pingStep, pongStep); NBomberRunner.RegisterScenarios(scenario) .RunInConsole(); }
public static Scenario BuildScenario() { var url = "ws://localhost:53231"; var webSocketsPool = ConnectionPool.Create("webSocketsPool", openConnection: () => { var ws = new ClientWebSocket(); ws.ConnectAsync(new Uri(url), CancellationToken.None).Wait(); return(ws); }, closeConnection: (connection) => { connection.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None) .Wait(); }); //connectionsCount: 50); var pingStep = Step.CreatePull("ping", webSocketsPool, async context => { var msg = new WebSocketRequest { CorrelationId = context.CorrelationId, RequestType = RequestType.Ping }; var bytes = MsgConverter.ToJsonByteArray(msg); await context.Connection.SendAsync(bytes, WebSocketMessageType.Text, true, CancellationToken.None); return(Response.Ok()); }); var pongStep = Step.CreatePush("pong", webSocketsPool, async context => { var(response, message) = await WebSocketsMiddleware.ReadFullMessage(context.Connection); var msg = MsgConverter.FromJsonByteArray <WebSocketResponse>(message); if (msg.CorrelationId == context.CorrelationId) { context.UpdatesChannel.ReceivedUpdate(Response.Ok(msg)); } }); return(ScenarioBuilder.CreateScenario("web_socket test", pingStep, pongStep)); }