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
Удачи.