簡體   English   中英

超過500個客戶端的TCP /異步接收句柄

[英]TCP / Async Receive Handle for more then 500 clients

我是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);
    }

在這種情況下,IOCP服務器是不錯的選擇。

有很多示例。

可能這是一件好事。

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

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM