一种异步网络通信方法及装置.pdf

上传人:32 文档编号:4752130 上传时间:2018-11-06 格式:PDF 页数:12 大小:3.84MB
返回 下载 相关 举报
摘要
申请专利号:

CN201210311584.5

申请日:

2012.08.28

公开号:

CN102801737A

公开日:

2012.11.28

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):H04L 29/06申请日:20120828|||公开

IPC分类号:

H04L29/06

主分类号:

H04L29/06

申请人:

北京城市网邻信息技术有限公司

发明人:

刘晓飞; 陈春

地址:

100012 北京市朝阳区北苑路乙108号北美国际商务中心

优先权:

专利代理机构:

北京汉昊知识产权代理事务所(普通合伙) 11370

代理人:

朱海波

PDF下载: PDF下载
内容摘要

本发明提供了一种异步网络通信方法,包括以下步骤:针对客户端的每次请求,设置一个唯一的标识号;设置一个等待窗口,将每次请求以相应的标识号为键,注册到等待窗口中,并将每次请求的函数接口以所述标识号为键,放入等待窗口;针对客户端的每次请求,均由服务端返回相应的响应包,并将响应包的数据以所述标识号为键,存入等待窗口;解析所返回的响应包,获取其中的标识号,根据所获取的标识号,将响应包中的数据传到相应的函数接口,由客户端进行相应操作。本发明有效降低了线程上下文切换的频率,提高了系统的性能。

权利要求书

1.一种异步网络通信方法,包括以下步骤:针对客户端的每次请求,设置一个唯一的标识号;设置一个等待窗口,将每次请求以相应的标识号为键,注册到等待窗口中,并将需要处理请求所返回的数据的回调方法注册到等待窗口中;针对客户端的每次请求,均由服务端返回相应的响应包,并将响应包的数据以所述标识号为键,存入等待窗口;解析所返回的响应包,获取其中的标识号,根据所获取的标识号,将响应包中的数据传到相应的函数接口,由客户端进行相应操作。2.根据权利要求1所述的方法,其中,所述标识号为全局变量;所述等待窗口存放客户端所发送请求的标识号、函数接口以及服务端返回的响应包的数据。3.根据权利要求1所述的方法,其中,所述的响应包以协议的字节流形式返回,其中包括网络通信协议版本号、请求的标识号、返回消息的长度、返回的数据类型和返回的数据内容。4.根据权利要求1-3任一项所述的方法,还包括以下步骤:将客户端所有请求的数据结构设置成队列机制;对所述队列的长度设置一个阈值,并在客户端设置滑动窗口,判断一定时间内队列的长度是否超过所述阈值,如果超过,则将先加入的请求放入滑动窗口;如果在所述阈值内,则将先加入的请求发送到服务端。5.根据权利要求4所述的方法,其中还包括以下步骤:服务端收到请求后,判断是否回调函数调用;如果是回调函数调用,则将业务逻辑处理结果和所述的标识号以及相关信息返回给客户端,否则直接处理还返回数据。6.一种异步网络通信装置,包括以下模块:标识设置模块,用于针对客户端的每次请求,设置一个唯一的标识号;等待窗口模块,用于注册以相应的标识号为键的每次请求和注册需要处理请求所返回的数据的回调方法;接收响应模块,针对客户端的每次请求而由服务端返回的相应响应包,将其响应包的数据以所述标识号为键,存入等待窗口;解析响应模块,用于解析所返回的响应包,获取其中的标识号,根据所获取的标识号,将响应包中的数据传到相应的函数接口,由客户端进行相应操作。7.根据权利要求6所述的装置,其中,所述标识号为全局的、整数类型的变量。8.根据权利要求6或7所述的装置,其中,所述等待窗口存放客户端所发送请求的标识号、函数接口以及服务端返回的响应包的数据。9.根据权利要求6或7所述的装置,其中,所述的响应包以协议的字节流形式返回,包括网络通信协议版本号、请求的标识号、返回消息的长度、返回的数据类型和返回的数据内容。10.根据权利要求6-9任一项所述的装置,还包括拥塞控制模块,具体还包括:队列设置模块,用于将客户端所有请求的数据结构设置成队列机制;滑动窗口和阈值设置模块,用于对所述队列的长度设置阈值,并在客户端设置滑动窗口,判断一定时间内队列的长度是否超过所述阈值,如果超过,则将先加入的请求放入滑动窗口;如果在所述阈值内,则将先加入的请求发送到服务端。

说明书

一种异步网络通信方法及装置

技术领域

本发明涉及网络通信技术,尤其涉及一种异步网络通信方法及装
置。

背景技术

操作系统中,执行一个任务所需要使用的处理器或微控制器的寄
存器等资源,称为任务的上下文。执行任务时,系统会根据需要挂起
或恢复任务,而在这过程中,寄存器等资源可能发生变化,为了保证
一个任务恢复时,其所用的资源与之前该任务处于挂起状态时相同,
需要保存该任务在挂起时的上下文,并在任务恢复时恢复其上下文,
称为上下文的切换。在现有的网络通信技术中,当前端用户的请求线
程越来越多时,通常需要在客户端的后台开启额外的线程来完成异步
通信,造成线程上下文频繁的切换,导致系统性能低下。

而且,在未建立对服务端的保护机制的情况下,当客户端的线程
不断地向服务端发出请求时,容易导致服务端的请求拥塞,从而影响
其他线程向服务端发出请求。

发明内容

本发明的目的是提供一种异步网络通信方法及装置,可以有效
以此降低线程上下文切换的频率,提高系统的性能。

根据本发明,所提供的异步网络通信方法,包括以下步骤:

针对客户端的每次请求,设置一个唯一的标识号;

设置一个等待窗口,将每次请求以相应的标识号为键,注册到等
待窗口中,并将每次请求的函数接口以所述标识号为键,放入等待窗
口;

针对客户端的每次请求,均由服务端返回相应的响应包,并将响
应包的数据以所述标识号为键,存入等待窗口;

解析所返回的响应包,获取其中的标识号,根据所获取的标识号,
将响应包中的数据传到相应的函数接口,由客户端进行相应操作。

根据本发明的另一个方面,还提供了一种异步网络通信装置,包
括以下模块:

标识设置模块,用于针对客户端的每次请求,设置一个唯一的标
识号;

等待窗口模块,用于注册以相应的标识号为键的每次请求和存储
以相应的标识号为键的每次请求的函数接口;

接收响应模块,针对客户端的每次请求而由服务端返回的相应响
应包,将其响应包的数据以所述标识号为键,存入等待窗口;

解析响应模块,用于解析所返回的响应包,获取其中的标识号,
根据所获取的标识号,将响应包中的数据传到相应的函数接口,由客
户端进行相应操作。

与现有技术相比,本发明具有以下优点:

1)可以有效降低线程上下文切换的频率,提高系统的性能;

2)可以显著提高服务端的并发响应能力,降低响应时间;

3)可以有效的进行负载控制提高系统可用性。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描
述,本发明的其它特征、目的和优点将会变得更明显:

图1为根据本发明一个优选实施例的异步网络通信方法流程图;
以及

图2为根据本发明的一个优选实施例的以回调函数和接收
(receive)函数为例的异步网络通信方法流程图。

具体实施方式

下面结合附图对本发明作进一步详细描述。

根据本发明的一个方面,提供了一种异步网络通信方法。需要说
明的是,本实施例中,可视客户端的每次请求为一次线程的处理,下
文将进行详细说明。

请参考图1,图1为根据本发明一个优选实施例的异步网络通信
方法流程图。

如图1所示,本发明所提供的异步网络通信方法包括以下步骤:

步骤S101,针对客户端的每次请求,设置一个唯一的标识号
(SessionID),也称为会话标识。Session(会话)机制是一种标识请
求上下文的机制,客户端使用一种类似于散列表的结构(也可能就是
使用散列表)来保存信息。

客户端每次发起一个新的请求时,都会创建一个唯一标识号
(SessionID),主要用来匹配客户端请求和服务器端的响应,SessionID
存储在等待窗口中。

具体地,客户端的请求包括各种类型,有的请求发送到服务端后,
无需服务端返回数据,如请求将数据添加到数据库,对于这种请求,
不需要在客户端的等待窗口中做相关的注册,客户端封装相应的请求
包发往服务端,服务端在接收到这种类型的请求后直接进行相关的处
理,结果无需返回.有的请求发送到服务端后,需要服务端返回数据,
如请求服务端统计当日发布数据的用户ID和所发布的数据内容,并
将统计的数据和发布的内容反馈给客户端,对于这种请求,对其定义
一个回调函数(callback函数),其中,callback函数包含本领域技术
人员通常所使用的含义,可以指通过函数指针调用的函数,例如把函
数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调
用它所指向的函数时,称为回调函数。再例如,给统计数据的请求定
义一个callback函数,则从服务端返回统计数据的结果时,将这个结
果传送到callback函数执行,以进行本请求需要处理的操作,如将统
计的结果以图表的方式进行展示。

综上,回调函数不是由该函数的实现方直接调用,而是在特定的
事件或条件发生时由另外的一方调用,用于对该事件或条件进行响
应。

对于客户端的每次请求,都对其设定一个唯一的标识号,该标识
号优选全局的、整数类型的变量。如上文所述,可将每次请求视为一
次线程的处理,而每个线程都有一个上下文,保存在线程的内核对象
中,这个上下文反映了请求执行的状态,当一个线程从挂起到恢复时,
需要恢复其上下文。由此,上文设定的标识号可以对每次请求的上下
文进行标识。

步骤S102,设置一个等待窗口(WaitWindow),将每次请求以
相应的标识号为键,并将需要处理请求所返回的数据的callback方法,
注册到等待窗口中。

具体地,等待窗口为一个窗口变量,其中,存储了客户端的一些
函数接口和服务端返回的数据。将每次请求以相应的标识号为键,注
册到等待窗口后,就可以根据标识号从等待窗口中获取相应的数据。
例如以时间为序,分别设置标识号1、2、3,以标识三个不同请求的
上下文,并将这三个请求注册到等待窗口后,就可以根据标识号从等
待窗口中获取相应的数据。

将每次请求注册到等待窗口的同时,将每次请求的函数接口也以
所述标识号为键,放入等待窗口。如上文所述,不同请求中所定义的
函数不同,如请求中定义的是callback函数,则将该请求注册到等待
窗口的同时,将该请求的callback函数接口放入等待窗口中,以等待
服务端返回该接口所需的数据。

步骤S103,针对客户端的每次请求,均由服务端返回相应的响
应包,并将响应包的数据以所述标识号为键,存入等待窗口。

具体地,客户端的请求正常到达服务端以后,由服务端进行相应
地处理,并将处理的结果返回给客户端,例如,请求服务端统计当日
的发帖量,则服务端统计完当日的发帖量后,将统计的结果返回给客
户端,当然,返回的内容中,除了统计结果,还有一些其他内容,如
网络通信协议版本号、请求的标识号(也就是SessionID)、返回消
息的长度、返回的数据类型、返回的数据内容等等。为了简明起见,
将所返回的内容定义为响应包,通常,响应包以协议的字节流形式返
回。

服务端返回响应包后,如果响应包正常到达,客户端从返回的响
应包中提取出SessionID和相关的数据,根据SessionID在等待窗口中
查找以SessionID为键的项,如果找到则调用该项的键值中相关的
Callback接口交接数据处理权。如果没有找到则丢弃数据。如果响应
包超时到达,则将所对应的窗口数据移除,并抛出超时异常,进行异
常处理。其中,将等待窗口中每一份与请求对应的数据称为窗口数据。

针对服务端返回响应包的状态信息,callback中定义了系列的事
件(event),事件的内容为:当服务端正常返回响应包时,根据相应
参数,通知客户端的相应线程进行操作,即该事件定义的是一个等待
服务端返回响应包和唤醒请求线程的过程。其中,event对象代表事
件的状态,比如服务端是否正常返回响应包。如上文所述,等待窗口
中存入了客户端所发送请求的标识号、函数接口,还有服务端返回的
响应包的数据。

步骤S104,解析所返回的响应包,获取其中的标识号,根据所
获取的标识号,将响应包中的数据传到相应的函数接口,由客户端进
行相应操作。

具体地,服务端返回响应包后,客户端对该响应包进行解析,将
相应的数据传到相应的请求线程。如上文所述,响应包中存在请求的
标识号。解析响应包时,获取其中的标识号,并找到与该标识号相同
的请求,将响应包中的数据从等待窗口中,以参数的形式传送到请求
线程中的函数接口,由函数执行相应地功能。即根据标识号,将窗口
数据传送到请求的线程,用于后续操作。

通常,将客户端和服务端的一次通信称为一次会话,如此,客户
端发送一个请求时,设置一个会话标识号,即上文提到的SessionID,
而服务端返回响应的数据时,同样,会带回一个会话标识号,通过带
回来的标识号,找到客户端中与该标识号相同的标识号,并将窗口数
据传送到该标识号的请求线程的函数接口,以进行后续操作。例如,
客户端发送一个统计当日发帖量的请求,设置本次会话的标识号为1,
如果服务端返回响应的数据中,其中的一个标识号为1,则将与标识
号1对应的窗口数据传送到标识号为1的线程的函数接口,以进行后
续操作。

需要说明的是,本实施例中,标识号与窗口数据是一一对应的,
即一个标识号对应一份窗口数据。

优选地,本实施例提供的异步网络通信方法还包括,对网络通信
的过程进行拥塞控制,具体包括以下步骤:

a)将客户端所有请求的数据结构设置成队列机制。

具体地,在本技术领域,队列是一种特殊的线性表,只允许在表
的前端进行删除操作,在表的后端进行插入操作。将客户端所有请求
的数据结构设置成队列机制,即发送时间较早的请求,排在队列的较
前端,通常越早由客户端进行处理。

b)对所述队列的长度设置一个阈值,并在客户端设置滑动窗
口,判断一定时间内队列的长度是否超过所述阈值,如果超过,则将
先加入的请求放入滑动窗口;如果在所述阈值内,则将先加入的请求
发送到服务端。

具体地,本实施例基于异步机制进行通信,换言之,客户端将请
求发送到服务端后,在未收到服务端返回的数据时,即将处理本请求
的线程进行其他的操作。由此,客户端可不断地向服务端发送请求,
一旦请求超过服务端的承受能力,就会造成服务端的数据拥塞。

为了解决数据拥塞问题,本发明在客户端设置滑动窗口,以控制
请求发送的时延。当然,滑动窗口所采用的拥塞控制算法可以为本技
术领域通用的算法。从客户端发送请求时,可通过滑动窗口,容许客
户端在接收任何响应之前传送附加的请求,滑动窗口的大小意味着服
务端还有多大的缓冲区可以用于接收请求,客户端也可以通过滑动窗
口的大小确定应该发送多少字节的请求数据。

为了使本实施例提供的异步网络通信方法更加明确,下文以回调
函数为例子进行具体说明,其中,还添加了拥塞控制机制。参照图2,
图2为根据本发明的一个优选实施例的以回调函数为例的异步网络通
信方法流程图。

根据图2,异步网络通信方法包括以下步骤:

步骤S201,客户端发起请求。

步骤S202,针对每次请求,设置一个唯一的标识号。

步骤S203,以标识号为键,将每次请求注册到等待窗口中。

步骤S204,将请求发往服务端之前,判断请求队列的长度是否
超过阈值,如果是,则进入步骤S205;如果不是,则进入步骤S206。

步骤S205,将请求放入滑动窗口中,通过拥塞控制算法控制发
送的时延。

步骤S206,将请求发往服务端。

步骤S207,服务端收到请求后,判断是否callback函数调用,如
果不是,则直接处理还返回数据,进入步骤S208;如果是,则将业
务逻辑处理结果和所述的标识号等相关信息封装后返回给客户端,进
入步骤S209。

步骤S208,处理具体的业务逻辑。

步骤S209,由客户端接收服务端发回的响应。

步骤S210,判断所接收的响应是否超时,如果是,进入步骤S211,
抛出异常,进行异常处理,结束该线程;如果不是,进入步骤S212,
进一步判断是否callback函数调用,如果是,进入步骤S213,调用
callback函数,进行相应处理,结束该线程。其中,callback函数可将
正常接收的数据返回给请求线程,也可以唤醒请求线程进行超时数据
的异常处理。

与现有技术相比,本发明所提供的异步网络通信方法具有以下优
点:

1)通过设置等待窗口和对每次请求设置标识号,使得异步通信
中,无需开启额外的线程进行异步处理,这大大降低了线程的上下文
切换频率,提高了系统响应的速度;

2)通过设置滑动窗口,可以对较好地解决服务端的数据拥塞问
题。

根据本发明的另一个方面,还提供了一种异步网络通信装置,包
括以下模块:

标识设置模块,用于针对客户端的每次请求,设置一个唯一的标
识号。

具体地,客户端的请求包括各种类型,有的请求发送到服务端后,
无需服务端返回数据,如请求将数据添加到数据库,对于这种请求,
不需要在客户端的等待窗口中做相关的注册,客户端封装相应的请求
包发往服务端,服务端在接收到这种类型的请求后直接进行相关的处
理,结果无需返回。有的请求发送到服务端后,需要服务端返回数据,
如请求服务端统计当日发布数据的用户ID和所发布的数据内容,并
将统计的数据和发布的内容反馈给客户端,对于这种请求,也对其定
义一个回调函数(callback函数),其中,callback函数包含本领域技
术人员通常所使用的含义,可以指通过函数指针调用的函数,例如把
函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为
调用它所指向的函数时,称为回调函数。再例如,给统计数据的请求
定义一个callback函数,则从服务端返回统计数据的结果时,将这个
结果传送到callback函数执行,以进行本请求需要处理的操作,如将
统计的结果以图表的方式进行展示。

综上,回调函数不是由该函数的实现方直接调用,而是在特定的
事件或条件发生时由另外的一方调用,用于对该事件或条件进行响
应。

对于客户端的每次请求,都由标识设置模块对其设定一个唯一的
标识号,该标识号优选全局的、整数类型的变量。如上文所述,可将
每次请求视为一次线程的处理,而每个线程都有一个上下文,保存在
线程的内核对象中,这个上下文反映了线程上一次执行时CPU的状
态,当一个线程从挂起到恢复时,需要恢复其上下文。由此,上文设
定的标识号可以对每次请求的上下文进行标识。

等待窗口模块,用于注册以相应的标识号为键的每次请求和存储
以相应的标识号为键的每次请求的函数接口。

具体地,等待窗口模块设置了等待窗口,等待窗口为一个窗口变
量,其中,存储了客户端的一些函数接口和服务端返回的数据。将每
次请求以相应的标识号为键,注册到等待窗口后,就可以根据标识号
从等待窗口中获取相应的数据。例如以时间为序,分别设置标识号1、
2、3,以标识三个不同请求的上下文,并将这三个请求注册到等待窗
口后,就可以根据标识号从等待窗口中获取相应的数据。

标识设置模块将每次请求注册到等待窗口的同时,由等待窗口模
块将每次请求的函数接口以所述标识号为键,放入等待窗口。如上文
所述,不同请求中所定义的函数不同,如请求中定义的是callback函
数,则将该请求注册到等待窗口的同时,将该请求的callback函数接
口放入等待窗口中,以等待服务端返回该接口所需的数据。

接收响应模块,针对客户端的每次请求而由服务端返回的相应响
应包,将其响应包的数据以所述标识号为键,存入等待窗口。

具体地,客户端的请求正常到达服务端以后,由服务端进行相应
地处理,并将处理的结果返回给客户端,例如,请求服务端统计当日
的发帖量,则服务端统计完当日的发帖量后,将统计的结果返回给客
户端,当然,返回的内容中,除了统计结果,还有一些其他内容,如
网络通信协议版本号、请求的标识号、返回消息的长度、返回的数据
类型、返回的数据内容、方法执行结果状态等等。为了简明起见,将
所返回的内容定义为响应包,通常,响应包以协议的字节流形式返回。
服务端返回响应包后,如果响应包正常到达,服务器返回数据后客户
端接收并从数据中提取SessionId,根据SessionId在等待窗口中查找以
SessionId为键的项,如果找到则调用该项Value中相关的Callback接
口交接数据处理权。如果没有找到则丢弃数据。如果响应包超时到达,
则抛出异常,进行异常处理。其中,将等待窗口中每一份与请求对应
的数据称为窗口数据。

针对服务端返回响应包的状态信息,callback中定义了系列的事
件(event),事件的内容为:当服务端正常返回响应包时,根据相应
参数,通知客户端的相应线程进行操作,即该事件定义的是一个等待
服务端返回响应包和唤醒请求线程的过程。其中,event对象代表事
件的状态,比如服务端是否正常返回响应包。如上文所述,等待窗口
中存入了客户端所发送请求的标识号、函数接口,还有服务端返回的
响应包的数据。

解析响应模块,用于解析所返回的响应包,获取其中的标识号,
根据所获取的标识号,将响应包中的数据传到相应的函数接口,由客
户端进行相应操作。

具体地,服务端返回响应包后,客户端对该响应包进行解析,将
相应的数据传到相应的请求线程。如上文所述,响应包中存在请求的
标识号。解析响应包时,获取其中的标识号,并找到与该标识号相同
的请求,将响应包中的数据从等待窗口中,以参数的形式传送到请求
线程中的函数接口,由函数执行相应地功能。即根据标识号,将窗口
数据传送到请求的线程,用于后续操作。

通常,将客户端和服务端的一次通信称为一次会话,如此,客户
端发送一个请求时,设置一个会话标识号,即上文提到的SessionID,
而服务端返回响应的数据时,同样,会带回一个会话标识号,通过带
回来的标识号,找到客户端中与该标识号相同的标识号,并将窗口数
据传送到该标识号的请求线程的函数接口,以进行后续操作。例如,
客户端发送一个统计当日发帖量的请求,设置本次会话的标识号为1,
如果服务端返回响应的数据中,其中的一个标识号为1,则将与标识
号1对应的窗口数据传送到标识号为1的线程的函数接口,以进行后
续操作。

需要说明的是,本实施例中,标识号与窗口数据是一一对应的,
即一个标识号对应一份窗口数据。

优选地,本实施例提供的异步网络通信装置还包括拥塞控制模
块,用于对网络通信的过程进行拥塞控制。拥塞控制模块具体还包括:

队列设置模块,用于将客户端所有请求的数据结构设置成队列机
制。

具体地,在本技术领域,队列是一种特殊的线性表,只允许在表
的前端进行删除操作,在表的后端进行插入操作。将客户端所有请求
的数据结构设置成队列机制,即发送时间较早的请求,排在队列的较
前端,通常越早由客户端进行处理。

滑动窗口和阈值设置模块,用于对所述队列的长度设置阈值,并
在客户端设置滑动窗口,判断一定时间内队列的长度是否超过所述阈
值,如果超过,则将先加入的请求放入滑动窗口;如果在所述阈值内,
则将先加入的请求发送到服务端。

具体地,本实施例基于异步机制进行通信,换言之,客户端将请
求发送到服务端后,在未收到服务端返回的数据时,即将处理本请求
的线程进行其他的操作。由此,客户端可不断地向服务端发送请求,
一旦请求超过服务端的承受能力,就会造成服务端的数据拥塞。

为了解决数据拥塞问题,在客户端设置滑动窗口,以控制请求发
送的时延。当然,滑动窗口所采用的拥塞控制算法可以为本技术领域
通用的算法。从客户端发送请求时,可通过滑动窗口,容许客户端在
接收任何响应之前传送附加的请求,滑动窗口的大小意味着服务端还
有多大的缓冲区可以用于接收请求,客户端也可以通过滑动窗口的大
小确定应该发送多少字节的请求数据。

本发明所提供的异步网络通信装置具有以下优点:

1)通过设置等待窗口和对每次请求设置标识号,使得异步通信
中,无需开启额外的线程进行异步处理,这大大降低了线程的上下文
切换频率,提高了系统响应的速度;

2)通过设置滑动窗口,可以对较好地解决服务端的数据拥塞问
题。

3)本发明较好地解决了线程的上下文切换和数据拥塞的问题,
提高了系统的性能。

以上所揭露的仅为本发明的几种较佳实施例而已,当然不能以此
来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,
仍属本发明所涵盖的范围。

一种异步网络通信方法及装置.pdf_第1页
第1页 / 共12页
一种异步网络通信方法及装置.pdf_第2页
第2页 / 共12页
一种异步网络通信方法及装置.pdf_第3页
第3页 / 共12页
点击查看更多>>
资源描述

《一种异步网络通信方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种异步网络通信方法及装置.pdf(12页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102801737 A (43)申请公布日 2012.11.28 CN 102801737 A *CN102801737A* (21)申请号 201210311584.5 (22)申请日 2012.08.28 H04L 29/06(2006.01) (71)申请人 北京城市网邻信息技术有限公司 地址 100012 北京市朝阳区北苑路乙 108 号 北美国际商务中心 (72)发明人 刘晓飞 陈春 (74)专利代理机构 北京汉昊知识产权代理事务 所 ( 普通合伙 ) 11370 代理人 朱海波 (54) 发明名称 一种异步网络通信方法及装置 (57) 摘要 本发明提供了一。

2、种异步网络通信方法, 包括 以下步骤 : 针对客户端的每次请求, 设置一个唯 一的标识号 ; 设置一个等待窗口, 将每次请求以 相应的标识号为键, 注册到等待窗口中, 并将每次 请求的函数接口以所述标识号为键, 放入等待窗 口 ; 针对客户端的每次请求, 均由服务端返回相 应的响应包, 并将响应包的数据以所述标识号为 键, 存入等待窗口 ; 解析所返回的响应包, 获取其 中的标识号, 根据所获取的标识号, 将响应包中的 数据传到相应的函数接口, 由客户端进行相应操 作。 本发明有效降低了线程上下文切换的频率, 提 高了系统的性能。 (51)Int.Cl. 权利要求书 2 页 说明书 7 页 附。

3、图 2 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 7 页 附图 2 页 1/2 页 2 1. 一种异步网络通信方法, 包括以下步骤 : 针对客户端的每次请求, 设置一个唯一的标识号 ; 设置一个等待窗口, 将每次请求以相应的标识号为键, 注册到等待窗口中, 并将需要处 理请求所返回的数据的回调方法注册到等待窗口中 ; 针对客户端的每次请求, 均由服务端返回相应的响应包, 并将响应包的数据以所述标 识号为键, 存入等待窗口 ; 解析所返回的响应包, 获取其中的标识号, 根据所获取的标识号, 将响应包中的数据传 到相应的函数接口, 由客户端进行相应。

4、操作。 2. 根据权利要求 1 所述的方法, 其中, 所述标识号为全局变量 ; 所述等待窗口存放客户 端所发送请求的标识号、 函数接口以及服务端返回的响应包的数据。 3. 根据权利要求 1 所述的方法, 其中, 所述的响应包以协议的字节流形式返回, 其中包 括网络通信协议版本号、 请求的标识号、 返回消息的长度、 返回的数据类型和返回的数据内 容。 4. 根据权利要求 1-3 任一项所述的方法, 还包括以下步骤 : 将客户端所有请求的数据结构设置成队列机制 ; 对所述队列的长度设置一个阈值, 并在客户端设置滑动窗口, 判断一定时间内队列的 长度是否超过所述阈值, 如果超过, 则将先加入的请求放。

5、入滑动窗口 ; 如果在所述阈值内, 则将先加入的请求发送到服务端。 5. 根据权利要求 4 所述的方法, 其中还包括以下步骤 : 服务端收到请求后, 判断是否回调函数调用 ; 如果是回调函数调用, 则将业务逻辑处理结果和所述的标识号以及相关信息返回给客 户端, 否则直接处理还返回数据。 6. 一种异步网络通信装置, 包括以下模块 : 标识设置模块, 用于针对客户端的每次请求, 设置一个唯一的标识号 ; 等待窗口模块, 用于注册以相应的标识号为键的每次请求和注册需要处理请求所返回 的数据的回调方法 ; 接收响应模块, 针对客户端的每次请求而由服务端返回的相应响应包, 将其响应包的 数据以所述标识。

6、号为键, 存入等待窗口 ; 解析响应模块, 用于解析所返回的响应包, 获取其中的标识号, 根据所获取的标识号, 将响应包中的数据传到相应的函数接口, 由客户端进行相应操作。 7. 根据权利要求 6 所述的装置, 其中, 所述标识号为全局的、 整数类型的变量。 8.根据权利要求6或7所述的装置, 其中, 所述等待窗口存放客户端所发送请求的标识 号、 函数接口以及服务端返回的响应包的数据。 9. 根据权利要求 6 或 7 所述的装置, 其中, 所述的响应包以协议的字节流形式返回, 包 括网络通信协议版本号、 请求的标识号、 返回消息的长度、 返回的数据类型和返回的数据内 容。 10. 根据权利要求。

7、 6-9 任一项所述的装置, 还包括拥塞控制模块, 具体还包括 : 队列设置模块, 用于将客户端所有请求的数据结构设置成队列机制 ; 滑动窗口和阈值设置模块, 用于对所述队列的长度设置阈值, 并在客户端设置滑动窗 权 利 要 求 书 CN 102801737 A 2 2/2 页 3 口, 判断一定时间内队列的长度是否超过所述阈值, 如果超过, 则将先加入的请求放入滑动 窗口 ; 如果在所述阈值内, 则将先加入的请求发送到服务端。 权 利 要 求 书 CN 102801737 A 3 1/7 页 4 一种异步网络通信方法及装置 技术领域 0001 本发明涉及网络通信技术, 尤其涉及一种异步网络通。

8、信方法及装置。 背景技术 0002 操作系统中, 执行一个任务所需要使用的处理器或微控制器的寄存器等资源, 称 为任务的上下文。执行任务时, 系统会根据需要挂起或恢复任务, 而在这过程中, 寄存器等 资源可能发生变化, 为了保证一个任务恢复时, 其所用的资源与之前该任务处于挂起状态 时相同, 需要保存该任务在挂起时的上下文, 并在任务恢复时恢复其上下文, 称为上下文的 切换。 在现有的网络通信技术中, 当前端用户的请求线程越来越多时, 通常需要在客户端的 后台开启额外的线程来完成异步通信, 造成线程上下文频繁的切换, 导致系统性能低下。 0003 而且, 在未建立对服务端的保护机制的情况下, 。

9、当客户端的线程不断地向服务端 发出请求时, 容易导致服务端的请求拥塞, 从而影响其他线程向服务端发出请求。 发明内容 0004 本发明的目的是提供一种异步网络通信方法及装置, 可以有效以此降低线程上下 文切换的频率, 提高系统的性能。 0005 根据本发明, 所提供的异步网络通信方法, 包括以下步骤 : 0006 针对客户端的每次请求, 设置一个唯一的标识号 ; 0007 设置一个等待窗口, 将每次请求以相应的标识号为键, 注册到等待窗口中, 并将每 次请求的函数接口以所述标识号为键, 放入等待窗口 ; 0008 针对客户端的每次请求, 均由服务端返回相应的响应包, 并将响应包的数据以所 述标。

10、识号为键, 存入等待窗口 ; 0009 解析所返回的响应包, 获取其中的标识号, 根据所获取的标识号, 将响应包中的数 据传到相应的函数接口, 由客户端进行相应操作。 0010 根据本发明的另一个方面, 还提供了一种异步网络通信装置, 包括以下模块 : 0011 标识设置模块, 用于针对客户端的每次请求, 设置一个唯一的标识号 ; 0012 等待窗口模块, 用于注册以相应的标识号为键的每次请求和存储以相应的标识号 为键的每次请求的函数接口 ; 0013 接收响应模块, 针对客户端的每次请求而由服务端返回的相应响应包, 将其响应 包的数据以所述标识号为键, 存入等待窗口 ; 0014 解析响应模。

11、块, 用于解析所返回的响应包, 获取其中的标识号, 根据所获取的标识 号, 将响应包中的数据传到相应的函数接口, 由客户端进行相应操作。 0015 与现有技术相比, 本发明具有以下优点 : 0016 1) 可以有效降低线程上下文切换的频率, 提高系统的性能 ; 0017 2) 可以显著提高服务端的并发响应能力, 降低响应时间 ; 0018 3) 可以有效的进行负载控制提高系统可用性。 说 明 书 CN 102801737 A 4 2/7 页 5 附图说明 0019 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述, 本发明的其它 特征、 目的和优点将会变得更明显 : 0020 图 1 。

12、为根据本发明一个优选实施例的异步网络通信方法流程图 ; 以及 0021 图 2 为根据本发明的一个优选实施例的以回调函数和接收 (receive) 函数为例的 异步网络通信方法流程图。 具体实施方式 0022 下面结合附图对本发明作进一步详细描述。 0023 根据本发明的一个方面, 提供了一种异步网络通信方法。 需要说明的是, 本实施例 中, 可视客户端的每次请求为一次线程的处理, 下文将进行详细说明。 0024 请参考图 1, 图 1 为根据本发明一个优选实施例的异步网络通信方法流程图。 0025 如图 1 所示, 本发明所提供的异步网络通信方法包括以下步骤 : 0026 步骤 S101, 。

13、针对客户端的每次请求, 设置一个唯一的标识号 (SessionID) , 也称为 会话标识。Session(会话) 机制是一种标识请求上下文的机制, 客户端使用一种类似于散 列表的结构 (也可能就是使用散列表) 来保存信息。 0027 客户端每次发起一个新的请求时, 都会创建一个唯一标识号 (SessionID), 主要用 来匹配客户端请求和服务器端的响应, SessionID 存储在等待窗口中。 0028 具体地, 客户端的请求包括各种类型, 有的请求发送到服务端后, 无需服务端返回 数据, 如请求将数据添加到数据库, 对于这种请求, 不需要在客户端的等待窗口中做相关的 注册, 客户端封装相。

14、应的请求包发往服务端, 服务端在接收到这种类型的请求后直接进行 相关的处理, 结果无需返回有的请求发送到服务端后, 需要服务端返回数据, 如请求服务 端统计当日发布数据的用户 ID 和所发布的数据内容, 并将统计的数据和发布的内容反馈 给客户端, 对于这种请求, 对其定义一个回调函数 (callback 函数) , 其中, callback 函数包 含本领域技术人员通常所使用的含义, 可以指通过函数指针调用的函数, 例如把函数的指 针 (地址) 作为参数传递给另一个函数, 当这个指针被用为调用它所指向的函数时, 称为回 调函数。再例如, 给统计数据的请求定义一个 callback 函数, 则从。

15、服务端返回统计数据的 结果时, 将这个结果传送到 callback 函数执行, 以进行本请求需要处理的操作, 如将统计 的结果以图表的方式进行展示。 0029 综上, 回调函数不是由该函数的实现方直接调用, 而是在特定的事件或条件发生 时由另外的一方调用, 用于对该事件或条件进行响应。 0030 对于客户端的每次请求, 都对其设定一个唯一的标识号, 该标识号优选全局的、 整 数类型的变量。 如上文所述, 可将每次请求视为一次线程的处理, 而每个线程都有一个上下 文, 保存在线程的内核对象中, 这个上下文反映了请求执行的状态, 当一个线程从挂起到恢 复时, 需要恢复其上下文。由此, 上文设定的标。

16、识号可以对每次请求的上下文进行标识。 0031 步骤 S102, 设置一个等待窗口 (WaitWindow) , 将每次请求以相应的标识号为键, 并将需要处理请求所返回的数据的 callback 方法, 注册到等待窗口中。 0032 具体地, 等待窗口为一个窗口变量, 其中, 存储了客户端的一些函数接口和服务端 说 明 书 CN 102801737 A 5 3/7 页 6 返回的数据。 将每次请求以相应的标识号为键, 注册到等待窗口后, 就可以根据标识号从等 待窗口中获取相应的数据。例如以时间为序, 分别设置标识号 1、 2、 3, 以标识三个不同请求 的上下文, 并将这三个请求注册到等待窗口。

17、后, 就可以根据标识号从等待窗口中获取相应 的数据。 0033 将每次请求注册到等待窗口的同时, 将每次请求的函数接口也以所述标识号 为键, 放入等待窗口。如上文所述, 不同请求中所定义的函数不同, 如请求中定义的是 callback 函数, 则将该请求注册到等待窗口的同时, 将该请求的 callback 函数接口放入等 待窗口中, 以等待服务端返回该接口所需的数据。 0034 步骤 S103, 针对客户端的每次请求, 均由服务端返回相应的响应包, 并将响应包的 数据以所述标识号为键, 存入等待窗口。 0035 具体地, 客户端的请求正常到达服务端以后, 由服务端进行相应地处理, 并将处理 的。

18、结果返回给客户端, 例如, 请求服务端统计当日的发帖量, 则服务端统计完当日的发帖量 后, 将统计的结果返回给客户端, 当然, 返回的内容中, 除了统计结果, 还有一些其他内容, 如网络通信协议版本号、 请求的标识号 (也就是 SessionID) 、 返回消息的长度、 返回的数据 类型、 返回的数据内容等等。 为了简明起见, 将所返回的内容定义为响应包, 通常, 响应包以 协议的字节流形式返回。 0036 服务端返回响应包后, 如果响应包正常到达, 客户端从返回的响应包中提取出 SessionID 和相关的数据, 根据 SessionID 在等待窗口中查找以 SessionID 为键的项, 。

19、如果 找到则调用该项的键值中相关的 Callback 接口交接数据处理权。如果没有找到则丢弃数 据。 如果响应包超时到达, 则将所对应的窗口数据移除, 并抛出超时异常, 进行异常处理。 其 中, 将等待窗口中每一份与请求对应的数据称为窗口数据。 0037 针对服务端返回响应包的状态信息, callback 中定义了系列的事件 (event) , 事 件的内容为 : 当服务端正常返回响应包时, 根据相应参数, 通知客户端的相应线程进行操 作, 即该事件定义的是一个等待服务端返回响应包和唤醒请求线程的过程。其中, event 对 象代表事件的状态, 比如服务端是否正常返回响应包。 如上文所述, 等。

20、待窗口中存入了客户 端所发送请求的标识号、 函数接口, 还有服务端返回的响应包的数据。 0038 步骤 S104, 解析所返回的响应包, 获取其中的标识号, 根据所获取的标识号, 将响 应包中的数据传到相应的函数接口, 由客户端进行相应操作。 0039 具体地, 服务端返回响应包后, 客户端对该响应包进行解析, 将相应的数据传到相 应的请求线程。如上文所述, 响应包中存在请求的标识号。解析响应包时, 获取其中的标识 号, 并找到与该标识号相同的请求, 将响应包中的数据从等待窗口中, 以参数的形式传送到 请求线程中的函数接口, 由函数执行相应地功能。 即根据标识号, 将窗口数据传送到请求的 线程。

21、, 用于后续操作。 0040 通常, 将客户端和服务端的一次通信称为一次会话, 如此, 客户端发送一个请求 时, 设置一个会话标识号, 即上文提到的 SessionID, 而服务端返回响应的数据时, 同样, 会 带回一个会话标识号, 通过带回来的标识号, 找到客户端中与该标识号相同的标识号, 并将 窗口数据传送到该标识号的请求线程的函数接口, 以进行后续操作。 例如, 客户端发送一个 统计当日发帖量的请求, 设置本次会话的标识号为 1, 如果服务端返回响应的数据中, 其中 的一个标识号为 1, 则将与标识号 1 对应的窗口数据传送到标识号为 1 的线程的函数接口, 说 明 书 CN 10280。

22、1737 A 6 4/7 页 7 以进行后续操作。 0041 需要说明的是, 本实施例中, 标识号与窗口数据是一一对应的, 即一个标识号对应 一份窗口数据。 0042 优选地, 本实施例提供的异步网络通信方法还包括, 对网络通信的过程进行拥塞 控制, 具体包括以下步骤 : 0043 a) 将客户端所有请求的数据结构设置成队列机制。 0044 具体地, 在本技术领域, 队列是一种特殊的线性表, 只允许在表的前端进行删除操 作, 在表的后端进行插入操作。 将客户端所有请求的数据结构设置成队列机制, 即发送时间 较早的请求, 排在队列的较前端, 通常越早由客户端进行处理。 0045 b) 对所述队列。

23、的长度设置一个阈值, 并在客户端设置滑动窗口, 判断一定时间内 队列的长度是否超过所述阈值, 如果超过, 则将先加入的请求放入滑动窗口 ; 如果在所述阈 值内, 则将先加入的请求发送到服务端。 0046 具体地, 本实施例基于异步机制进行通信, 换言之, 客户端将请求发送到服务端 后, 在未收到服务端返回的数据时, 即将处理本请求的线程进行其他的操作。由此, 客户端 可不断地向服务端发送请求, 一旦请求超过服务端的承受能力, 就会造成服务端的数据拥 塞。 0047 为了解决数据拥塞问题, 本发明在客户端设置滑动窗口, 以控制请求发送的时延。 当然, 滑动窗口所采用的拥塞控制算法可以为本技术领域。

24、通用的算法。从客户端发送请求 时, 可通过滑动窗口, 容许客户端在接收任何响应之前传送附加的请求, 滑动窗口的大小意 味着服务端还有多大的缓冲区可以用于接收请求, 客户端也可以通过滑动窗口的大小确定 应该发送多少字节的请求数据。 0048 为了使本实施例提供的异步网络通信方法更加明确, 下文以回调函数为例子进行 具体说明, 其中, 还添加了拥塞控制机制。 参照图2, 图2为根据本发明的一个优选实施例的 以回调函数为例的异步网络通信方法流程图。 0049 根据图 2, 异步网络通信方法包括以下步骤 : 0050 步骤 S201, 客户端发起请求。 0051 步骤 S202, 针对每次请求, 设置。

25、一个唯一的标识号。 0052 步骤 S203, 以标识号为键, 将每次请求注册到等待窗口中。 0053 步骤 S204, 将请求发往服务端之前, 判断请求队列的长度是否超过阈值, 如果是, 则进入步骤 S205 ; 如果不是, 则进入步骤 S206。 0054 步骤 S205, 将请求放入滑动窗口中, 通过拥塞控制算法控制发送的时延。 0055 步骤 S206, 将请求发往服务端。 0056 步骤 S207, 服务端收到请求后, 判断是否 callback 函数调用, 如果不是, 则直接处 理还返回数据, 进入步骤 S208 ; 如果是, 则将业务逻辑处理结果和所述的标识号等相关信 息封装后返。

26、回给客户端, 进入步骤 S209。 0057 步骤 S208, 处理具体的业务逻辑。 0058 步骤 S209, 由客户端接收服务端发回的响应。 0059 步骤 S210, 判断所接收的响应是否超时, 如果是, 进入步骤 S211, 抛出异常, 进行 异常处理, 结束该线程 ; 如果不是, 进入步骤 S212, 进一步判断是否 callback 函数调用, 如 说 明 书 CN 102801737 A 7 5/7 页 8 果是, 进入步骤 S213, 调用 callback 函数, 进行相应处理, 结束该线程。其中, callback 函 数可将正常接收的数据返回给请求线程, 也可以唤醒请求线。

27、程进行超时数据的异常处理。 0060 与现有技术相比, 本发明所提供的异步网络通信方法具有以下优点 : 0061 1) 通过设置等待窗口和对每次请求设置标识号, 使得异步通信中, 无需开启额外 的线程进行异步处理, 这大大降低了线程的上下文切换频率, 提高了系统响应的速度 ; 0062 2) 通过设置滑动窗口, 可以对较好地解决服务端的数据拥塞问题。 0063 根据本发明的另一个方面, 还提供了一种异步网络通信装置, 包括以下模块 : 0064 标识设置模块, 用于针对客户端的每次请求, 设置一个唯一的标识号。 0065 具体地, 客户端的请求包括各种类型, 有的请求发送到服务端后, 无需服务。

28、端返回 数据, 如请求将数据添加到数据库, 对于这种请求, 不需要在客户端的等待窗口中做相关的 注册, 客户端封装相应的请求包发往服务端, 服务端在接收到这种类型的请求后直接进行 相关的处理, 结果无需返回。有的请求发送到服务端后, 需要服务端返回数据, 如请求服务 端统计当日发布数据的用户 ID 和所发布的数据内容, 并将统计的数据和发布的内容反馈 给客户端, 对于这种请求, 也对其定义一个回调函数 (callback 函数) , 其中, callback 函数 包含本领域技术人员通常所使用的含义, 可以指通过函数指针调用的函数, 例如把函数的 指针 (地址) 作为参数传递给另一个函数, 当。

29、这个指针被用为调用它所指向的函数时, 称为 回调函数。再例如, 给统计数据的请求定义一个 callback 函数, 则从服务端返回统计数据 的结果时, 将这个结果传送到 callback 函数执行, 以进行本请求需要处理的操作, 如将统 计的结果以图表的方式进行展示。 0066 综上, 回调函数不是由该函数的实现方直接调用, 而是在特定的事件或条件发生 时由另外的一方调用, 用于对该事件或条件进行响应。 0067 对于客户端的每次请求, 都由标识设置模块对其设定一个唯一的标识号, 该标识 号优选全局的、 整数类型的变量。如上文所述, 可将每次请求视为一次线程的处理, 而每个 线程都有一个上下文。

30、, 保存在线程的内核对象中, 这个上下文反映了线程上一次执行时 CPU 的状态, 当一个线程从挂起到恢复时, 需要恢复其上下文。由此, 上文设定的标识号可以对 每次请求的上下文进行标识。 0068 等待窗口模块, 用于注册以相应的标识号为键的每次请求和存储以相应的标识号 为键的每次请求的函数接口。 0069 具体地, 等待窗口模块设置了等待窗口, 等待窗口为一个窗口变量, 其中, 存储了 客户端的一些函数接口和服务端返回的数据。将每次请求以相应的标识号为键, 注册到等 待窗口后, 就可以根据标识号从等待窗口中获取相应的数据。 例如以时间为序, 分别设置标 识号 1、 2、 3, 以标识三个不同。

31、请求的上下文, 并将这三个请求注册到等待窗口后, 就可以根 据标识号从等待窗口中获取相应的数据。 0070 标识设置模块将每次请求注册到等待窗口的同时, 由等待窗口模块将每次请求 的函数接口以所述标识号为键, 放入等待窗口。如上文所述, 不同请求中所定义的函数不 同, 如请求中定义的是 callback 函数, 则将该请求注册到等待窗口的同时, 将该请求的 callback 函数接口放入等待窗口中, 以等待服务端返回该接口所需的数据。 0071 接收响应模块, 针对客户端的每次请求而由服务端返回的相应响应包, 将其响应 包的数据以所述标识号为键, 存入等待窗口。 说 明 书 CN 102801。

32、737 A 8 6/7 页 9 0072 具体地, 客户端的请求正常到达服务端以后, 由服务端进行相应地处理, 并将处理 的结果返回给客户端, 例如, 请求服务端统计当日的发帖量, 则服务端统计完当日的发帖量 后, 将统计的结果返回给客户端, 当然, 返回的内容中, 除了统计结果, 还有一些其他内容, 如网络通信协议版本号、 请求的标识号、 返回消息的长度、 返回的数据类型、 返回的数据内 容、 方法执行结果状态等等。 为了简明起见, 将所返回的内容定义为响应包, 通常, 响应包以 协议的字节流形式返回。 服务端返回响应包后, 如果响应包正常到达, 服务器返回数据后客 户端接收并从数据中提取 。

33、SessionId, 根据 SessionId 在等待窗口中查找以 SessionId 为 键的项, 如果找到则调用该项 Value 中相关的 Callback 接口交接数据处理权。如果没有找 到则丢弃数据。如果响应包超时到达, 则抛出异常, 进行异常处理。其中, 将等待窗口中每 一份与请求对应的数据称为窗口数据。 0073 针对服务端返回响应包的状态信息, callback 中定义了系列的事件 (event) , 事 件的内容为 : 当服务端正常返回响应包时, 根据相应参数, 通知客户端的相应线程进行操 作, 即该事件定义的是一个等待服务端返回响应包和唤醒请求线程的过程。其中, event 。

34、对 象代表事件的状态, 比如服务端是否正常返回响应包。 如上文所述, 等待窗口中存入了客户 端所发送请求的标识号、 函数接口, 还有服务端返回的响应包的数据。 0074 解析响应模块, 用于解析所返回的响应包, 获取其中的标识号, 根据所获取的标识 号, 将响应包中的数据传到相应的函数接口, 由客户端进行相应操作。 0075 具体地, 服务端返回响应包后, 客户端对该响应包进行解析, 将相应的数据传到相 应的请求线程。如上文所述, 响应包中存在请求的标识号。解析响应包时, 获取其中的标识 号, 并找到与该标识号相同的请求, 将响应包中的数据从等待窗口中, 以参数的形式传送到 请求线程中的函数接。

35、口, 由函数执行相应地功能。 即根据标识号, 将窗口数据传送到请求的 线程, 用于后续操作。 0076 通常, 将客户端和服务端的一次通信称为一次会话, 如此, 客户端发送一个请求 时, 设置一个会话标识号, 即上文提到的 SessionID, 而服务端返回响应的数据时, 同样, 会 带回一个会话标识号, 通过带回来的标识号, 找到客户端中与该标识号相同的标识号, 并将 窗口数据传送到该标识号的请求线程的函数接口, 以进行后续操作。 例如, 客户端发送一个 统计当日发帖量的请求, 设置本次会话的标识号为 1, 如果服务端返回响应的数据中, 其中 的一个标识号为 1, 则将与标识号 1 对应的窗。

36、口数据传送到标识号为 1 的线程的函数接口, 以进行后续操作。 0077 需要说明的是, 本实施例中, 标识号与窗口数据是一一对应的, 即一个标识号对应 一份窗口数据。 0078 优选地, 本实施例提供的异步网络通信装置还包括拥塞控制模块, 用于对网络通 信的过程进行拥塞控制。拥塞控制模块具体还包括 : 0079 队列设置模块, 用于将客户端所有请求的数据结构设置成队列机制。 0080 具体地, 在本技术领域, 队列是一种特殊的线性表, 只允许在表的前端进行删除操 作, 在表的后端进行插入操作。 将客户端所有请求的数据结构设置成队列机制, 即发送时间 较早的请求, 排在队列的较前端, 通常越早。

37、由客户端进行处理。 0081 滑动窗口和阈值设置模块, 用于对所述队列的长度设置阈值, 并在客户端设置滑 动窗口, 判断一定时间内队列的长度是否超过所述阈值, 如果超过, 则将先加入的请求放入 说 明 书 CN 102801737 A 9 7/7 页 10 滑动窗口 ; 如果在所述阈值内, 则将先加入的请求发送到服务端。 0082 具体地, 本实施例基于异步机制进行通信, 换言之, 客户端将请求发送到服务端 后, 在未收到服务端返回的数据时, 即将处理本请求的线程进行其他的操作。由此, 客户端 可不断地向服务端发送请求, 一旦请求超过服务端的承受能力, 就会造成服务端的数据拥 塞。 0083 。

38、为了解决数据拥塞问题, 在客户端设置滑动窗口, 以控制请求发送的时延。当然, 滑动窗口所采用的拥塞控制算法可以为本技术领域通用的算法。从客户端发送请求时, 可 通过滑动窗口, 容许客户端在接收任何响应之前传送附加的请求, 滑动窗口的大小意味着 服务端还有多大的缓冲区可以用于接收请求, 客户端也可以通过滑动窗口的大小确定应该 发送多少字节的请求数据。 0084 本发明所提供的异步网络通信装置具有以下优点 : 0085 1) 通过设置等待窗口和对每次请求设置标识号, 使得异步通信中, 无需开启额外 的线程进行异步处理, 这大大降低了线程的上下文切换频率, 提高了系统响应的速度 ; 0086 2) 通过设置滑动窗口, 可以对较好地解决服务端的数据拥塞问题。 0087 3) 本发明较好地解决了线程的上下文切换和数据拥塞的问题, 提高了系统的性 能。 0088 以上所揭露的仅为本发明的几种较佳实施例而已, 当然不能以此来限定本发明之 权利范围, 因此依本发明权利要求所作的等同变化, 仍属本发明所涵盖的范围。 说 明 书 CN 102801737 A 10 1/2 页 11 图 1 说 明 书 附 图 CN 102801737 A 11 2/2 页 12 图 2 说 明 书 附 图 CN 102801737 A 12 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1