繁体   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