Как провести стресс-тестирование моего сервера udp с определенным размером пакета и скоростью - PullRequest
0 голосов
/ 17 января 2020

У меня есть сервер udp в другой сети, который прослушивает входящие пакеты.

У меня есть клиент (записанный в c#), который пытается отправлять 10 пакетов по 4000 байт каждую секунду.

Я тестирую множество клиентов с одного компьютера / сети.

В данный момент я тестирую 10 клиентов.

Это мой c# клиент:

class Program
{
    static void Main(string[] args)
    {
        for (var index = 0; index < 10; index++)
        {
            var test = new UdpLocalServerUploaderService();
            var th = new Thread(test.Start);
            var intBytes = BitConverter.GetBytes(index);
            th.Start(intBytes);
        }

        Console.ReadLine();
    }

    internal  class UdpLocalServerUploaderService
    {
        private static UdpClient _udpClient;
        private static string Uri = "my server";
        private const int Port = 8200;

        public  void Start(object token)
        {
            var data = new byte[4000];
            data[0] =( (byte[]) token)[0];
            data[1] = ((byte[])token)[1];
            data[2] = ((byte[])token)[2];
            data[3] = ((byte[])token)[3];

            Thread.Sleep(3000);
            _udpClient = new UdpClient(Uri, Port);
            while (true)
            {
                _udpClient.Send(data, data.Length);
                Thread.Sleep((100));
            }
        }
    }
}

Это мой сервер c#

    public void StartListening(object port)
    {
        try
        {
            var ipep = new IPEndPoint(IPAddress.Any, (int)port);
            var newsock = new UdpClient(ipep);
            var sender = new IPEndPoint(IPAddress.Any, 0);

            EvLogger?.Invoke(LoggerName.Info, "Listening");
            // EvUdpStatus?.Invoke(true);
            var data = newsock.Receive(ref sender);

            while (true)
            {
                data = newsock.Receive(ref sender);
                EvLogger?.Invoke(LoggerName.Debug, DateTime.Now + "\t" +  BitConverter.ToInt32(data, 0));
            }
        }
        catch (Exception ex)
        {
            EvLogger?.Invoke(LoggerName.Error, ex);

        }
    }

Я могу просматривать созданные журналы и видеть, что 10 пакетов принимаются для 10 клиентов каждую секунду.

Теперь, если Я "максимально" это до 100 клиентов, есть много пропущенных пакетов, и я изо всех сил пытаюсь даже ftp в мой сервер.

Теперь я могу предположить, что максимальное количество байтов (в секунду) я могу загрузить с у моего клиента заданная цифра, и максимальное количество байтов в секунду, которое я могу получить на своем сервере?

Можно ли сказать, что мне нужны клиенты в разных сетях для правильного тестирования максимального количества? байтов, которые могут быть получены на мой сервер?

Извините, если это все очевидно, но просто нужно, чтобы люди смотрели на точку зрения.

Спасибо

...