微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#套接字性能.Net 4.5 Async vs […] Async vs Begin […]

目前,根据我的研究,有三种方法可以异步使用套接字:

.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:

https://stackoverflow.com/tags/async-await/info

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐