我正在寫支持大量(50,000+)連接的tcp服務器,並且我發現了這個問題。套接字同步發送優於異步beginsend/endsend?
同步發送至少比異步發送執行3次。這些方案除了這兩個行相同:
m_socket.Send(sendingBuffer, length, SocketFlags.None);
和
m_socket.BeginSend(sendingBuffer, 0, length, 0, new AsyncCallback(SendCallback), this);
在SendCallback我只是叫EndSend,沒有別的。
這個巨大的性能差異來自哪裏?不是異步方法應該表現得更好?
您是否嘗試了SendAsync API?這實際上可以是同步或異步(返回值告訴你它使用了哪個)。 SendAsync API是我用於我們的websockets服務器的地方,它處理類似的流量。 –
快3倍做什麼?您要傳輸多少數據?乞丐相信,兩者最終都不是網絡約束而不是CPU約束的。 – EJP
正在發送。這是一個非常簡單的中繼服務器向連接的對等點轉發請求。 – jjofseattle