请问HP-Socket 新增的 PULL 模型在实际应用中有什么好处?
HP-Socket v2.2 中新增了PULL模型支持,想请教下各位大虾:在实际应用中如何使用PULL模型,作者说PULL模型比PUSH模型简单,但看提供的Demo仿佛代码量更多了,到底简单在哪里?以下摘录PULL模型介绍:
PUSH / PULL 模型简介:
通信组件向上层应用提交数据有以下两种模式:
PUSH 模型:当通信组件接收到数据后调用应用接口的 OnReceive(dwConnID, const BYTE* pData, int iLength) 方法向应用程序推送数据,应用程序实现该方法并在方法内部取得 pData 进行处理。
PULL 模型:当通信组件接收到数据后调用应用接口的 OnReceive(dwConnID, int iTotalLength) 方法(注意,不包含 pData 参数)通知应用程序有 iLength 长度的数据可取,如果应用程序认为该长度的数据能组成一个完整的数据包则调用通信组件的 Fetch(BYTE* pData, int iDataLength) 方法抓取 iDataLength 长度的数据(iDataLength <= iTotalLength)。

其中 PUSH 模型效率相对较高,但应用程序本身要负责处理解包和粘包等问题,带来一定的复杂性;PULL 模型则相对简单,只要上层协议定义得足够严谨(PULL 模型的数据包通常划分为 Header 数据包和 Body 数据包),能大大简化数据包处理工作,但由于组件中间加了一个间接层,效率往往低于 PUSH模型。
PUSH / PULL 模型简介:
通信组件向上层应用提交数据有以下两种模式:
PUSH 模型:当通信组件接收到数据后调用应用接口的 OnReceive(dwConnID, const BYTE* pData, int iLength) 方法向应用程序推送数据,应用程序实现该方法并在方法内部取得 pData 进行处理。
PULL 模型:当通信组件接收到数据后调用应用接口的 OnReceive(dwConnID, int iTotalLength) 方法(注意,不包含 pData 参数)通知应用程序有 iLength 长度的数据可取,如果应用程序认为该长度的数据能组成一个完整的数据包则调用通信组件的 Fetch(BYTE* pData, int iDataLength) 方法抓取 iDataLength 长度的数据(iDataLength <= iTotalLength)。

其中 PUSH 模型效率相对较高,但应用程序本身要负责处理解包和粘包等问题,带来一定的复杂性;PULL 模型则相对简单,只要上层协议定义得足够严谨(PULL 模型的数据包通常划分为 Header 数据包和 Body 数据包),能大大简化数据包处理工作,但由于组件中间加了一个间接层,效率往往低于 PUSH模型。
...全文
相关推荐
HP-Socket网络通信框架开发指南5.0版
为了帮助用户快速学习和使用HP-Socket,官方提供了大量的Demo示例,包括PUSH模型示例、PULL模型示例、PACK模型示例、性能测试示例以及其它编程语言的示例代码。
[Demo 002]HP socket 最简单的CS pull模型
该项目基于MFC框架实现了一个最简单的客户端-服务器pull模型通信程序,具备图形界面和基础网络功能。核心功能包括套接字连接、数据收发、事件响应及UI交互控制,适用于Windows平台下的C++网络编
HP-Socket开发TCP Client
在这个"HP-Socket开发TCP Client"的例子中,我们将深入探讨如何使用HP-Socket库来创建一个简单的TCP客户端。首先,我们需要理解TCP(传输控制协议)的基本概念。
HP-Socket开发TCP Server
HP-Socket库的核心在于它的Socket类,这个类封装了与TCP/IP相关的操作。使用HP-Socket开发TCP Server,主要涉及以下几个步骤:1.
HP-Socket Development Guide5.6.pdf
整个HP-Socket框架通过大量精心制作的Demo示例(如PUSH模型示例、PULL模型示例、PACK模型示例、性能测试示例以及其他编程语言示例),使得用户能够方便快速地学习和使用该框架,迅速掌握框架的设计思想和使用方法


网络编程
