目的及应用场景:
客户端1次查询1页商品图片(5x4=20个)时,服务端每获取1张图片则立即返回而不是处理完20个图片后一起返回。
这样,可以让客户端和服务端交替并行执行,提高响应速度。
为了支持一个请求返回多个响应包的情况,消息属性增加CONT_MASK:
enum MSG_ATTR_MASK {
CONT_MASK = 0X0001, ///< 是否有后续包, 0-无 1-有
};
代码示例:
///< 5732 下载图片通用协议
int CDataUpdate::OnDownLoadCommPic可以参考以下修改:
for (int i=0;i<nRowsetNum;i++) {
CMsg *pAns = new CMsg;
AUTO_POINTER_NODECLARE(CMsg,pAns);
pAns->SetMsgType(MT_CONFIRMATION);
CRowset *pRow = new CRowset;
pAns->AddRowset(pRow);
pRow->SetFields("ID","DataVersion", "Image", "PicFormat", 0);
FieldDescriptor *pFD = pRow->GetFieldInfo("Image");
pFD->type = dtLongVarBinary;
if (i!=nRowsetNum-1) {
pAns->SetMsgAttr(CONT_MASK); ///< 非最后一个消息包设置CONT_MASK
}
network_->SendMsg(pAns); ///< 发送消息
}
or.auto_resp_ = false; ///< @note 不再自动构造返回消息包
return 0;
这要求消息是顺序发送的.
---当返回消息的handlerid相符且没有后续包时才删除
(msg.getMsgAttr()&CONT_MASK)==0
---必须有超时机制:服务器无返回的情况
.handlerid生成规则:如何保证不重复,重复的后果.