一种用于NAT网络中服务器向客户端发送消息的方法与流程

文档序号:12068277阅读:301来源:国知局

本发明涉及计算机网络通信领域,并且更具体地涉及一种用于NAT网络中服务器向客户端发送消息的方法。



背景技术:

客户端与服务器之间的通信是基于HTTP(超文本传输协议)的通信,而HTTP是无状态的通信协议,每一次请求-响应都是基于一个新建立的HTTP连接,这就使得服务器主动通知客户端成为一个难点。

目前,主流的解决方式有以下两种:一是客户端轮询技术,即客户端周期性地主动访问服务器的公网IP地址,以获取服务器数据状态的变化,此种方式的问题是:如果服务器的业务数据在两次连续的轮询的请求过程中没有变化,后一次请求的做工实际为负数——浪费了服务器端的带宽,而且没有获得有效负载;而且,客户端轮询过程中的定时器间隔时间参数也是一个难把握的问题,由于需要及时获取服务器端的业务数据状态,这个定时间隔参数设置不宜过长,但是过短又会频发第一个问题。

另一种方式是:客户端与服务器之间提供一个双向的、在一条TCP通道中的全双工的通信,即客户端与服务器之间建立长连接,此种方式的问题是:需要客户端与服务器之间通过Ping-Pong进行双向的心跳机制,来保证链路的可靠性,实现复杂,同样也造成了服务器端的带宽浪费。



技术实现要素:

针对上述现有技术中存在的问题,本发明的目的在于提供一种用于NAT网络中服务器向客户端推送消息的方法,其通过在服务器和位于NAT网关后的客户端之间建立UDP通信通道来实现服务器实时向客户端推送数据的功能。

为了实现上述目的,本发明采用的技术方案如下:

一种用于NAT网络中服务器向客户端发送消息的方法,其步骤包括:

在服务器中开通UDP-S服务以与客户端通信;

客户端通过向服务器的UDP-S服务发送UDP数据包以建立本地缓存信息表;

服务器根据UDP数据包判断客户端是否位于NAT网关限定的内网中,并返回客户端标识;

客户端响应客户端标识以完成服务器和客户端之间的UDP通信通道的建立;

服务器根据本地缓存信息表的信息调用UDP-S服务通过UDP通信通道向客户端发送消息。

根据本发明的一个实施例,方法进一步包括:客户端通过服务器的TCP-S服务将客户端的ID号、内网IP地址和内网UDP监听端口发送给服务器并保存在服务器的数据库中。

根据本发明的一个实施例,方法进一步包括:在客户端的ID号、内网IP地址和内网UDP监听端口中的任一项发生改变时,客户端通过服务器的TCP-S服务将客户端的ID号、内网IP地址和内网UDP监听端口发送给服务器以更新服务器的数据库。

根据本发明的一个实施例,方法进一步包括:在客户端的ID号、内网IP地址和内网UDP监听端口中的任一项发生改变时,客户端通过服务器的UDP-S服务将客户端的ID号、内网IP地址和内网UDP监听端口发送给服务器以更新服务器缓存信息表

根据本发明的一个实施例,UDP数据包包含客户端的ID号、内网IP地址和内网UDP监听端口。

根据本发明的一个实施例,本地缓存信息表包含客户端的ID号、内网IP地址、内网UDP监听端口、公网IP地址以及公网端口。

根据本发明的一个实施例,所述方法进一步包括:服务器从UDP数据包中获取客户端的ID号、内网IP地址和内网UDP监听端口,并根据ID号在服务器缓存信息表中找到客户端的公网IP地址和公网端口,如果内网IP地址和公网IP地址一样并且内网UDP监听端口和公网端口一样,则客户端标识为0,反之,客户端标识为1。

根据本发明的一个实施例,如果客户端标识为0,客户端停止向服务器发送UDP数据包;如果客户端标识为1,客户端每隔一定时间间隔通过向服务器的UDP-S服务发送UDP数据包。

根据本发明的一个实施例,ID号是通过计算客户端的主板序列号和/或硬盘序列号而得到。

根据本发明的一个实施例,ID是在不能获得客户端的主板序列号和/或硬盘序列号的情况下通过计算客户端的MAC地址而得到。

本发明具有以下有益效果:服务器端通过使用UDP-S服务推送机制解决了轮询方式低效地消耗服务器的网络带宽和系统负载的问题。同时,由于服务器主动向客户端发送消息,因此有很好的低延迟性。进一步,服务器端通过UDP-S服务维持与客户端的UDP通信通道实现了通用的客户端与服务器之间基于HTTP的通信,服务器向客户端推送的任何数据都可以使用该UDP通信通道,而且UDP通信通道的建立更简单。

附图说明

图1为本发明的一种用于NAT网络中服务器向客户端发送消息的方法的流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

如图1所示,示出了本发明的一种用于NAT网络中服务器向客户端发送消息的方法的流程示意图。为了能够与客户端进行通信,服务器端首先要开通UDP-S和TCP-S服务,应当理解的是,服务器和客户端之间的其他任何服务也可以直接访问UDP-S服务。接着,客户端通过UDP-S服务向服务器发送UDP数据包,UDP数据包包含了客户端的唯一ID号、内网IP地址和内网UDP监听端口。与此同时,客户端通过HTTP的请求方式将其唯一ID号、内网IP地址、内网UDP监听端口等信息上报服务器,并连同服务器通过学习而获得的客户端的对应的公网IP地址和公网端口等信息保存在服务器的数据库中,同时,将客户端的ID号、内网IP地址、内网UDP监听端口及对应的公网IP地址和公网端口等信息保存在服务器缓存信息表中。需要说明的是,客户端的唯一ID号是用于辨识客户端的唯一标识,其计算方法如下:

如果当前客户端的主板序列号和硬盘序列号都能获得时,将以主板序列号和硬盘序列号为计算因子进行计算以得到一个32位的字符作为该客户端的唯一ID号;

如果当前客户端的主板序列号和硬盘序列号只能获得其中一项时,将以可以获得的主板序列号和硬盘序列号中的其中一个为计算因子进行计算以得到一个32位的字符作为该客户端的唯一ID号;

如果当前客户端的主板序列号和硬盘序列号都不能获得时,则获取该客户端的MAC地址并以所获得的MAC地址为计算因子进行计算以得到一个32位的字符作为该客户端的唯一ID号。

接着,在接收到客户端发来的UDP数据包后,服务器从UDP数据包中获得客户端的ID号、内网IP地址和内网UDP监听端口,并通过ID号从服务器缓存信息表中获取客户端的对应的公网IP地址和公网端口,如果内网IP地址和公网IP地址一样并且内网UDP监听端口和公网端口一样,则判定客户端不在NAT网关限定的内网中并将客户端标识设置为0返回至客户端,如果内网IP地址和公网IP地址不一样并且内网UDP监听端口和公网端口也不一样,则判断客户端位于NAT网关限定的内网中并将客户端标识设置为1返回至客户端,

接着,客户端通过服务器的UDP-S服务接收到客户端标识之后,在客户端标识为0时,客户端将停止向服务器发送UDP数据包到,在客户端标识为1时,客户端需要每隔一定时间间隔(比如20秒)将其ID号、内网IP地址和内网UDP监听端口以UDP数据包的形式发送到服务器以使得服务器能够学习到客户端的目标地址(即公网IP地址)和端口(即公网端口)以作为发消息的目标地址。进一步,当客户端网络环境改变,即当客户端的ID号、内网IP地址和内网UDP监听端口中的任一项发生改变时,客户端需要将其ID号、内网IP地址和内网UDP监听端口通过UDP-S服务和TCP-S服务即时上报服务器以保持服务器缓存信息表和服务器的数据库中的信息始终是最新的状态。

至此,服务器和客户端之间的UDP通信通道建立,当服务器端有需要发送到客户端的消息时,服务器将可以根据本地缓存信息表中的内网和公网地址对应信息通过调用UDP-S服务利用建立好的UDP通信通道直接将消息发送到客户端。

以上实施例仅表达了本发明的实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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