当前位置: 首页 > news >正文

[socket]hpsocket-pull模式

为什么要用pull模式呢,我不是所谓的别人说pull效率高,是因为包头的长度 int不是固定长度。
服务器IO-HPSocket

PUSH:收到数据立马触发OnReceive,由开发人员自己实现拆包和缓冲区的管理逻辑。
PULL:收到数据立马触发OnReceive,但需要开发人员维护数据包的长度(数据缓冲区管理HP内部做了),当拼接一个完整的Pack之后,Fetch获取完整的数据包就OK了。
PACK:收到数据并且拼成一个完整的Pack之后触发OnReceive,OnReceive的数据就是一个完整的包。开发人员不必关系拼包的过程,
https://blog.csdn.net/CAir2/article/details/82188721
https://blog.csdn.net/weixin_41761608/article/details/115373554?spm=1001.2014.3001.5501
https://blog.csdn.net/weixin_41761608/article/details/115366101
https://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;}

http://www.lryc.cn/news/67391.html

相关文章:

  • 数据分析师 ---- SQL强化(3)
  • 微信小程序商品分类页最佳实践
  • 正则化解决过拟合
  • 在 Windows 上安装 Helm包
  • Clion开发STM32之OTA升级模块(一)
  • Java供应链安全检测SDL方法论
  • Magic-API的部署
  • 程序进制换算
  • Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN
  • 【华为OD机试真题】最小的调整次数(python版)100%通过率 超详细代码注释 代码解读
  • WPF中嵌入web网页控件 WebBrowser
  • Kafka原理之消费者
  • PCIe的capability扩展空间字段解释
  • 力扣sql中等篇练习(二十)
  • 【神经网络】tensorflow -- 期中测试试题
  • 计算机基础--计算机存储单位
  • 大数据Doris(十六):分桶Bucket和分区、分桶数量和数据量的建议
  • 【webrtc】web端打开日志及调试
  • C++ Primer第五版_第十六章习题答案(61~67)
  • python定时任务2_celery flower计划任务
  • 地狱级的字节跳动面试,6年测开的我被按在地上摩擦.....
  • 怎么开发外贸网站
  • 从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台|新版本揭秘
  • H5 + C3基础(H5语义化标签 多媒体标签 新表单标签)
  • 低代码平台选择指南:如何选出最适合你的平台?
  • 软考A计划-重点考点-专题十二(JAVA程序设计)
  • 亚马逊云科技工业数据湖解决方案,助力企业打通各业务场景数据壁垒
  • 修改lib64/l.ibc.so6导致系统命令都不能用
  • Web(一)-- 创建一个简单的Web项目(idea 2022版)
  • 前一篇文章最后一个算法校正