簡體   English   中英

使用異步/等待模式在 C# 5 中編寫高度可擴展的 TCP/IP 服務器?

[英]Writing a highly scalable TCP/IP server in C# 5 with the async/await pattern?

我的任務是設計一個相當簡單的 TCP/IP 服務器,它必須接受來自多個客戶端的連接。 它需要用 C# 編寫,而我使用的是 .NET 4.5。 也就是說,我不確定 .NET 4.5 中 TCP/IP 服務器/客戶端可伸縮性的當前“最新技術”是什么。

我確實看過這篇文章: How to write a scalable Tcp/Ip based server 但這與 .NET 2.0 和 3.5 相關,並且沒有提及異步/等待模式。

我有能力以“舊方式”編寫服務器......但我想知道“新方式”是什么。

  • 在 Socket、TcpClient 或 TcpListener 上使用新的 Async 方法在 C# 中創建可伸縮服務器的最佳方法是什么?
  • 新的異步方法是否利用 I/O 完成端口?
  • 滾動您自己的 Socket 偵聽器是否更有效,或者 TcpListener/TcpClient 類現在非常好?

編輯:其他問題。

在 Socket、TcpClient 或 TcpListener 上使用新的 Async 方法在 C# 中創建可伸縮服務器的最佳方法是什么?

Socket上沒有任何新的async方法; Socket上名為*Async的方法是一組特殊的 API,用於減少內存使用。 TcpClientTcpListener確實獲得了一些新的async方法。

如果您想要最好的可伸縮性,您可能最好使用Stephen Toub 的Socket自定義等待程序 如果您想要最簡單的代碼,最好使用TcpClientTcpListener

新的異步方法是否利用 I/O 完成端口?

是的,就像 BCL 中的大多數其他異步 API 一樣。 AFAIK, Stream類是唯一可能不使用 IOCP 的類; 所有其他*Begin / *End / *Async方法都使用 IOCP。

滾動您自己的 Socket 偵聽器是否更有效,或者 TcpListener/TcpClient 類現在非常好?

這些課程非常好。 Stephen Toub 有一篇博客文章,在內存使用方面效率更高一些。

我的任務是設計一個相當簡單的 TCP/IP 服務器,它必須接受來自多個客戶端的連接。 它需要用 C# 編寫,我使用的是 .NET 4.5。 也就是說,我不確定 .NET 4.5 中 TCP/IP 服務器/客戶端可擴展性的當前“最新技術”是什么。

我確實看到了這篇文章: 如何編寫可擴展的基於 Tcp/Ip 的服務器 但這與 .NET 2.0 和 3.5 相關,並沒有提及 async/await 模式。

我能夠以“舊方式”編寫服務器……但我想知道“新方式”是什么。

  • 在 Socket、TcpClient 或 TcpListener 上使用新的 Async 方法在 C# 中創建可擴展服務器的最佳方法是什么?
  • 新的異步方法是否利用 I/O 完成端口?
  • 滾動您自己的 Socket 偵聽器是否更有效,或者 TcpListener/TcpClient 類現在是否很好?

編輯:其他問題。

暫無
暫無

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

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