网站自助建设平台,深圳网站建设服务,如何制作一个单页网站,wordpress nginx 伪静态规则为什么要用pull模式呢#xff0c;我不是所谓的别人说pull效率高#xff0c;是因为包头的长度 int不是固定长度。服务器IO-HPSocket
PUSH#xff1a;收到数据立马触发OnReceive#xff0c;由开发人员自己实现拆包和缓冲区的管理逻辑。 PULL#xff1a;收到数据立马触发OnR…为什么要用pull模式呢我不是所谓的别人说pull效率高是因为包头的长度 int不是固定长度。服务器IO-HPSocket
PUSH收到数据立马触发OnReceive由开发人员自己实现拆包和缓冲区的管理逻辑。 PULL收到数据立马触发OnReceive但需要开发人员维护数据包的长度数据缓冲区管理HP内部做了当拼接一个完整的Pack之后Fetch获取完整的数据包就OK了。 PACK收到数据并且拼成一个完整的Pack之后触发OnReceiveOnReceive的数据就是一个完整的包。开发人员不必关系拼包的过程https://blog.csdn.net/CAir2/article/details/82188721https://blog.csdn.net/weixin_41761608/article/details/115373554?spm1001.2014.3001.5501https://blog.csdn.net/weixin_41761608/article/details/115366101https://zypapa.blog.csdn.net/article/details/115366101
//m_pSocket HP_Create_TcpPackServer(this m_pSocket HP_Create_TcpServer(this);
pull模式的收包函数要自己写参数也不一样 EnHandleResult NetTcpServer::OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength){Log::Instance()-WriteLog(enLogType_Debug,--------NetTcpServer-----------OnReceive----------------dwConnID%d,dwConnID);TPkgInfo* pInfo FindPkgInfo(pSender, dwConnID);if(NULL pInfo){//包长pInfo new TPkgInfo();BYTE buffer[1];m_pPullSocket-Fetch(dwConnID, buffer, 1);((TPkgInfo*)pInfo)-PacketLen Stream::get_bit_6(*buffer);iLength iLength - 1;if((*buffer 128) 128) //判断最高位是否是1{iLength iLength - 1;m_pPullSocket-Fetch(dwConnID, buffer, 1);pInfo-PacketLen Stream::getLen(*buffer, pInfo-PacketLen);}packetList[dwConnID] pInfo; }int required pInfo-PacketLen; //包总长度//包体if (iLength required){BYTE* buffer new BYTE[required];En_HP_FetchResult result;result m_pPullSocket-Fetch(dwConnID, buffer, required);if (result FR_OK){Log::Instance()-WriteLog(enLogType_Debug,--------Fetch %s,Stream::ByteToHex((const unsigned char*)buffer, required ));Extralib::Thread::sWorkItem workItem;DataPacket* dp dataPacketPool.PopDataPacket();dp-writeBuf(buffer,required);dp-setPosition(0);workItem.Set(INetworkEvent_RecvData, dwConnID, dp-getLength(), (char*)dp);PushItem(workItem);packetList.erase(dwConnID);delete pInfo;pInfo NULL;return HR_OK;}}return HR_OK;}