.Net 4.5异步示例:Using .Net 4.5 Async Feature for Socket Programming(第二篇文章)
[…]异步:http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx
开始[…]:http://msdn.microsoft.com/en-us/library/5w7b7x5f(v=vs.110).aspx
我对所有选项非常困惑.Net提供了使用异步套接字的方法.我为什么要使用其中一个?有数千个同时连接的性能有什么更好的选择?
解决方法
What better choice to have performance with thousands of simultaneous
connections?
…
A curiosity regarding the Begin[…]. If I have a MMORPG server where
one connection interacting with each other for position update,
animation,effects (basic MMORPG mechanism),in numbers,which would
be “heavily loaded servers”? 200~300 simultaneous connections?
在服务器端,使用任何异步套接字API(初始/结束式APM,基于事件的EAP或基于任务的TAP)都可能同样受益.这是因为与使用同步API相比,您将阻止更少的线程.因此,可以使用更多线程同时为服务器提供其他传入请求,从而提高其可伸缩性.
最有可能的是,您不会看到使用TAP套接字API而不是其APM或EAP类似物的任何性能优势.但是,与APM或EAP相比,TAP API模式更容易开发.与async / await一起使用时,它会生成更短,更易读和更少错误的代码.您将获得自然的伪线性代码流,这是APM回调或EAP事件处理程序无法实现的.如果您无法找到适当的基于任务的套接字API,则始终可以使用Task.FromAsync从开始/结束APM API(或从EAP API,请参阅“A reusable pattern to convert event into task”)获取make one yourself.
对于客户端UI应用程序,可伸缩性并不重要,但TAP模式还有另一个好处.通过很少的努力,它有助于使您的UI响应,因为您不会阻止UI线程(通常在等待同步调用的结果时发生).这不是特定于基于任务的套接字API,它适用于任何基于任务的API,例如,Task.Delay()或Stream.ReadAsync().
有关C#中异步编程的一些好的阅读材料,请检查async / await标签wiki: