iocp完成端口封装类 内存优化 高并发 接口简单(一)

2014-11-24 08:23:37 · 作者: · 浏览: 1
class Iocp //完成端口 功能类
class IocpMemoryManager //此类提供IOCP 内存的管理
[cpp]
#pragma once
#include "IocpMemoryManager.h"
#include < windows.h>
#define MAXWORKERTHREADS 2
//iocp类封装
classCIocp
{
public:
CIocp(void);
~CIocp(void);
boolStartServer(intnPort = 4568, intnMaxConnections = 2000);//开始服务 监听端口,最大的连接数
boolReStartServer(); //重启服务
boolStopServer(); //停止服务
intGetCurrentConnection(); //得到当前的连接数
boolSendText(CIOCPContext *pContext, char*pszText, intnLen);//发送数据给客户端
char* GetCustomLastError(); //获取最后的错误信息
protected:
// 事件通知函数
virtualvoid OnConnectionEstablished(CIOCPContext *pContext, CIOCPBuffer *pBuffer) = 0; // 建立了一个新的连接
virtualvoid OnConnectionClosing(CIOCPContext *pContext, CIOCPBuffer *pBuffer) = 0; // 一个连接关闭
virtualvoid OnConnectionError(CIOCPContext *pContext, CIOCPBuffer *pBuffer, intnError) = 0;// 在一个连接上发生了错误
virtualvoid OnReadCompleted(CIOCPContext *pContext, CIOCPBuffer *pBuffer) = 0; // 一个连接上的读操作完成
virtualvoid OnWriteCompleted(CIOCPContext *pContext, CIOCPBuffer *pBuffer) = 0; // 一个连接上的写操作完成
private:
IocpMemoryManager* m_pIocpMemoryManager;//此类提供IOCP 内存的管理
boolm_bServerStarted; //服务是否已经启动
intm_nPort; // 服务器监听的端口
intm_nInitialAccepts; //初始化投递的接受请求数
intm_nInitialReads; //初始化投递Accept数
intm_nMaxAccepts; //最大接受数
intm_nMaxSends; //单套接字最大发送数
intm_nMaxListenCount; //最大的监听数
intm_nMaxWorkerThreads; //最大工作线程数
char* m_pcaErrorMessage; //错误信息 取得最后一个错误信息
//Event
HANDLEm_hAcceptEvent; // 用于投递Accept请求
HANDLEm_hRepostEvent;
LONGm_nRepostCount;
//套接字信息
HANDLEm_hListenThread; // 监听线程
HANDLEm_hCompletion; // 完成端口句柄
SOCKET m_sListen; // 监听套节字句柄
LPFN_ACCEPTEX m_lpfnAcceptEx; // AcceptEx函数地址
LPFN_GETACCEPTEXSOCKADDRS m_lpfnGetAcceptExSockaddrs; // GetAcceptExSockaddrs函数地址
private:
boolDoWSAStartup(); //初始化 socket库
voidInitData(); //初始化数据
voidInitEvent(); //初始化Event
boolCreateIocpPort(); //创建完成端口
voidSetCustomLastError(char* error); //设置错误
boolPostAccept(CIOCPBuffer *pBuffer); // 投递接受I/O
boolPostSend(CIOCPContext *pContext, CIOCPBuffer *pBuffer); // 投递发送I/O
boolPostRecv(CIOCPContext *pContext, CIOCPBuffer *pBuffer); // 投递接收I/O
voidHandleIO(DWORDdwKey, CIOCPBuffer *pBuffer, DWORDdwTrans, intnError); //总请求处理
voidHandleAccept(CIOCPBuffer *pBuffer, DWORDdwTrans); //处理接收请求
voidHandleRead(CIOCPContext *pContext, CIOCPBuffer *pBuffer, DWORDdwTrans); //处理读请求
voidHandleWrite(CIOCPContext *pContext, CIOCPBuffer *pBuffer, DWORDdwTrans);//处理写请求
staticDWORD WINAPI _ListenThreadProc(LPVOIDlpParam); //监听线程
staticDWORD WINAPI _WorkerThreadProc(LPVOIDlpParam); //工作线程
};
[cpp]
//IocpMemoryManager.h
#pragma once
#include
#include
#incl