转自http://blog.sina.com.cn/s/blog_4977ed470100f1x6.html
高性能UDP服务器的开发
UDP服务器的网络层开发相对与TCP服务器来说要容易和简单的多,UDP服务器的大致流程为创建一个socket然后将其绑定到完成端口上并投递一定数量的recv操作.当有数据到来时从完成队列中取出数据发送到接收队列中即可。
测试结果如下:
WindowsXP Professional,Intel Core Duo E4600 双核2.4G , 2G内存。同时30K个用户和该UDP服务器进行交互其CPU使用率为10%左右,内存占用7M左右。
下面详细介绍该服务器的架构及流程:
下面将主要介绍UdpSer类, 该类主要用来管理UDP服务.其定义如下:
1 class DLLENTRY UdpSer
2 {
3 public:
4 UdpSer();
5 ~UdpSer();
6
7
10 static void InitReource();
11
12
15 static void ReleaseReource();
16
17 //用指定本地地址和端口进行初始化
18 BOOL StartServer(const CHAR* szIp = "0.0.0.0", INT nPort = 0);
19
20 //从数据队列的头部获取一个接收数据, pCount不为null时返回队列的长度
21 UDP_RCV_DATA* GetRcvData(DWORD* pCount);
22
23 //向对端发送数据
24 BOOL SendData(const IP_ADDR& PeerAddr, const CHAR* szData, INT nLen);
25
26
30 void CloseServer();
31
32 protected:
33 SOCKET m_hSock;
34 vector<UDP_RCV_DATA* > m_RcvDataQue; //接收数据队列
35 CRITICAL_SECTION m_RcvDataLock; //访问m_RcvDataQue的互斥锁
36 long volatile m_bThreadRun; //是否允许后台线程继续运行
37 BOOL m_bSerRun;