using Microsoft.AspNetCore.SignalR.Client;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace SignalRStressTest
private static string hubUrl = "https://your-signalr-server.com/hub";
private static int userCount = 100;
private static int messageDelay = 1000;
static async Task Main(string[] args)
Console.WriteLine("Starting SignalR stress test...");
var tasks = new List<Task>();
for (int i = 0; i < userCount; i++)
var userToken = Guid.NewGuid().ToString();
tasks.Add(SimulateUser(userToken, i + 1));
await Task.WhenAll(tasks);
Console.WriteLine("Stress test completed.");
private static async Task SimulateUser(string token, int userId)
var connection = new HubConnectionBuilder()
.WithAutomaticReconnect()
connection.On<string>("BroadcastMessage", (message) =>
Console.WriteLine($"User {userId} received broadcast: {message}");
await connection.StartAsync();
Console.WriteLine($"User {userId} connected.");
await SendConnectUserMessage(connection, userId, token);
await Task.Delay(messageDelay);
for (int i = 0; i < 5; i++)
await SendPlaceBetsMessage(connection, userId, token);
await Task.Delay(messageDelay);
await SendCashOutMessage(connection, userId, token);
await Task.Delay(messageDelay);
await connection.StopAsync();
Console.WriteLine($"User {userId} disconnected.");
Console.WriteLine($"Error with user {userId}: {ex.Message}");
private static async Task SendConnectUserMessage(HubConnection connection, int userId, string token)
var connectUserParams = new
OperatorId = Guid.NewGuid(),
Console.WriteLine($"User {userId} connecting...");
await connection.InvokeAsync("ConnectUser", connectUserParams);
private static async Task SendPlaceBetsMessage(HubConnection connection, int userId, string token)
var placeBetsParams = new
OperatorId = Guid.NewGuid(),
AutoCashoutMultiplier = 2.5m,
Console.WriteLine($"User {userId} placing bet...");
await connection.InvokeAsync("PlaceBets", placeBetsParams);
private static async Task SendCashOutMessage(HubConnection connection, int userId, string token)
OperatorId = Guid.NewGuid(),
Console.WriteLine($"User {userId} cashing out...");
await connection.InvokeAsync("CastOut", castOutParams);