【发布时间】:2013-01-15 17:45:36
【问题描述】:
我的任务是设计一个相当简单的 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 相关,并且没有提及 async/await 模式。
我能够以“旧方式”编写服务器......但我想知道“新方式”是什么。
- 使用 Socket、TcpClient 或 TcpListener 上的新 Async 方法在 C# 中创建可扩展服务器的最佳方式是什么?
- 新的异步方法是否利用 I/O 完成端口?
- 滚动您自己的 Socket 侦听器效率更高,还是 TcpListener/TcpClient 类现在非常好?
编辑:其他问题。
【问题讨论】:
-
没有 C# 4.5 :) 它是 .net 4.5,C# 5
-
@SoroushFalahati:使用 I/O 完成端口的异步不应阻塞线程。事实上,.NET 3.5 和更高版本中的大多数 Begin/AsyncResult 类型的 I/O 方法都利用 IOCP,因此它们不应该像 .NET 2.0 中的异步那样阻塞任何线程。
-
@SoroushFalahati:实际上,我很确定绝大多数浏览器和 Web 服务器都使用 asynchronous 方法。特别是基于 IOCP。
-
您是否考虑过使用networkcomms.net等网络库?这里有一个很好的例子networkcomms.net/creating-a-wpf-chat-client-server-application
标签: c# .net sockets async-await