[0033] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0034] 需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0035] 下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
[0036] 本发明基于如下发现:
[0037] 现有的长连接主要基于原始TR-069客户端的会话机制,原始的会话机制主要是为了保证报文顺序不乱序,如图1所示。但是基于长连接的客户端如果要处理服务器下发的并发无序报文,会发生如图2所示的会话错误。因此需要改进长连接的处理机制。可通过如下三种方法进行改进:
[0038] 第一种方法:用多进程的方法,通过子进程处理会话,这样多个会话可以并发;
[0039] 第二种方法:使用多线程,每个线程处理一个会话;
[0040] 第三种方法:使用单进程并采用任务队列方式。
[0041] 上述第一种方法和第二种方法对硬件要求较高,适合在多核,大内存的处理平台上使用。目前很多大型服务器是使用多进程,多线程方法来处理十万级,百万级的并发访问。而对于家庭网关这种网络终端设备,处理能力有限,并且并发数不会太多,多进程或多线程的处理方法会额外开销系统资源。所以本发明采取第三种方法,即采用任务队列的方式,以避免多条报文交互过程中出错的情形。
[0042] 如图3-4所示,一种处理报文的方法,用于基于CPE广域网管理协议的客户端,包括下述步骤:
[0043] S1.客户端与一服务器建立长连接;
[0044] S2.客户端监听长连接是否有数据包传送,若是,执行步骤S3;若否,执行步骤S4;
[0045] S3.客户端对数据包进行解析,根据解析结果创建对应的任务,并将任务添加至一预设的队列中,返回执行步骤S2;
[0046] S4.客户端根据预设的队列的顺序逐条处理队列中的任务,并将任务的处理结果发送至服务器,返回执行步骤S2。
[0047] 在本实施例中,处理报文的方法用于监听长连接是否有数据包传输,当有数据包传输时,对数据包进行解析,根据解析结果创建任务,并将任务添加于预设的队列中;当没有数据包传输时,集中处理队列中的所有任务,并将处理结果发送至服务器,避免了报文交互过程中容易出错的情形,提高了通道利用率。
[0048] 如图5所示,在优选的实施例中,在执行S3之前,还包括:
[0049] 客户端提供一缓冲区用以存储接收到的数据包,并从缓存区中读取数据包。
[0050] 在本实施例中,通过缓冲区存储数据包以供客户端读取数据包中的数据。
[0051] 在优选的实施例中,每一数据包中包括复数条报文,每一条报文对应一条任务。
[0052] 在本实施例中,每一数据包中可包括一条或多条报文。
[0053] 如图6所示,在优选的实施例中,步骤S3包括:
[0054] S31.客户端对数据包进行解析,获取数据包中的复数条报文;
[0055] S32.客户端根据获取的报文创建与报文对应的任务;
[0056] S33.客户端根据数据包的包头指示的顺序,将报文对应的任务添加于队列中。
[0057] 在本实施例中,客户端对数据包进行解析以获取数据包中的报文,并建立相应的任务,根据数据包的包头顺序将与报文对应的任务添加于任务队列中,根据队列中的任务顺序逐一进行处理,从而避免了报文交互过程中出错的情形,提高了通道利用率。
[0058] 如图7所示,在优选的实施例中,在执行步骤S4之前还包括:
[0059] 判断队列中是否存在未执行的任务,若是,执行步骤S4;若否,返回执行步骤S2。
[0060] 在本实施例中,判断队列中是否存在未执行的任务,若队列中有未执行的任务,则暂停监听长连接是否有数据包传送,根据队列的顺序逐条处理队列中的任务;若队列中没有未执行的任务,则返回步骤S2监听长连接是否有数据包传送。
[0061] 在优选的实施例中,在步骤S4中,每处理一条任务,将任务的处理结果发送至服务器。
[0062] 进步一地,处理结果为处理正确或处理错误。
[0063] 在本实施例中,客户端可每处理一条任务就向服务器发送一条处理结果,避免了报文乱序的问题。
[0064] 在优选的实施例中,在步骤S4中,根据队列的顺序逐条将队列中的所有任务处理完成后,根据队列的顺序逐一将每条任务的处理结果发送至服务器。
[0065] 进步一地,处理结果为处理正确或处理错误。
[0066] 在本实施例中,客户端可将队列中的所有任务处理完后,根据处理任务的先后顺序逐一向服务器发送处理结果,避免了报文乱序的问题。
[0067] 在优选的实施例中,步骤S4中,还包括:
[0068] 提供一预定周期;
[0069] 步骤S4中,于预定周期内,根据队列的顺序,逐条执行队列中的任务,并将每条任务的处理结果发送至服务器。
[0070] 以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。