请问HP-Socket 新增的 PULL 模型在实际应用中有什么好处?
ssxgs 2013-07-22 06:06:00 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模型。