一种双端任务处理方法

文档序号:9396696阅读:181来源:国知局
一种双端任务处理方法
【技术领域】
[0001]本发明涉及通信技术领域,具体涉及一种双端任务处理方法。
【背景技术】
[0002]在处理双端任务时,需要处理各种类型的通讯请求,例如【同步cache数据请求】,【同步flush结果请求】等等。很多请求在处理完成之后都需要对请求方进行响应,例如【同步cache数据请求】,在cache同步完成之后才能向1发起者报告1已完成。这样的话,在设置通讯的数据结构时,就必须设置多种类型,比如如果设置了类型【同步cache数据请求】,就必须设置对应的【同步cache数据应答】,以便在收到对应类型的数据包时进行处理。
[0003]现有的双端任务处理方法存在的问题是:对于需要响应的请求,必须特别为其设置对应的应答,即使该应答仅需要简单应答请求成功或者失败。并且没有提供一种统一的方式,对发起请求之后发生的通讯断开事件进行处理。

【发明内容】

[0004]本发明所要解决的技术问题是现有的双端任务处理方法对于需要响应的请求,必须特别为其设置对应的应答,没有提供一种统一的方式,对发起请求之后发生的通讯断开事件进行处理。
[0005]为此目的,本发明提供一种双端任务处理方法,所述方法包括:
[0006]第一端根据预设的双端任务PeerTask数据结构,生成双端任务PeerTask,并将所述PeerTask链接到预设的链表中;
[0007]第一端根据预设的通用通讯数据包结构,生成请求数据包,并将所述请求数据包发送到第二端;
[0008]第二端在接收到所述请求数据包之后,对所述请求数据包进行处理,并根据预设的通用通讯数据包结构,生成响应数据包,并将响应数据包发送到第一端;
[0009]第一端在接收到所述响应数据包之后,结束PeerTask。
[0010]可选的,所述预设的双端任务PeerTask数据结构,包括:
[0011]链表节点,用于标记PeerTask链接到预设的链表的位置;
[0012]私有数据指针,用于指向PeerTask的私有数据;所述私有数据指针在PeerTask初始化时赋值;
[0013]回调函数指针,用于在PeerTask结束时调用回调函数进行处理,所述回调函数的参数为所述本端PeerTask指针、对端PeerTask指针以及错误码,所述回调函数指针在PeerTask初始化时赋值;所述响应的PeerTask指针以及错误码根据第二端发送的响应数据包确定;
[0014]第二端断开标志,用于标记通讯状态,所述第二端断开标志的值为false或者true, false表示通讯未断开,true表示通讯断开。
[0015]可选的,所述预设的通用通讯数据包结构,包括:
[0016]数据包类型字段,用于表示数据包的类型,所述类型包括请求以及响应;
[0017]PeerTaskReq字段,用于表不第一端的PeerTask指针;
[0018]PeerTaskRsp字段,用于表示第二端的PeerTask响应指针;
[0019]errno字段,用于表示第二端响应是否成功,成功则为0,否则为错误码;
[0020]变长data字段,用于存储PeerTask私有数据,所述变长data字段的长度和内容根据预设的请求类型确定。
[0021]可选的,所述第一端根据预设的双端任务PeerTask数据结构,生成双端任务PeerTask,并将所述PeerTask链接到预设的链表中,包括:
[0022]第一端将第二端断开标志的值初始化为false,初始化私有数据指针及回调函数指针,并将PeerTask链接到预设的链表。
[0023]可选的,所述第一端根据预设的通用通讯数据包结构,生成请求数据包,并将所述请求数据包发送到第二端,包括:
[0024]第一端将请求数据包的PeerTaskReq字段设置为PeerTask指针,并将请求数据包发送到第二端。
[0025]可选的,所述第二端在接收到所述请求数据包之后,对所述请求数据包进行处理,并根据预设的通用通讯数据包结构,生成响应数据包,并将响应数据包发送到第一端,包括:
[0026]第二端在接收到所述请求数据包之后,对所述请求数据包进行处理;
[0027]第二端对所述请求数据包进行处理之后,根据预设的通用通讯数据包结构,生成响应数据包,所述响应数据包中数据包类型字段设置为响应类型PeerTaskResponse,所述响应数据包中PeerTaskReq字段的值根据请求数据包中数据包类型字段的内容确定,所述响应数据包中PeerTaskRsp字段的值为所述请求数据包中PeerTaskReq字段的值,所述响应数据包中errno字段的值为所述第二端在处理所述请求数据包之后返回的错误码,若无错误,则errno字段的值为0,否则,errno字段的值为预定义的错误码;
[0028]第二端发送所述响应数据包到第一端;
[0029]相应地,所述第一端在接收到所述响应数据包之后,使用所述响应数据包的PeerTaskRsp、PeerTaskReq 以及 errno 字段,结束 PeerTask。
[0030]可选的,所述响应数据包中PeerTaskReq字段的值根据请求数据包中数据包类型字段的内容确定,包括:
[0031]第二端在确定请求数据包中数据包类型字段的内容为交互式任务之后,将响应数据包中PeerTaskReq字段的值设置为所述第二端在处理请求数据包过程中生成的PeerTask 指针;
[0032]第二端在确定请求数据包中数据包类型字段的内容为简单请求响应任务之后,将响应数据包中PeerTaskReq字段的值设置为空。
[0033]可选的,所述第二端发送所述响应数据包的步骤之后,所述方法还包括:
[0034]若在处理请求数据包的过程中生成了 PeerTask,则第二端在确定发送响应数据包失败之后,使用PeerTaskReq字段、空指针以及errno字段,结束PeerTask。
[0035]可选的,所述方法进一步包括通用的通讯断开处理步骤,包括:
[0036]第一端遍历预设的链表,对每一个链表节点,找到对应的PeerTask,并结束PeerTask。
[0037]可选的,所述结束PeerTask,包括:
[0038]将PeerTask的链表节点从预设的链表中移除;
[0039]在确定错误码为通讯断开的错误码之后,将PeerTask的第二端断开标志设置为true ;
[0040]根据回调函数指针调用回调函数进行处理。
[0041 ] 相比于现有技术,本发明的双端任务处理方法对于不同的请求设置相同结构的响应数据包;对于不同的请求使用所述相同结构的响应数据包进行处理,不需要单独为每个请求设置对应的响应数据包类型;设计通用的通讯断开处理方案,不需要对各种请求额外的设计类似的解决方案。本发明的双端任务处理方法提出一种通用的双控通讯请求任务(在这里称之为PeerTask)处理方案,能够更加简便的添加新的简单请求任务(仅需要收到一个应答),支持不带额外应答数据的多次交互式通讯任务,并提供统一的通讯断开处理方式。
【附图说明】
[0042]图1示出了一种双端任务处理方法流程图。
【具体实施方式】
[0043]如图1所示,本实施例公开一种双端任务处理方法,包括:
[0044]设置通用的请求数据结构PeerTask:
[0045](I).链表节点结构,将PeerTask链接到某个链表中,在通讯断开时可以遍历该链表以遍历所有未完成的请求,并进行断开处理;
[0046](2).上下文指针,在PeerTask初始化时赋值,在处理请求的回调函数时作为参数传入;
[0047](3).请求的回调函数指针,在PeerTask初始化时赋值,在PeerTask完成时将调用该函数进行处理,其参数为PeerTask的上下文指针、PeerTask自身的指针(即请求指针)、响应的PeerTask的指针(即对端响应指针)、错误码;
[0048](4).对端断开标志,初始化为false,如果在PeerTask完成时的错误码为通讯断开的错误码,则该标志会被设置为true。
[0049]设置通用的通讯数据包结构:
[0050](I).数据类型字段,表示是何种数据包,大部分数据包都是请求类,特别设置PeerTaskResponse表示通用的响应类型;
[0051](2).PeerTaskReq字段,表示请求方所使用的PeerTask指针;
[0052](3).PeerTaskRsp字段,表示响应方所响应的请求PeerTask指针,即通讯请求数据包的PeerTaskReq字段的值;
[0053](4).errno字段,表示响应是否成功,成功则为0,否则为错误码;
[0054](5).变长data字段,存储请求的私有数据,其长度和内容随着请求类型的不同而不同。
[0055]请求响应流程:
[0056](I).初始化PeerTask,设置上下文指针及回调函数,并将其插入到PeerTask链表中;
[0057](2).组织并发送数据包,将数据包的PeerTaskReq字段设置为task指针;
[0058](3).对端收到数据包,进行处理,在处理完成之后调用end_peer_task进行响应:
[0059]a)设置数据包类型为 PeerTaskResponse ;
[0060]b
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1