27

我的任务是设计一个相当简单的 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 类现在还不错?

编辑:附加问题。

4

1 回答 1

11

在 Socket、TcpClient 或 TcpListener 上使用新的 Async 方法在 C# 中创建可扩展服务器的最佳方法是什么?

上没有任何新async方法Socket;上命名的方法*AsyncSocket一组特殊的 API,用于减少内存使用。TcpClient并且TcpListener确实得到了一些新async方法。

如果你想要最好的可扩展性,你可能最好使用Stephen Toub 的自定义等待器,用于Socket. 如果你想要最简单的代码,你最好使用TcpClientand TcpListener

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

是的,就像 BCL 中的大多数其他异步 API 一样。AFAIK,Stream该类是唯一可能不使用 IOCP 的类;*Begin//所有其​​他方法都使用IOCP *End*Async

滚动您自己的 Socket 侦听器是否更有效,或者 TcpListener/TcpClient 类现在还不错?

这些课程非常好。Stephen Toub 有一篇在内存使用方面效率更高的博客文章。

于 2013-01-31T15:46:40.027 回答