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


目的及应用场景:
客户端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生成规则:如何保证不重复,重复的后果.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值