我以前使用过BeginAccept()和BeginRead(),但与Visual Studio 2012我想利用新的异步的(async,await)功能在我的socket服务器程序。我该如何完成AcceptAsync和ReceiveAsync功能?using System.Net;using System.Net.Sockets;namespace OfficialServer.Core.Server{ public abstract class CoreServer { private const int ListenLength = 500; private const int ReceiveTimeOut = 30000; private const int SendTimeOut = 30000; private readonly Socket _socket; protected CoreServer(int port, string ip = "0.0.0.0") { _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port)); _socket.Listen(ListenLength); _socket.ReceiveTimeout = ReceiveTimeOut; _socket.SendTimeout = SendTimeOut; _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); } public void Start() { } }}
3 回答
aluckdog
TA贡献1847条经验 获得超7个赞
您可以使用TaskFactory.FromAsync自动换行Begin/ End成对async操作。
Stephen Toub 在他的博客上有一个等待Socket更有效的*Async终端的等待。我建议将其与TPL Dataflow结合使用,以创建完全async兼容的Socket组件。
胡子哥哥
TA贡献1825条经验 获得超6个赞
Socket.ReceiveAsync很奇怪。它与.net4.5中的async / await功能无关。它被设计为一种替代套接字API,它不会像BeginReceive / EndReceive那样破坏内存,只需要在最核心的服务器应用程序中使用。为了给您一些规模感,我们运行了一个服务器BeginXXXX / EndXXXX方法,可以轻松支持5000个连接的客户端。我从来没有需要使用ReceiveAsync,我可能在考虑使用ReceiveAsync和SocketAsyncEventArgs进行重写之前升级硬件,因为它可能在我的时间方面更便宜。
- 3 回答
- 0 关注
- 548 浏览
添加回答
举报
0/150
提交
取消