TCP / Async Receive Handle для более чем 500 клиентов

Я полный новичок в разделе TCP, я пытаюсь запрограммировать главный сервер, который должен обрабатывать более 500 клиентов с небольшой задержкой.

Это моя первая попытка, есть ли у вас какие-либо предложения по улучшению кода, или мой код завершен?:D

Сначала я отправляю Uint16 в качестве индикатора размера сообщения

    // receive Code!
    private byte[] indexBuffer = new byte[sizeof(UInt16)];
    private int indexSize = sizeof(UInt16);

    public async void receiveData(TcpClient client) {
       var result = await Task.Run(() => {
           try {
               int checkSum = client.Client.Receive(indexBuffer, 0, indexBuffer.Length, SocketFlags.None);
               if (checkSum != indexSize) return null;

               int packageSize = BitConverter.ToUInt16(indexBuffer, 0);
               Console.WriteLine(packageSize);
               var recData = new Byte[packageSize];

               checkSum = client.Client.Receive(recData, 0, packageSize, SocketFlags.None);
               if (checkSum != packageSize) return null;
               return Encoding.ASCII.GetString(recData);
           } catch(Exception ex) {
               Console.WriteLine(ex.Message);
               return "-1";
           }
        });

        // blabla do something 
        Console.WriteLine(result);

        //---------------------
        if (client.Connected) 
           receiveData(client);
    }

1 ответ

Сервер IOCP - хороший выбор в этом случае.

Есть много примеров для этого.

Может быть, это хорошо.

https://www.codeproject.com/Articles/832818/EpServerEngine-cs-A-lightweight-asynchronous-IOCP

Удачи.

Другие вопросы по тегам