一个请求返回多个应答消息的支持

来源:互联网 发布:淘宝如何上传图片清晰 编辑:程序博客网 时间:2024/05/21 13:57

目的及应用场景:
客户端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;


这要求消息是顺序发送的.


nw客户端注意事项:

.请求消息的handlerid删除时机
---当返回消息的handlerid相符且没有后续包时才删除
    (msg.getMsgAttr()&CONT_MASK)==0
    
---必须有超时机制:服务器无返回的情况
.handlerid生成规则:如何保证不重复,重复的后果.
0 0
原创粉丝点击