通信处理方法及装置与流程

文档序号:12730124阅读:191来源:国知局
通信处理方法及装置与流程

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



背景技术:

网络服务器根据超文本传输协议解析客户端的请求,通过公共网关接口程序对请求进行响应,一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序,或者一些其它的服务器端技术以产生一个响应(response)来让浏览器可以浏览。

在上述过程中,客户端与网络服务器的进程建立短连接,通过短连接向网络服务器的进程发送请求,接收网络服务器返回的携带处理结果的响应。

客户端与网络服务器的进程之间通过建立短连接的方式发送调用公共网关接口程序的请求,也就是说,客户端在需要向网络服务器的进程发送请求时才与网络服务器的进程建立连接并发送请求,客户端通过短连接在获得网络服务器的进程返回的针对请求的处理结果后,客户端与网络服务器之间即释放连接,可见,连接仅用于客户端与网络服务器的进程之间的一次业务的数据传输。

客户端与网络服务器的进程之间的这种业务处理方式存在以下问题:

1)网络服务器为了支持大量客户端的业务,需要与客户端之间频繁建立短连接以供客户端调用公共网关接口程序并释放无用的短连接,处理效率低,造成了对网络服务器资源的大量占用;

2)客户端向网络服务器频繁传输的请求,会占用客户端与网络服务器之间的大量通信带宽。

综上所述,对于提升客户端向网络服务器发起请求的效率、并节约网络服务器与客户端之间的通信带宽,相关技术尚无有效解决方案。



技术实现要素:

本发明实施例提供一种通信处理方法及装置,能够提升客户端向网络服务器发起请求的效率、节约网络服务器与客户端之间的通信带宽。

本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供一种通信处理方法,包括:

在网络服务器侧与各客户端之间分别建立基于网络套接字的连接,保持与每个所述客户端之间所建立的连接;

通过所述连接接收相应客户端所发送的请求,每个所述请求中携带公共网关接口程序的统一资源定位符、以及请求主体;

基于所述统一资源定位符、以及从所述连接中提取的信息而构造的请求头部,构造请求对象;

将所述请求对象以及构造的响应对象传递给所述公共网关接口程序,从所述响应对象中获取所述公共网关接口程序的处理结果;

基于使用所述处理结果而构造的响应主体构造针对所述请求的响应,通过所述连接向相应的客户端返回所述响应。

第二方面,本发明实施例提供一种通信处理装置,包括:

连接单元,用于在网络服务器侧与各客户端之间分别建立基于网络套接字的连接,保持与每个所述客户端之间所建立的连接;

接收单元,用于通过所述连接接收相应客户端所发送的请求,每个所述请求中携带公共网关接口程序的统一资源定位符、以及请求主体;

构造单元,用于基于所述统一资源定位符、以及从所述连接中提取的信息而构造的请求头部,构造请求对象;

获取单元,用于将所述请求对象以及构造的响应对象传递给所述公共网关接口程序,从所述响应对象中获取所述公共网关接口程序的处理结果;

响应单元,还用于基于使用所述处理结果而构造的响应主体构造针对所述请求的响应,通过所述连接向相应的客户端返回所述响应。

第三方面,本发明实施例提供一种通信处理装置,包括:处理器和存储器;存储器中存储有可执行指令,用于执行本发明实施例提供的通信处理方法。

第四方面,本发明实施例提供一种存储介质,存储有可执行指令,用于执行本发明实施例提供的通信处理方法。

本发明实施例具有以下有益效果:

网络服务器与客户端之间建立保持的连接,对于客户端来说可以复用与网络服务器之间的连接向网络服务器发送请求,避免了重复建立连接的情况,对于网络服务器与客户端而言,能够提升访问网络服务器的效率;

在网络服务器侧通过构造请求对象传递给公共网关接口程序,一方面保证了传递必要的信息给公共网关接口程序形成处理结果,另一方面,对于客户端来说,发送请求时在请求中不需要再携带请求头部,显著节约网络服务器与客户端之间的带宽;

网络服务器向客户端发送的响应,响应主体中携带公共网关接口程序形成的处理结果,一方面,能够向客户端正常返回公共网关接口程序的处理结果,另一方面,由于没有携带响应头部,进一步显著节约网络服务器与客户端之间的带宽。

附图说明

图1是本发明实施例提供的通信处理装置的一个可选的硬件结构示意图;

图2是本发明实施例提供网络服务器与客户端基于短连接通信的一个可选的示意图;

图3是本发明实施例提供的网络服务器与客户端基于短连接通信的一个可选的处理流程图;

图4是本发明实施例提供的网络服务器与客户端建立连接的一个可选的示意图;

图5是本发明实施例提供的客户端与服务器通过长连接进行通信的一个可选的流程示意图;

图6是本发明实施例提供的客户端与服务器通过长连接进行通信的一个可选的流程示意图;

图7-1是本发明实施例提供的应用于网上留言功能的客户端与网络服务器通信的示意图;

图7-2是本发明实施例提供的应用于用户网络状态查询的客户端与网络服务器通信的示意图;

图8是本发明实施例提供的通信处理装置的一个可选的功能结构示意图。

具体实施方式

以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

1)网络套接字,是支持网络套接字的客户端(如浏览器客户端、彩票竞猜客户端)与网络服务器进行向通信连接的端点,网络套接字至少需要3个参数来指定:通信的目的地址;端口;网络协议。

例如,就网络服务器和客户端之间的网络套接字来说,是由网络服务器网际协议(IP,Internet Protocol)地址、网络服务器端口号、客户端IP地址以及客户端端口号的组合,其用于标识客户端请求的服务器和服务;是网络通信过程中端点的抽象表示。

2)长连接:指在客户端与网络服务器之间基于网络套接字建立的可以复用的传输数据的连接,在连接中没有数据发送时,客户端和网络服务器可以持久保持连接(直至一方主动断开,或者保持时间到达),以在具有传输数据的需求时复用连接传输数据,而不必立即释放连接。

3)短连接:客户端与网络服务器在具有通信需求时建立的基于网络套接字的连接,当客户端通过连接向网络服务器发送请求并接收到响应后,则双方释放此连接,即每次连接只完成一项业务的数据传输。

4)公共网关接口(CGI,Common Gateway Interface),规定了网络服务器调用公共网关接口程序的接口协议标准,网络服务器通过调用CGI程序实现和客户端(浏览器)的交互。

网络服务器接收客户端发送给网络服务器的信息,执行公共网关接口程序进行处理,将公共网关接口程序的处理结果再回送给客户端。公共网关接口程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal和C语言等。

公共网关接口涉及的接口包括:

5.1)标准输入(Stdin),公共网关接口从标准输入(Stdin)得到客户端通过Post方法提交网络服务器的数据,如表单(Form)中的数据。

5.2)环境变量,网络服务器的操作系统提供的变量,如环境变量QUERY-STRING,当客户端发送的请求以Get方法向网络服务器提交数据时,公共网关接口程序从环境变量QUERY-STRING中能够读取客户端提交的数据。

5.3)标准输出(Stdout),公共网关接口程序通过标准输出将针对数据的处理结果输出,处理结果可以用各种格式,例如可以为纯文本或者超文本标记语言(HTML,Hyper Text Markup Language)文本的形式。

6)请求对象,即与请求对应的类的实例化,与公共网关接口程序对应,用于在内存空间中存储供公共网关接口程序响应客户端的请求所需要使用的环境变量,包括:客户端请求运行的公共网关接口程序的地址;客户端与网络服务器建立的连接的信息,例如:客户端的IP地址;客户端数据(Cookie)等。

7)响应对象,即与响应对应的类的实例化,与公共网关接口程序对应,用于在内存空间中供相应的公共网关接口程序输出处理结果,如HTML页面、纯文本等。

现在将参考附图描述实现本发明实施例的通信处理装置。通信处理装置可以以各种形式来实施,能够应用于任意基于服务器/客户端的架构中的网络服务器或者客户端,可以理解地,网络服务器与客户端是一个相对的概念,只在网络服务器与客户端的连接期间有效,在一个连接中的网络服务器在另一个连接中也可以为客户端。对于服务器与客户端实现的业务而言不做限定,例如可以为网页留言和数据查询等。

参见图1,图1是本发明实施例提供的通信处理装置的一个可选的硬件结构示意图,通信处理装置100包括处理器101、通信单元102、存储器103、输入单元104和内存器105。图1示出了具有各种组件的通信处理装置,但是应理解的是,并不要求实施所有示出的组件。可以替代地实施更多或更少的组件。将在下面详细描述网络服务器中的组件。

处理器101用于控制通信处理装置100的总体操作。例如,处理器101执行与实现与客户端通信相关的控制和处理。

通信单元102通常包括一个或多个组件,其允许通信处理装置100与无线通信系统或网络之间的有线方式或无线方式的通信。

例如,有线通信可以是有线电信的通信,即利用电缆、光纤等有形媒质传送信息的方式,信息可以使用光或电信号可以代表声音、文字和图像等。

例如,无线通信单元可以实施为移动通信模块、无线互联网模块和短程通信模块中的至少一个。

移动通信模块将无线电信号发送到基站(例如,接入点、节点B等等)、外部终端以及网络服务器中的至少一个和/或从其接收无线电信号。这样的无线电信号可以包括语音通话信号、视频通话信号、或者根据文本和/或多媒体消息发送和/或接收的各种类型的数据。

无线互联网模块支持移动终端的无线互联网接入。该模块可以内部或外部地耦接到终端。该模块所涉及的无线互联网接入技术可以包括无线局域网(WLAN)、无线相容性认证(Wi-Fi)、无线宽带(Wibro)、全球微波互联接入(Wimax)、高速下行链路分组接入(HSDPA)等等。

短程通信模块是用于支持短程通信的模块。短程通信技术的一些示例包括蓝牙、射频识别(RFID,Radio Frequency Identification)、红外数据协会(IrDA,Infrared Data Association)、超宽带(UWB,Ultra WIDeband)、紫蜂等等。

存储器103可以存储由处理器101执行的处理和控制操作的软件程序等等,或者可以暂时地存储已经输出或将要输出的数据。

存储器103可以包括至少一种类型的存储介质,所述存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等等)、只读存储器(ROM,Read Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read Only Memory)、可编程只读存储器(PROM,Programmable Read Only Memory)、磁性存储器、磁盘、光盘等等。而且,通信处理装置100可以与通过网络连接执行存储器103的存储功能的网络存储装置协作。

输入单元104可以根据用户输入的命令生成键输入数据以控制网络服务器的各种操作。输入单元104允许用户输入各种类型的信息,并且可以包括键盘、触摸板、滚轮、摇杆等等。特别地,当触摸板以层的形式叠加在显示单元上时,可以形成触摸屏。

内存器105,供处理器101运行各种应用程序的易失性存储介质,例如可以为随机访问存储器(RAM,Random Access Memory)、静态随机访问存储器(SRAM,Static Random Access Memory)、其作用是用于暂时存放处理器101的运算数据,以及与硬盘等外部的存储器交换的数据。处理器101会把需要运算的数据调到内存器105中进行运算。

这里描述的各种实施方式可以以使用例如计算机软件、硬件或其任何组合的计算机可读介质来实施。

对于硬件实施,这里描述的实施方式可以通过使用特定用途集成电路(ASIC,Application Specific Integrated Circuit)、数字信号处理器(DSP,Digital Signal Processing)、数字信号处理装置(DSPD,Digital Signal Processing Device)、可编程逻辑装置(PLD,Programmable Logic Device)、现场可编程门阵列(FPGA,Field Programmable Gate Array)、处理器、控制器、微控制器、微处理器、被设计为执行这里描述的功能的电子单元中的至少一种来实施,在一些情况下,这样的实施方式可以在处理器101中实施。

对于软件实施,诸如过程或功能的实施方式可以与允许执行至少一种功能或操作的单独的软件模块来实施。软件代码可以由以任何适当的编程语言编写的软件应用程序(或程序)来实施,软件代码可以存储在存储器103中并且由处理器101执行。

至此,已经按照其功能描述了本发明实施例中涉及的网络服务器,基于上述网络服务器的硬件结构示意图,对本发明实施例提供的应用于网络服务器的通信处理方法进行说明。

首先对本发明实施例提供的客户端通过短连接向网络服务器发送请求而获得处理结果一个可选的过程进行说明,参见图2,图2是本发明实施例提供网络服务器与客户端连接通信的一个可选的示意图。

网络服务器中可以运行有多个公共网关接口程序,每个公共网关接口程序用于实现特定的业务逻辑而形成处理结果。网络服务器运行的公共网关接口程序包括业务逻辑,被用来处理来自客户端的请求,在网络服务器侧产生相应的处理结果;另外,还可以将相应的处理结果反馈给客户端。

例如,本发明实施例提供的公共网关接口程序的用途可以包括:

1)根据浏览者填写的HTML表单发送定制的答复;

2)创建可单击的图像缩略图;

3)创建一个浏览者可以搜索内容的数据库;

4)提供服务器与数据库的接口,并把结果转换成HTML文档。

4)制作动态HTML文档。

客户端需要向网络服务器发送请求以运行公共网关接口程序得到处理结果,并得到网络服务器的返回的携带处理结果的响应时,参见图3,图3是本发明实施例提供的网络服务器与客户端基于短连接通信的一个可选的处理流程图,需要指出地,下文中针对图2和图3的说明中涉及的连接均为短连接,包括如下步骤:

步骤101,客户端与网络服务器的公共网关接口程序建立基于套接字的短连接。

参见图4,图4是本发明实施例提供的网络服务器与客户端建立连接的一个可选的示意图,根据超文本传输协议(HTTP,Hyper Text Transfer Protocol),网络服务器的公共网关接口程序与客户端基于三次握手协议,建立基于网络套接字的连接。

建立网络套接字连接至少需要一对套接字,其中一个套接字运行于客户端,称为客户端套接字,如<客户端IP地址:客户端端口;协议>;另一个套接字运行于网络服务器端,称为服务器套接字,如<网络服务器IP地址:网络服务器端口;协议>。

基于套接字的连接过程中,客户端执行连接请求时将触发三次握手过程:

步骤1011,网络服务器监听:网络服务器并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

步骤1012,客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的网络服务器的套接字,指出网络服务器套接字的IP地址和端口号,然后就向网络服务器套接字提出连接请求。

步骤1013,网络服务器端连接确认:当网络服务器端接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

步骤102,客户端通过连接向网络服务器的公共网关接口程序发送的HTTP,请求(也简称为请求),HTTP请求包括的字段如下表1所示:

表1

1)请求行,包括:

1.1)请求地址(Path),即客户端需要访问的公共网关接口的统一资源定位符(URL,Uniform Resource Locator);

1.2)协议以及版本号;

1.3)请求方法,如Get方法、Post方法,即客户端向网络服务器提交数据的方法;使用Get方法时,客户端向网络服务器提交的数据(也称为请求内容或请求数据)位于URL的尾部;使用Post方法时,客户端提交的数据位于请求主体中;

2)请求头部(Header),也就是请求的头部,由关键字:值(Value)的构成的对所形成,根据HTTP协议,请求头中可以包括有以下几种类型的信息:

2.1)用户代理(User-Agent),客户端的厂家和版本;

2.2)可识别(Accept),客户端可识别的内容类型列表;

2.3)内容长度(Content-Length),附加到请求的数据字节数(长度);

2.4)客户端数据(Cookie),表明客户端的用户身份、进行会话跟踪而储存在客户端的数据。

3)请求主体(body),即请求中的消息体,当请求使用Post方法时,请求主体中包括客户端提交的数据,用于传递给相应的公共网关接口程序形成处理结果。

对客户端在请求中提交数据的方式进行说明。

方式1)根据HTTP协议,客户端可以使用Get方法(在请求方法中指示)提交必要的数据,即客户端将数据加到URL的末尾,使用“?”连接,例如:

http://127.0.0.1/cgi-bin/hello.exe?data;其中“data”表示客户端提交的数据部分,127.0.0.1/cgi-bin/hello.exe表示客户端需要执行的公共网关接口程序在网络服务器中的位置。

方式2)根据HTTP协议,客户端还可以使用Post方法(在请求方法中指示)向服务器提交数据,客户端提交的数据携带在请求主体中。

步骤103,网络服务器的守护进程定位客户端需要执行的公共网关接口程序,并执行相应的公共网关接口程序。

网络服务器的守护进程接收到客户端的请求后,会启动公共网关接口程序以创建一个与公共网关接口程序相关的进程(CGI进程),该CGI进程会创建与网络服务器之间的数据通道(标准I/O),然后启动客户端的请求中携带的URL指向的公共网关接口程序,公共网关接口程序会设置自身相关的环境变量。

步骤104,公共网关接口程序提取客户端通过HTTP请求提交的数据。

对客户端提交数据使用不同方法提交数据时公共网关接口程序提取数据的方式进行说明。

1)客户端在HTTP请求中指示使用Get方法提交数据时,根据公共网关接口协议,客户端使用Get方法提交的数据在网络服务器中被存储在用于存储数据的特定环境变量如QUERY_STRING中,公共网关接口程序能够从环境变量QUERY_STRING中读取数据。

2)客户端在HTTP请求中指示使用Post方法向服务器提交数据时,根据公共网关接口协议,客户端使用Post方法向网络服务器提交的数据,在公共网关接口程序的标准输入中存储,提交数据的长度在公共网关接口程序的环境变量(即,用于存储长度的环境变量)CONTENT_LENGTH中存储,根据指示数据长度的环境变量Content-Length,公共网关接口程序从标准输入能够读取得到客户端提交的相应长度的数据。

另外,不管客户端提交数据使用的是Post方法还是Get方法,为了便于传输,客户端器发送给服务器的数据都不是客户端所提交的原始的数据,而是经过URL编码形成<变量名称,变量数值>这样的形式进行存储;此时,公共网关接口程序的环境变量Content_type将被设置,如:

Content_type=application/x-www-form-urlencode,用于表示服务器收到的是经过URL编码的数据。

对于URL编码的方式本发明实施例不做限定,例如,变量之间用“&”分开;变量与其对应值用“=”连接等;另外,当网络服务器提取到客户端提交的编码后的数据时,根据URL编码的规则进行逆序的解码可以得到原始的数据。

步骤105,公共网关接口程序针对客户端提交的数据进行处理,形成处理结果。

公共网关接口程序能够完成客户端在网页获取的用户提交的数据的处理(根据公共网关接口程序自身的业务逻辑而区别)、数据库(DB)查询、以及实现与其他的应用系统的集成等业务逻辑,形成处理结果,本发明实施例中对公共网关接口的具体业务逻辑不做限定。

例如,网络服务器可以解析HTTP协议。当网络服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求,网络服务器可以响应一个静态页面或图片,进行页面跳转或者把动态响应(dynamic response)的产生委托给一些其它的程序例如CGI脚本,Java服务器页面(JSP,JavaServer Pages)脚本、Java编写的服务器端程序(servlets)、动态页面(ASP,Active Server Pages)脚本、JavaScript,或者一些其它的服务器端(server-side)技术。无论其它的程序的目的如何,网络服务器的程序都是产生一个HTML(或纯文本)的响应来供客户端处理(如显示)。

步骤106,网络服务器通过连接向客户端返回处理结果。

CGI进程通过标准输出将针对客户端提交数据的处理结果输出给网络服务器的守护进程,守护进程将处理结果以HTTP响应(也简称为响应)的方式返回客户端,HTTP响应包括的字段如表2所示:

表2

状态码(Status Code):描述了响应的状态。可以用来检查是否成功完成了请求。请求失败的情况下,根据状态码可用来找出失败的原因。

响应头部(Header):包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。

响应主体(响应中的消息体),包含了公共网关接口程序针对客户端提交的数据的处理结果,例如可以包含HTML代码、图片、响应主体是由传输在HTTP响应中紧跟在响应头部后面的数据字节组成。

步骤107,客户端释放与网络服务器建立的短连接。

根据HTTP协议,客户端与网络服务器之间通过四次握手协议断开连接,包括释放与连接相关的资源,如连接所占用的内存、端口等。

在上述的客户端与服务器通过短连接通信的过程中,网络服务器为了支持大量客户端的业务,需要与客户端之间频繁建立短连接并在业务结束时释放无用的短连接,客户端需要频繁建立连接而导致处理效率低,造成了对网络服务器资源的大量占用;另外,客户端频繁向服务器发送请求,请求和响应中都会携带头部(如Cookie),头部的传输造成了客户端与网络服务器之间的带宽的大量占用。

针对上述问题,本发明实施例提供一种网络服务器与客户端之间通过网络套接字协议建立的长连接进行通信的方案,应用于基于网络服务器/客户端架构中的网络服务器,可以理解地,网络服务器与客户端是一个相对的概念,只在网络服务器与客户端的连接期间有效,在一个连接中的网络服务器在另一个连接中也可以为客户端。

参见图5,图5是本发明实施例提供的客户端与服务器通过网络套接字建立长连接进行通信的一个可选的流程示意图,如无特别说明,针对图5以及后续图6的说明中所涉及的连接均为基于网络套接字协议建立的长连接,在图5中涉及以下步骤:

步骤201,网络服务器与各客户端之间分别建立连接,保持与每个客户端之间所建立的连接;相当于客户端与服务器之间建立了长连接,对于每个连接来说,可供客户端复用于向所连接的网络服务器发送请求。

步骤202,网络服务器通过连接接收相应客户端所发送的请求,每个请求中携带公共网关接口程序的统一资源定位符、以及请求主体。

步骤203,网络服务器基于统一资源定位符、以及从连接中提取的信息而构造的请求头部,构造请求对象。

步骤204,网络服务器将请求对象以及构造的响应对象传递给公共网关接口程序,从响应对象中获取公共网关接口程序的处理结果。

由网络服务器来构造包括请求头部的请求对象,并传递给公共网关接口程序,这样客户端不必在每次发送请求时在请求中携带头部,从而节约网络服务器与客户端之间的通信带宽。

步骤205,网络服务器使用处理结果构造响应主体,并基于响应主体构造针对请求的响应。

步骤206,通过连接向相应的客户端发送响应;对于响应而言,仅包括响应主体,另外,还可以包括状态码,但未携带响应头部,由于不需要传输数据量较大的Cookie等头部元素,能够节约网络服务器与客户端之间的通信带宽。

后续,当客户端再次发送请求时,重复执行上述步骤201至步骤205,那么,对于客户端来说,不必在每次需要发送请求时与网络服务器连接,对于服务器而言不需要对客户端建立连接的请求进行频繁响应,同时客户端向网络服务器发送的请求、以及网络服务器的响应因没有携带头部,从而能够节省客户端与网络服务器之间的通信带宽。

下面,再以一个客户端通过连接向网络服务器发送请求,并获得网络服务器针对请求的响应的过程进行说明,需要指出地,对于该客户端后续复用该连接向网络服务器发送请求并获得响应的过程,可以基于下述针对图6的说明而实施,对于其他客户端与网络服务器建立连接,并复用连接向网络服务发送请求并获得响应的过程,与下述结合图6的说明是类似的,可以基于下述的说明而实施。

参见图6,图6是本发明实施例提供的客户端与服务器通过长连接进行通信的一个可选的流程示意图,涉及以下步骤:

步骤301,网络服务器与各客户端之间分别建立基于网络套接字的连接,保持与每个客户端之间所建立的连接,即创建长连接;对于每个连接来说,可供客户端复用于向所连接的网络服务器发送请求。

参见图4,图4是本发明实施例提供的网络服务器与客户端建立基于网络套接字的连接的一个可选的示意图,根据HTTP协议,网络服务器的长连接程序与客户端基于三次握手协议,建立基于网络套接字的连接。

建立网络套接字连接至少需要一对套接字,其中一个套接字运行于客户端,称为客户端套接字,如<客户端IP地址:客户端端口;协议>;另一个套接字运行于网络服务器端,称为服务器套接字,如<网络服务器IP地址:网络服务器端口;协议>。

基于套接字的连接过程中,客户端执行连接请求时将触发三次握手过程:

步骤3011,网络服务器监听:网络服务器并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

步骤3012,客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的网络服务器的套接字,指出网络服务器套接字的IP地址和端口号,然后就向网络服务器套接字提出连接请求。

另外,在连接建立之后,客户端还需要与网络服务器保持所建立的连接,对于保持连接而言,客户端在建立连接时向网络服务器发送的连接请求的头部中使用如下的用于保持连接时长的代码:

Connection:keep-alive;

则客户端与网络服务器之间的连接将保持打开状态,于是,客户端可以复用该连接多次向网络服务器发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。其中,keep-alive用于限制连接的保持时间,在keep-alive计时到达后,连接可以被释放。

如果网络服务器的长连接程序检测到这里的值为“keep-alive”,或者检测到客户端建立连接使用的请求中指定使用的是HTTP 1.1(HTTP 1.1默认进行持久连接)协议,则网络服务器将与客户端建立持久连接。

步骤3013,网络服务器端连接确认:当网络服务器端接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。当套接字长连接成功后,客户端发送一个握手的消息给到网络服务器表示连接建立成功。而服务器端基于套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

对上述过程所发送连接请求和响应包括的字段进行示例性说明。

参见下述示出的客户端向网络服务器发送连接请求时,请求的头部(请求头部)所包括字段的一个示例:

Connection:Upgrade,本次连接使用的协议类型;

Sec-WebSocket-Extensions,客户端想表达的本字段协议字段的扩展;

Sec-Websocket-Key:webSocket,协议必须用的头域,base64编码的随机16字节长的字符序列;

Sec-Websocket-Key:客户端的一个私钥。

Upgrade:本次连接协议是网络套接字协议。

参见下述示出的网络服务器与客户端建立连接成功后发送的响应(Response)所包括字段的一个示例,包括:

状态码(Status Code),值为101,这个状态码表示切换协议,从而完成对协议的升级更新。

Sec-WebSocket-Accept,网络服务器根据客户端发送的sec-websocket-key私钥,如果确定是要使用网络套接字,就开始进行握手,生成一个服务器端的公钥发送给客户端。

步骤302,网络服务器通过连接接收相应客户端所发送的请求,每个请求中携带公共网关接口程序的统一资源定位符、以及请求主体。

客户端发送的HTTP请求(简称为请求)包括字段如下表3所示:

表3

如表3所示,客户端发送的请求包括以下字段:

1)请求行,包括:

1.1)请求地址(Path),即客户端需要访问的公共网关接口的URL;

1.2)协议以及版本号;

1.3)请求方法,如Get方法、Post方法,即客户端向网络服务器提交数据的方法;当使用Get方法时客户端提交的数据附加在URL的尾部,当使用Post方法时数据携带在请求主体中。

2)请求主体(body),即请求中的消息体,当HTTP请求使用Post方法时,请求主体中包括必要的数据(也称为请求内容或请求数据),用于传递给相应的公共网关接口程序形成处理结果;当HTTP请求使用Get方法时,请求主体的内容为空,客户端提交的数据位于URL的尾部;当HTTP请求使用Post方法时,请求主体中包括有客户端提交的数据。

与前述表1中客户端通过短连接的发送的请求所包括的字段相比,客户端向网络服务器发送的请求中未携带有请求头部,由于传输Cookie等头部信息会消耗客户端与网络服务器之间的大量带宽,因此客户端发送的请求中未携带请求头部时能够显著节约客户端与服务器之间的带宽。

步骤303,网络服务器基于统一资源定位符、以及从连接中提取的信息而构造的请求头部,构造请求对象。

由于客户端的请求中没有携带请求头部,而公共网关接口程序在初始化以及处理过程中都需要使用头部,本发明实施例通过由网络服务器端在构造的请求对象中存储请求头部以及统一资源定位符,通过将请求对象作为入参传递给网络服务器,使得公共网关接口程序在启动时能够基于请求对象中的请求头部的元素,来初始化与公共网关接口程序相关的环境变量。

举例来说,在网络服务器的长连接程序与客户端建立连接后,长连接程序能够提取建立连接的相关信息(例如客户端发送的连接请求、以及长连接程序发送的响应)作为用于构造请求头部的元素,包括:

1)客户端的IP地址;

2)用户代理(User-Agent),客户端的厂家和版本;

3)可识别(Accept),客户端可识别的内容类型列表;

4)内容长度(Content-Length),附加到请求的数据字节数(长度);

5)客户端数据(Cookie),表明客户端的用户身份、进行会话跟踪而储存在客户端的数据。

网络服务器的长连接程序将上述元素构造的请求头部以及客户端需要访问的公共网关接口的URL,在网络服务器的内存空间中存储,从而构造形成请求对象,请求对象在网络服务器的内存空间中分配有相应的指针。

步骤304,网络服务器构造响应对象。

网络服务器的长连接程序在内存空间创建用于供公共网关接口程序输出处理结果的内存空间,即响应对象,响应对象分配有对应的指针。

步骤305,网络服务器访问公共网关接口程序,将请求对象以及构造的响应对象传递给公共网关接口程序。

网络服务器的长连接程序将请求对象的指针,以及构造的响应对象的指针作为入参,传递给启动的公共网关接口程序,根据客户端发送的请求携带的URL,网络服务器的长连接程序在网络服务器中定位URL指向的公共网关接口程序,启动公共网关接口程序,由公共网关接口程序从请求对象中读取请求头部的元素来初始化与自身相关的变量,基于客户端提交的数据进行处理并输出到响应对象,响应对象可以通过回调(call back)的方式通知长连接程序,从而由长连接程序从响应对象中读取公共网关程序的处理结果。

由于客户端发送的请求中没有携带请求头部,而公共网关接口程序在启动时需要初始化与请求头部的元素的环境变量的初始化,因此,通过构造请求对象并将相应的指针传递给公共网关接口程序,能够保证公共网关接口程序获取到请求头部的元素来完成自身相关的环境变量的初始化,保证公共网关接口程序能够基于客户端提交的数据进行处理以输出处理结果。

例如,当公共网关接口程序启动时,根据前述步骤303记载的请求头部的元素,进行与请求头部的元素相应的环境变量的初始化:

1)根据客户端的IP地址来初始化环境变量REMOTE_ADDR,REMOTE_ADDR表示发送请求的主机IP;

2)根据内容长度(Content-Length)来初始化环境变量CONTENT_LENGTH,CONTENT_LENGTH用于表示提交数据的长度;

3)根据客户端数据(Cookie)来初始化环境变量HTTP_COOKIE,HTTP_COOKIE表示Cookie中的键值对。

通过构造与公共网关接口程序对应的响应对象,以实现保证长连接程序获取到公共网关接口程序输出的处理结果,需要指出地,上面仅仅示例性对请求头部元素与对应环境变量的初始化进行了说明,对于未示出的请求头部的元素以及对应环境变量的初始化,可以根据上述的处理而实施。

步骤306,公共网关接口程序读取客户端提交的数据进行处理形成处理结果。

根据客户端的请求所使用的不同方法,包括以下两种情况:

1)客户端在HTTP请求中指示使用Get方法提交数据时,根据公共网关接口协议,客户端使用Get方法提交的数据在网络服务器中被存储在环境变量QUERY_STRING中,公共网关接口程序能够从环境变量QUERY_STRING中读取数据。

2)客户端在HTTP请求中指示使用Post方法,向服务器提交数据时,长连接程序从URL的尾部提取客户端提交数据,存储在公共网关接口程序的标准输入中,并将数据的长度存储在环境变量CONTENT_LENGTH中,公共网关接口程序据指示数据长度的环境变量Content-Length,从标准输入能够读取得到客户端提交的相应长度的数据。

公共网关接口程序能够完成客户端在网页获取的用户提交的数据的处理(根据公共网关接口程序自身的业务逻辑而区别)、数据库查询、以及实现与各种应用系统的集成等业务逻辑,形成处理结果,本发明实施例中对公共网关接口的具体业务逻辑不做限定。

步骤307,网络服务器基于处理结果构造响应主体,并基于状态码和响应主体构造响应,将响应通过连接传输至客户端。

长连接程序向客户端返回的HTTP响应包括的字段如下表4所示:

表4

响应包括如下字段:

状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。

响应主体(响应中的消息体),包含了公共网关接口程序针对客户端提交的数据的处理结果,例如可以包含HTML代码、图片、响应主体是由传输在HTTP响应中紧跟在响应头部后面的数据字节组成。

与前表2中网络服务器通过短连接向客户端返回的响应相比,长连接程序待向客户端返回的相应中未携带有响应头部,由于响应头部包括了Cookie等容量较大的信息,因此能够显著节约网络服务器与客户端之间的带宽。

至此,已经对客户端通过长连接向网络服务器发送请求并获得响应的过程进行了说明;当客户端需要再次向网络服务器发送请求时,可以复用之前所建立的连接向客户端发送,如前,所发送的请求中携带有需要访问的公共网关接口程序的URL、以及请求体,而未携带有请求头部,由网络服务器通过构造请求对象和响应对象的方式,保证客户端请求运行的公共网关接口程序能够运行并输出处理结果;在向客户端返回的响应中没有携带头部,以实现节约通信带宽的效果。

再结合两个常见的应用场景示例性说明。

一、网上留言

参见图7-1,图7-1是本发明实施例提供的应用于网上留言功能的客户端与网络服务器通信的示意图。

用户登录各种网站时经常需要针对一些业务进行留言,如在购物网站进行售前、售后的各种咨询等。用户通过浏览器登录到留言网页时,浏览器提示用户在表单控件输入留言并通过提交按钮提交。

获取到用户提交留言后,浏览器与网络服务器建立长连接,向网络服务器提交请求,在请求中携带用于处理流言的CGI程序(一般,网络服务器中包括有处理多种业务的CGI程序)的URL和请求主体;如前所述,请求可以使用Get方法或Post方法,如使用Get方法则留言作为URL的尾部向网络服务器提交(此时请求主体为空),如果使用Post方法,则留言在请求主体中向网络服务器提交。

网络服务器的长连接程序根据URL启动相应的CGI程序,由CGI程序访问数据库将用户的留言写入数据库,并将留言提交的结果返回网络浏览器。

在上述过程中,长连接程序根据建立长连接时客户端所发送的连接请求、以及网络服务器所发送连接响应提取必要的信息以构造请求头部,结合请求头部和客户端发送的请求中携带的URL构造请求对象,并构造响应对象供CGI程序输出向后台数据库提交留言的结果;CGI程序根据请求所使用的方法读取用户提交的留言,提交到数据库存储,根据数据库的反馈形成提交结果(留言成功/留言失败),输出到响应对象中供长连接程序读取。

长连接程序根据留言提交的结果构造响应主体,使用响应主体构造响应返回浏览器,用户此时可以看到留言提交的结果。

由于浏览器和网络服务器之间采用长连接,因此当用户多次留言时浏览器不需要与网络服务器重新建立连接,使得浏览器与服务器之间的连接的速度显著提高,并且,根据浏览器发送的请求以及网络服务器返回的响应中均未携带头部,节约了浏览器与网络服务器之间的通信带宽。

可以理解地,上述示例能够应用于各种数据提交的业务,如用户注册使用互联网服务(网盘、在线视频)账号时个人信息的提交,以及各种数据的查询等。

二、用户网络状态查询

参见图7-2,图7-2是本发明实施例提供的应用于用户网络状态查询的客户端与网络服务器通信的示意图。

终端中运行的某些客户端根据实际业务需求定期查询用户在网络服务器侧的网络状态(例如,是否在线),如在用于彩票竞猜的客户端中,客户端的业务逻辑需要定期查询用户的网络侧的数据库中是否处于在线状态,用户在使用这一类的客户端时,客户端自动向网络服务器查询用户在网络服务器侧是否处于在线状态。

客户端与网络服务器与建立长连接,接收客户端提交的请求,携带用于查询用户状态的CGI程序的URL,以及请求主体(例如携带用户的标识)。

客户端发送的请求可以使用Get方法或Post方法,网络服务器的长连接程序根据URL启动相应的CGI程序,由CGI程序访问数据库查询用户的状态写入,并将查询到的结果返回客户端。

在上述过程中,长连接程序根据建立长连接时客户端所发送的连接请求、以及网络服务器所发送连接响应提取必要的信息以构造请求头部,结合请求头部和客户端发送的请求中携带的URL构造请求对象,并构造响应对象供CGI程序输出用户的网络状态的查询结果。

CGI程序根据请求所使用的方法提取客户端需要查询的用户的标识,提交到后台数据库查询用户的网络状态,根据后台数据库的反馈形成提交结果,输出到响应对象中供长连接程序读取。

长连接程序根据留言提交的结果构造响应主体,使用响应主体构造响应返回浏览器,用户此时可以看到网络状态查询的结果。

由于客户端和网络服务器之间采用长连接,因此当客户端连续多次查询网络状态时,不需要与网络服务器重新建立连接,使得网络服务器与客户端之间的连接的速度显著提高,并且,根据客户端发送的请求以及网络服务器返回的响应中均未携带头部,节约了网络服务器与客户端之间的通信带宽。

对前述通信处理装置的功能结构进行说明,参见图8,图8是本发明实施例提供的通信处理装置200的一个可选的功能结构示意图,包括:连接单元201、接收单元202、构造单元203、获取单元204和响应单元205。

连接单元201,用于在网络服务器侧与各客户端之间分别建立基于网络套接字的连接,保持与每个客户端之间所建立的连接;连接单元201用于运行长连接程序,与客户端基于三次握手协议,建立基于网络套接字的连接,连接的过程包括如下几个阶段:

阶段1)连接单元201监听:连接单元201并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

阶段2)客户端请求:指客户端的套接字提出连接请求,要连接的目标是网络服务器的套接字。为此,客户端的套接字必须首先描述它要连接的网络服务器的套接字,指出网络服务器套接字的IP地址和端口号,然后就向网络服务器套接字提出连接请求。

另外,在连接建立之后,客户端还需要与网络服务器保持所建立的连接,对于保持连接而言,客户端在建立连接时向网络服务器发送的连接请求的头部中使用如下的用于保持连接时长的代码:

Connection:keep-alive;

则客户端与网络服务器之间的连接将保持打开状态,于是,客户端可以复用该连接多次向网络服务器发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。其中,keep-alive用于限制连接的保持时间,在keep-alive计时到达后,连接可以被释放。

如果连接单元201运行的长连接程序检测到这里的值为“keep-alive”,或者检测到客户端建立连接使用的请求中指定使用的是HTTP 1.1(HTTP 1.1默认进行持久连接)协议,则网络服务器将与客户端建立持久连接。

阶段3)连接单元201连接确认:当网络服务器端接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。当套接字长连接成功后,客户端发送一个握手的消息给到网络服务器表示连接建立成功。而连接单元201的继续处于监听状态,继续接收其他客户端套接字的连接请求。

接收单元202,用于通过连接接收相应客户端所发送的请求,每个请求中携带公共网关接口程序的统一资源定位符、以及请求主体。

如上表3所示,接收的客户端的请求中未携带有请求头部,这样,当客户端服用套接字长连接向网络服务器的长连接程序发送请求时,因为不需要传输Cookie等数据量较大的信息,因此能够显著节省带宽。

构造单元203,用于从连接中提取的信息而构造请求头部,结合请求头部、以及客户端发送的请求中携带的统一资源定位符,在网络服务器的内存空间中构造用于存储统一资源定位符以及请求头部的各个元素的请求对象,请求对象分配有相应的指针;针对客户端发送的URL对应的公共网关接口程序,为相应的公共网关接口程序在内存空间中构造响应对象。

例如,构造单元203从与客户端建立的连接中提取用于构造请求头部的元素,基于所提取的元素并结合统一资源定位符构造请求对象以在网络服务器的内存空间中进行存储。

获取单元204,用于将请求对象以及构造的响应对象传递给公共网关接口程序,从响应对象中获取公共网关接口程序的处理结果;

例如,获取单元204根据统一资源定位符启动网络服务器中的公共网关接口程序,将请求对象的指针,以及响应对象的指针作为入参,传递给启动的公共网关接口程序,供公共网关接口程序在启动时基于请求头部的元素、以及公共网关接口程序完成相应的环境变量的初始化;

获取单元204根据统一资源定位符启动公共网关接口程序后,根据客户端发送的请求所使用的方法,获取客户端所提交的数据,对数据进行处理形成处理结果。

例如,如客户端发送的请求中指示使用获取方法,则从统一资源定位符的尾部提取客户端提交的数据,并存储在特定环境变量中供公共网关接口程序读取。

例如,如客户端发送的请求中指示使用附加方法,从消息体中提取客户端提交的数据,并存储在对应公共网关接口程序的标准输入接口供公共网关接口程序读取。

响应单元205,还用于基于使用处理结果而构造的响应主体,来构造针对请求的响应,通过连接向相应的客户端返回。

响应包括:状态码:响应主体(响应中的消息体),与前表2中网络服务器通过短连接向客户端返回的响应相比,长连接程序待向客户端返回的相应中未携带有响应头部,由于响应头部包括了Cookie等容量较大的信息,因此能够显著节约网络服务器与客户端之间的带宽。

与前述记载的通信处理方案基于同一构思,本发明实施例还提供一种存储介质,存储有可执行指令,用于执行如本发明实施例图5和图6任一附图提供的通信处理方法,本发明实施例提供的存储介质可为光盘、闪存或磁盘等存储介质,可选为非瞬间存储介质。

综上所述,本发明实施例具有以下有益效果:

网络服务器与客户端之间建立保持的连接,对于客户端来说可以复用与网络服务器之间的连接向网络服务器发送请求,避免了重复建立连接的情况,对于网络服务器与客户端而言,能够提升访问网络服务器的效率;

在网络服务器侧通过构造请求对象传递给公共网关接口程序,一方面保证了传递必要的信息给公共网关接口程序形成处理结果,另一方面,对于客户端来说,发送请求时在请求中不需要再携带请求同步,显著节约网络服务器与客户端之间的带宽;

网络服务器向客户端发送的响应,响应主体中携带公共网关接口程序形成的处理结果,一方面,能够向客户端正常返回公共网关接口程序的处理结果,另一方面,由于没有携带响应头部,进一步显著节约网络服务器与客户端之间的带宽。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1