查看: 234|回复: 1

网狐棋牌(五) TCPSocketEnging分析(1)

[复制链接]

8

主题

37

帖子

224

积分

vip会员

Rank: 1

积分
224
发表于 2020-3-27 16:15:42 | 显示全部楼层 |阅读模式
先来看几个底层结构:
// 重叠结构类
class COverLapped
{
     // 变量定义
public:
    WSABUF                            m_WSABuffer;                         // 数据指针
    OVERLAPPED                        m_OverLapped;                         // 重叠结构
     const enOperationType            m_OperationType;                     // 操作类型

   
// 函数定义
public:
     // 构造函数
    COverLapped(enOperationType OperationType);
     // 析构函数
     virtual ~COverLapped();

     // 信息函数
public:
     // 获取类型
    enOperationType GetOperationType() {  return m_OperationType; }
};

// 接收重叠结构
class COverLappedSend :  public COverLapped
{
     // 数据变量
public:
    BYTE                            m_cbBuffer[SOCKET_BUFFER];             // 数据缓冲

   
// 函数定义
public:
     // 构造函数
    COverLappedSend();
     // 析构函数
     virtual ~COverLappedSend();
};

// 重叠结构模板
template <enOperationType OperationType>  class CATLOverLapped :  public COverLapped
{
     // 函数定义
public:
     // 构造函数
    CATLOverLapped() : COverLapped(OperationType) {}
     // 析构函数
     virtual ~CATLOverLapped() {}
};

先复习下基础,Windows下的网络模型有很多种,这里只拿出三种来说:
EventSelect:基于信号机制,以socket为单位绑定信号量,当socket上有指定的事件发生时激发信号,然后查询事件处理事件重设事件,继续在信号量上等待。其实也是在伯克利select模型上的换不换药的加强。
OverLapped:分两种工作模式完成回调,和完成事件。重叠IO监视每次操作,每次IO都绑定一个重叠对象,当操作完成以后激发信号或者调用回调。
IOCP:和overlapped类似,不过结果经过了Windows的预处理以队列的形式挂在完成端口上

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部