本发明涉及通信技术领域,特别涉及混合模式移动应用的通信方法及系统、客户端、服务器。
背景技术
web应用是一种通过web访问的应用,由于web应用使用非常方便,web应用的应用场景越来越广泛,例如:在线聊天室、在线客服系统、评论系统、webim等。
在现有技术中,web应用与服务器的连接保留的时间较短,为了实现web应用与服务器的实时通信,需要web应用不断向服务器发送连接请求,服务器对这些连接请求进行处理,不断的建立连接。
通过上述描述可见,现有技术的通信方式需要消耗大量通信资源。
技术实现要素:
本发明实施例提供了混合模式移动应用的通信方法及系统、客户端、服务器,能够降低通信资源的消耗。
第一方面,本发明实施例提供了一种混合模式移动应用的通信方法,应用于服务器,包括:
创建套接字,利用所述套接字实时监测是否收到客户端发来的websocket连接的http(hypertexttransferprotocol,超文本传输协议)请求,所述http请求的头信息中包括:握手信息;
当接收到所述http请求时,获取所述http请求的头信息中的握手信息;
根据所述握手信息,生成网络字节数组;
根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息;
将所述应答信息发送给所述客户端,以使所述客户端对所述应答信息进行验证;
当所述应答信息通过验证时,实现与所述客户端的所述websocket连接;
与所述客户端的混合模式移动应用通过所述websocket连接进行实时通信。
进一步地,
所述握手信息中包括:第一握手信息、第二握手信息和第三握手信息;
所述根据所述握手信息,生成网络字节数组,包括:
获取所述第一握手信息中的数值型字符,确定所述第一握手信息中的空格的第一数量;
根据所述第一握手信息中的数值型字符,生成第一字符串,将所述第一字符串转换为第一整型数字;
根据所述第一整型数字和所述第一数量,确定第二整型数字;
将所述第二整型数字转换为第一网络字节数组;
获取所述第二握手信息中的数值型字符,确定所述第二握手信息中的空格的第二数量;
根据所述第二握手信息中的数值型字符,生成第二字符串,将所述第二字符串转换为第三整型数字;
根据所述第三整型数字和所述第二数量,确定第四整型数字;
将所述第四整型数字转换为第二网络字节数组;
所述根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息包括:
将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组;
确定所述第三网络字节数组的哈希值,将所述第三网络字节数组的哈希值作为所述websocket连接的应答信息。
进一步地,
所述根据所述第一整型数字和所述第一数量,确定第二整型数字,包括:
根据公式一,确定所述第二整型数字,所述公式一为:
其中,z为所述第二整型数字,n为所述第一整型数字,n为所述第一数量;
所述根据所述第三整型数字和所述第二数量,确定第四整型数字,包括:
根据公式二,确定所述第四整型数字,所述公式二为:
其中,k为所述第四整型数字,m为所述第三整型数字,m为所述第二数量。
进一步地,
所述第三握手信息,包括:8个字符;
所述将所述第二整型数字转换为第一网络字节数组,包括:
依次将所述第二整型数字的每两个字节转换为一个ascii码;
对所述第二整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第一网络字节数组;
所述将所述第四整型数字转换为第二网络字节数组,包括:
依次将所述第四整型数字的每两个字节转换为一个ascii码;
对所述第四整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第二网络字节数组;
所述将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组,包括:
将4个字节的所述第一网络字节数组、4个字节的所述第二网络字节数组和所述第三握手信息的8个字符依次连接,生成16个字节的所述第三网络字节数组。
进一步地,
所述确定所述第三网络字节数组的哈希值,包括:
利用md5算法计算出所述第三网络字节数组的哈希值。
第二方面,本发明实施例提供了一种混合模式移动应用的通信方法,应用于客户端,所述客户端上安装有混合模式移动应用,所述混合模式移动应用通过html5(hypertextmarkuplanguage,超级文本标记语言)来实现,所述混合模式移动应用中包含html5页面,包括:
向服务器发送携带握手信息的websocket连接的http请求,以使所述服务器根据所述握手信息,生成所述websocket连接的应答信息;
接收所述服务器发来的所述应答信息,对所述应答信息进行验证,当通过验证时,建立与所述服务器的所述websocket连接;
利用所述html5页面调用websocketjavascript接口;
通过所述websocketjavascript接口与所述服务器基于所述websocket连接进行实时通信。
第三方面,本发明实施例提供了一种服务器,包括:
监听单元,用于创建套接字,利用所述套接字实时监测是否收到客户端发来的websocket连接的http请求,所述http请求的头信息中包括:握手信息;
连接建立单元,用于当接收到所述http请求时,获取所述http请求的头信息中的握手信息;根据所述握手信息,生成网络字节数组;根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息;将所述应答信息发送给所述客户端,以使所述客户端对所述应答信息进行验证;当所述应答信息通过验证时,实现与所述客户端的所述websocket连接;
通信单元,用于与所述客户端的混合模式移动应用通过所述websocket连接进行实时通信。
进一步地,
所述握手信息中包括:第一握手信息、第二握手信息和第三握手信息;
所述连接建立单元,在执行所述根据所述握手信息,生成网络字节数组时,具体用于:
获取所述第一握手信息中的数值型字符,确定所述第一握手信息中的空格的第一数量;
根据所述第一握手信息中的数值型字符,生成第一字符串,将所述第一字符串转换为第一整型数字;
根据所述第一整型数字和所述第一数量,确定第二整型数字;
将所述第二整型数字转换为第一网络字节数组;
获取所述第二握手信息中的数值型字符,确定所述第二握手信息中的空格的第二数量;
根据所述第二握手信息中的数值型字符,生成第二字符串,将所述第二字符串转换为第三整型数字;
根据所述第三整型数字和所述第二数量,确定第四整型数字;
将所述第四整型数字转换为第二网络字节数组;
所述连接建立单元,在执行所述根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息时,具体用于:
将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组;
确定所述第三网络字节数组的哈希值,将所述第三网络字节数组的哈希值作为所述websocket连接的应答信息。
进一步地,
所述连接建立单元,在执行所述根据所述第一整型数字和所述第一数量,确定第二整型数字时,具体用于:
根据公式一,确定所述第二整型数字,所述公式一为:
其中,z为所述第二整型数字,n为所述第一整型数字,n为所述第一数量;
所述连接建立单元,在执行所述根据所述第三整型数字和所述第二数量,确定第四整型数字时,具体用于:
根据公式二,确定所述第四整型数字,所述公式二为:
其中,k为所述第四整型数字,m为所述第三整型数字,m为所述第二数量。
进一步地,
所述第三握手信息,包括:8个字符;
所述连接建立单元,在执行所述将所述第二整型数字转换为第一网络字节数组时,具体用于:依次将所述第二整型数字的每两个字节转换为一个ascii码;对所述第二整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第一网络字节数组;
所述连接建立单元,在执行所述将所述第四整型数字转换为第二网络字节数组时,具体用于:依次将所述第四整型数字的每两个字节转换为一个ascii码;对所述第四整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第二网络字节数组;
所述连接建立单元,在执行所述将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组时,具体用于:将4个字节的所述第一网络字节数组、4个字节的所述第二网络字节数组和所述第三握手信息的8个字符依次连接,生成16个字节的所述第三网络字节数组。
进一步地,
所述连接建立单元,在执行所述确定所述第三网络字节数组的哈希值时,具体用于:利用md5算法计算出所述第三网络字节数组的哈希值。
第四方面,本发明实施例提供了一种客户端,所述客户端上安装有混合模式移动应用,所述混合模式移动应用通过html5来实现,所述混合模式移动应用中包含html5页面;包括:
交互单元,用于向服务器发送携带握手信息的websocket连接的http请求,以使所述服务器根据所述握手信息,生成所述websocket连接的应答信息;
连接搭建单元,用于接收所述服务器发来的所述应答信息,对所述应答信息进行验证,当通过验证时,建立与所述服务器的所述websocket连接;利用所述html5页面调用websocketjavascript接口;通过所述websocketjavascript接口与所述服务器基于所述websocket连接进行实时通信。
第五方面,本发明实施例提供了一种通信系统,包括:
第三方面中任一所述的服务器和至少一个第四方面所述的客户端。
在本发明实施例中,服务器在接收到客户端发来的websocket连接的http请求后,根据websocket连接的http请求,生成网络字节数组,然后,生成应答信息,在应答信息通过客户端验证后,与客户端之间建立websocket连接,通过websocket连接与客户端的混合模式移动应用进行实时通信,只要服务器和客户端任何一方不关闭websocket连接,websocket连接即可一直存在,客户端无需不断向服务器发送建立连接的请求,大大降低了通信资源的消耗。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种混合模式移动应用的通信方法的流程图;
图2是本发明一实施例提供的另一种混合模式移动应用的通信方法的流程图;
图3是本发明一实施例提供的再一种混合模式移动应用的通信方法的流程图;
图4是本发明一实施例提供的一种服务器的示意图;
图5是本发明一实施例提供的一种客户端的示意图;
图6是本发明一实施例提供的一种通信系统的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种混合模式移动应用的通信方法,应用于服务器,该方法可以包括以下步骤:
步骤101:创建套接字,利用所述套接字实时监测是否收到客户端发来的websocket连接的http请求,所述http请求的头信息中包括:握手信息;
步骤102:当接收到所述http请求时,获取所述http请求的头信息中的握手信息;
步骤103:根据所述握手信息,生成网络字节数组;
步骤104:根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息;
步骤105:将所述应答信息发送给所述客户端,以使所述客户端对所述应答信息进行验证;
步骤106:当所述应答信息通过验证时,实现与所述客户端的所述websocket连接;
步骤107:与所述客户端的混合模式移动应用通过所述websocket连接进行实时通信。
在本发明实施例中,服务器在接收到客户端发来的websocket连接的http请求后,根据websocket连接的http请求,生成网络字节数组,然后,生成应答信息,在应答信息通过客户端验证后,与客户端之间建立websocket连接,通过websocket连接与客户端的混合模式移动应用进行实时通信,只要服务器和客户端任何一方不关闭websocket连接,websocket连接即可一直存在,客户端无需不断向服务器发送建立连接的请求,大大降低了通信资源的消耗。
在本发明一实施例中,所述握手信息中包括:第一握手信息、第二握手信息和第三握手信息;
所述根据所述握手信息,生成网络字节数组,包括:
获取所述第一握手信息中的数值型字符,确定所述第一握手信息中的空格的第一数量;
根据所述第一握手信息中的数值型字符,生成第一字符串,将所述第一字符串转换为第一整型数字;
根据所述第一整型数字和所述第一数量,确定第二整型数字;
将所述第二整型数字转换为第一网络字节数组;
获取所述第二握手信息中的数值型字符,确定所述第二握手信息中的空格的第二数量;
根据所述第二握手信息中的数值型字符,生成第二字符串,将所述第二字符串转换为第三整型数字;
根据所述第三整型数字和所述第二数量,确定第四整型数字;
将所述第四整型数字转换为第二网络字节数组;
所述根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息包括:
将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组;
确定所述第三网络字节数组的哈希值,将所述第三网络字节数组的哈希值作为所述websocket连接的应答信息。
在本发明实施例中,在获取第一握手信息中的数值型字符时,可以按照各个数值型字符在第一握手信息中的顺序逐个获取,并按照该顺序进行合并,生成第一字符串。同理,第二字符串也可以通过这种方式生成。
举例来说,第一握手信息为:“4@146546xw%0l15,那么,按照数值型字符在第一握手信息中的顺序,逐个获取第一握手信息中的数值型字符,得到:4、1、4、6、5、4、6、0、l、1、5,按照该顺序进行合并后,得到第一字符串为:41465460l15,转换为第一整型数字之后,仍然是41465460l15。另外,统计第一握手信息中空格的第一数量为3。
举例来说,第二握手信息为:“129985y31.p00,那么,按照数值型字符在第二握手信息中的顺序,逐个获取第二握手信息中的数值型字符,得到:1、2、9、9、8、5、3、1、0、0,按照该顺序进行合并后,得到第二字符串为:1299853100,转换为第二整型数字之后,仍然是1299853100。另外,统计第二握手信息中空格的第二数量为4。
在本发明一实施例中,所述根据所述第一整型数字和所述第一数量,确定第二整型数字,包括:
根据公式一,确定所述第二整型数字,所述公式一为:
其中,z为所述第二整型数字,n为所述第一整型数字,n为所述第一数量;
所述根据所述第三整型数字和所述第二数量,确定第四整型数字,包括:
根据公式二,确定所述第四整型数字,所述公式二为:
其中,k为所述第四整型数字,m为所述第三整型数字,m为所述第二数量。
举例来说,第一握手信息为:“4@146546xw%0l15,第一整型数字为41465460l15,第一数量为:3,那么,根据公式一,可以确定出第二整型数字为:13821820039。
举例来说,第二握手信息为:“129985y31.p00,第三整型数字为:1299853100,第二数量为4,那么,根据公式二,可以确定出第四整型数字为:324963275。
在本发明一实施例中,所述第三握手信息,包括:8个字符;
所述将所述第二整型数字转换为第一网络字节数组,包括:
依次将所述第二整型数字的每两个字节转换为一个ascii码;
对所述第二整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第一网络字节数组;
所述将所述第四整型数字转换为第二网络字节数组,包括:
依次将所述第四整型数字的每两个字节转换为一个ascii码;
对所述第四整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第二网络字节数组;
所述将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组,包括:
将4个字节的所述第一网络字节数组、4个字节的所述第二网络字节数组和所述第三握手信息的8个字符依次连接,生成16个字节的所述第三网络字节数组。
在本发明实施例中,将第二整型数字转换为符合网络传输的由0、1组成的第一网络字节数组,将第四整型数字转换为符合网络传输的由0、1组成的第二网络数组。
在本发明一实施例中,所述确定所述第三网络字节数组的哈希值,包括:
利用md5算法计算出所述第三网络字节数组的哈希值。
在本发明实施例中,服务器由两个核心类构成,一个是websocketserver,另外一个是socketconnection。
如图2所示,本发明实施例提供了一种混合模式移动应用的通信方法,应用于客户端,所述客户端上安装有混合模式移动应用,所述混合模式移动应用通过html5来实现,所述混合模式移动应用中包含html5页面,包括:
步骤201:向服务器发送携带握手信息的websocket连接的http请求,以使所述服务器根据所述握手信息,生成所述websocket连接的应答信息;
步骤202:接收所述服务器发来的所述应答信息,对所述应答信息进行验证,当通过验证时,建立与所述服务器的所述websocket连接;
步骤203:利用所述html5页面调用websocketjavascript接口;
步骤204:通过所述websocketjavascript接口与所述服务器基于所述websocket连接进行实时通信。
在本发明实施例中,混合模式移动应用是基于原生框架和html5来实现,兼具原生框架和html5的特点。在打开混合模式移动应用之后,会出现一个html5页面,通过该html5页面即可向服务器发送websocket连接的http请求,与服务器建立websocket连接之后,可以通过html5页面与服务器进行通信,当关闭该html5页面之后,断开websocket连接。
具体地,可以通过initwebsocket()函数与服务器建立websocket连接。
在本发明实施例中,可以将html5页面封装到混合模式移动应用里,也可以通过网页外部链接的方式调用。
如果要实现打开混合模式移动应用就建立websocket连接,可以通过将建立websocket连接的方法嵌入到混合模式移动应用的初始页框架中。
另外,在客户端,该方法还包括:
发送websocket连接的http请求(可以通过ws=newwebsocket(socket_addr)实现)之后,监听websocket连接是否成功(可以通过ws.onopen=function(event){}实现)。
在与服务器进行实时通信时,还包括:
发送消息(可以通过varsenddata=function(){}实现),监听消息发送(可以通过ws.onmessage=function(event){}实现)。
在与服务器建立websocket连接之后,还包括:
检测websocket连接的状态(可以通过ws.readystate实现)。
监听websocket连接的错误(可以通过ws.onerror=function(event){}实现)。
下面通过服务器与客户端之间交互的方式来详细描述本发明实施例提供的一种混合模式移动应用的通信方法,如图3所示,本发明实施例提供的一种混合模式移动应用的通信方法,客户端上安装有混合模式移动应用,混合模式移动应用通过html5来实现,混合模式移动应用中包含html5页面,包括:
步骤301:客户端向服务器发送携带握手信息的websocket连接的http请求,握手信息中包括:第一握手信息、第二握手信息和第三握手信息。
举例来说,客户端发出的websocket连接的http请求如下:
get/demohttp/1.1
host:example.com
connection:upgrade
sec-websocket-key2:129985y31.p00
upgrade:websocket
sec-websocket-key1:4@146546xw%0l15
origin:http://example.com
[8-bytesecuritykey]
其中,“upgrade:websocket”表示这是一个特殊的http请求,请求的目的就是要将客户端和服务器端的通讯协议从http协议升级到websocket协议。
“sec-websocket-key1”表示第一握手信息,具体的内容为:“4@146546xw%0l15”。
“sec-websocket-key2”表示第二握手信息,具体的内容为:“129985y31.p00”。
[8-bytesecuritykey]为第三握手信息。
步骤302:服务器创建套接字,利用套接字实时监测是否收到客户端发来的websocket连接的http请求,当接收到http请求时,获取http请求的头信息中的握手信息。
具体地,获取第一握手信息、第二握手信息和第三握手信息。
步骤303:服务器获取第一握手信息中的数值型字符,确定第一握手信息中的空格的第一数量。
具体地,第一握手信息中的数值型字符为:4、1、4、6、5、4、6、0、l、1、5,第一数量为3。
步骤304:服务器根据第一握手信息中的数值型字符,生成第一字符串,将第一字符串转换为第一整型数字。
具体地,第一字符串为41465460l15,第一整型数字为41465460l15。
步骤305:服务器根据第一整型数字和第一数量,确定第二整型数字。
具体地,根据公式一,确定第二整型数字,公式一为:
根据公式一计算得到第二整型数字为:13821820039。
步骤306:服务器将第二整型数字转换为第一网络字节数组。
具体地,将第二整型数字转换为4个字节的所述第一网络字节数组。
步骤307:服务器获取第二握手信息中的数值型字符,确定第二握手信息中的空格的第二数量。
具体地,第二握手信息中的数值型字符为:1、2、9、9、8、5、3、1、0、0,第二数量为4。
步骤308:服务器根据第二握手信息中的数值型字符,生成第二字符串,将第二字符串转换为第三整型数字。
具体地,第二字符串为:1299853100,第二整型数字为:1299853100。
步骤309:服务器根据第三整型数字和第二数量,确定第四整型数字。
具体地,根据公式二,确定第四整型数字,公式二为:
根据公式二计算得到第四整型数字为:324963275。
步骤310:服务器将第四整型数字转换为第二网络字节数组。
具体地,将第四整型数字转换为4个字节的第二网络字节数组。
步骤311:服务器将第一网络字节数组、第二网络字节数组与第三握手信息合并,生成第三网络字节数组。
具体地,第三握手信息可以是8字节的随机字符。
将4个字节的第一网络字节数组、4个字节的第二网络字节数组和第三握手信息的8个字符依次连接,生成16个字节的第三网络字节数组。
步骤312:服务器利用md5算法计算出第三网络字节数组的哈希值,将第三网络字节数组的哈希值作为websocket连接的应答信息。
具体地,利用md5算法对第三网络字节数组进行加密,生成安全密钥,将该安全密钥作为应答信息。
步骤313:服务器将应答信息发送给客户端。
具体地,服务器可以将携带应答信息的如下内容发送给客户端:
http/1.1101websocketprotocolhandshake
upgrade:websocket
connection:upgrade
websocket-origin:http://example.com
websocket-location:ws://example.com/demo
[16-bytehashresponse]
其中,[16-bytehashresponse]为应答信息。
具体地,服务器将应答信息发送给客户端表明服务器获取了客户端的http请求,同意创建websocket连接。
步骤314:客户端对应答信息进行验证,当通过验证时,建立与服务器的websocket连接。
具体地,客户端和服务器之间建立websocket连接之后,客户端和服务器的交互就和普通的套接字网络应用程序是一样的了,客户端和服务器可以通过这个通道双向传输数据了。
步骤315:客户端与服务器之间通过websocket连接进行实时通信。
具体地,客户端利用html5页面调用websocketjavascript接口;通过websocketjavascript接口与服务器基于websocket连接进行实时通信。
如图4所示,本发明实施例提供了一种服务器,包括:
监听单元401,用于创建套接字,利用所述套接字实时监测是否收到客户端发来的websocket连接的http请求,所述http请求的头信息中包括:握手信息;
连接建立单元402,用于当接收到所述http请求时,获取所述http请求的头信息中的握手信息;根据所述握手信息,生成网络字节数组;根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息;将所述应答信息发送给所述客户端,以使所述客户端对所述应答信息进行验证;当所述应答信息通过验证时,实现与所述客户端的所述websocket连接;
通信单元403,用于与所述客户端的混合模式移动应用通过所述websocket连接进行实时通信。
在本发明一实施例中,所述握手信息中包括:第一握手信息、第二握手信息和第三握手信息;
所述连接建立单元,在执行所述根据所述握手信息,生成网络字节数组时,具体用于:
获取所述第一握手信息中的数值型字符,确定所述第一握手信息中的空格的第一数量;
根据所述第一握手信息中的数值型字符,生成第一字符串,将所述第一字符串转换为第一整型数字;
根据所述第一整型数字和所述第一数量,确定第二整型数字;
将所述第二整型数字转换为第一网络字节数组;
获取所述第二握手信息中的数值型字符,确定所述第二握手信息中的空格的第二数量;
根据所述第二握手信息中的数值型字符,生成第二字符串,将所述第二字符串转换为第三整型数字;
根据所述第三整型数字和所述第二数量,确定第四整型数字;
将所述第四整型数字转换为第二网络字节数组;
所述连接建立单元,在执行所述根据所述网络字节数组和所述握手信息,生成所述websocket连接的应答信息时,具体用于:
将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组;
确定所述第三网络字节数组的哈希值,将所述第三网络字节数组的哈希值作为所述websocket连接的应答信息。
在本发明一实施例中,所述连接建立单元,在执行所述根据所述第一整型数字和所述第一数量,确定第二整型数字时,具体用于:
根据公式一,确定所述第二整型数字,所述公式一为:
其中,z为所述第二整型数字,n为所述第一整型数字,n为所述第一数量;
所述连接建立单元,在执行所述根据所述第三整型数字和所述第二数量,确定第四整型数字时,具体用于:
根据公式二,确定所述第四整型数字,所述公式二为:
其中,k为所述第四整型数字,m为所述第三整型数字,m为所述第二数量。
在本发明一实施例中,所述第三握手信息,包括:8个字符;
所述连接建立单元,在执行所述将所述第二整型数字转换为第一网络字节数组时,具体用于:依次将所述第二整型数字的每两个字节转换为一个ascii码;对所述第二整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第一网络字节数组;
所述连接建立单元,在执行所述将所述第四整型数字转换为第二网络字节数组时,具体用于:依次将所述第四整型数字的每两个字节转换为一个ascii码;对所述第四整型数字转换得到的至少一个ascii码进行逆序处理,生成4个字节的所述第二网络字节数组;
所述连接建立单元,在执行所述将所述第一网络字节数组、所述第二网络字节数组与所述第三握手信息合并,生成第三网络字节数组时,具体用于:将4个字节的所述第一网络字节数组、4个字节的所述第二网络字节数组和所述第三握手信息的8个字符依次连接,生成16个字节的所述第三网络字节数组。
在本发明一实施例中,所述连接建立单元,在执行所述确定所述第三网络字节数组的哈希值时,具体用于:利用md5算法计算出所述第三网络字节数组的哈希值。
如图5所示,本发明实施例提供了一种客户端,所述客户端上安装有混合模式移动应用,所述混合模式移动应用通过html5来实现,所述混合模式移动应用中包含html5页面;包括:
交互单元501,用于向服务器发送携带握手信息的websocket连接的http请求,以使所述服务器根据所述握手信息,生成所述websocket连接的应答信息;
连接搭建单元502,用于接收所述服务器发来的所述应答信息,对所述应答信息进行验证,当通过验证时,建立与所述服务器的所述websocket连接;利用所述html5页面调用websocketjavascript接口;通过所述websocketjavascript接口与所述服务器基于所述websocket连接进行实时通信。
如图6所示,本发明实施例提供了一种通信系统,包括:
本发明实施例中任一所述的服务器601和至少一个本发明实施例中所述的客户端602。
图6中示出了三个客户端602。
在本发明实施例中,在搭建服务器时,确保服务器环境(ip及端口号)能被手机访问进行数据报文通信,部署已开发好的能够兼容websocket的服务端服务程序,点击启动服务,即可监听客户端接入,监控到客户端正常接入后,可单独进行消息推送,也可以群发消息或转发。客户端的实施,安装混合模式移动应用,确保网络能访问到服务器即可,html5网页应在混合模式移动应用启动后一直与服务器保持连接,服务器可随时推送即时消息。
本发明各个实施例至少具有如下有益效果:
1、在本发明实施例中,服务器在接收到客户端发来的websocket连接的http请求后,根据websocket连接的http请求,生成网络字节数组,然后,生成应答信息,在应答信息通过客户端验证后,与客户端之间建立websocket连接,通过websocket连接与客户端的混合模式移动应用进行实时通信,只要服务器和客户端任何一方不关闭websocket连接,websocket连接即可一直存在,客户端无需不断向服务器发送建立连接的请求,大大降低了通信资源的消耗。
2、在本发明实施例中,在客户端与服务器之间建立了websocket连接之后,客户端与服务器之间不需要每次通信都发起http请求来建立客户端与服务端的连接,而是仅在第一次发起websocket连接的http请求后就建立起tcpsocket连接,从而能够实现客户端与服务器之间的实时通信,提高了通信效率。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。