我正在用C#开发一款小型在线游戏。目前我正在使用简单的同步TCP套接字。但是现在(因为这是某种“学习项目”)我想转换为异步套接字。在客户端我有方法:byte[] SendAndReceive(Opcode op, byte[] data)
。
但是当我使用异步套接字时,这是不可能的。
例如,我的MapManager
类首先检查映射是否在本地文件夹(校验和)中,如果不是,则将从服务器下载映射。
所以我的问题: 有没有什么好方法可以发送一些数据并得到答案而不将接收到的数据保存到某种缓冲区并轮询直到这个缓冲区不为空?
答案 0 :(得分:2)
查看IO完成端口和随附的SocketAsyncEventArgs。它会在传输数据时引发事件,但您仍需要缓冲区。没有民意调查。它快速而有效。
http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
和MSDN上的另一个例子
http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx
答案 1 :(得分:0)
你所拥有的代码示例会有所帮助,但我建议为线程管理器的每个套接字连接使用一个新线程。 Lmk,如果这是有道理的或如果这适用于这里。 :)