本发明涉及一种基于websocket的混合模式移动应用实时消息推送方法,属于即时数据通信技术领域。
背景技术:
web领域的传统实时推送技术,也被称作realtime技术。这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。它有着广泛的应用场景,比如在线聊天室、在线客服系统、评论系统、webim等。之前为了实现实时推送效果,通常采用的方案是轮询(polling)和comet技术,comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案带来很明显的缺点,需要由浏览器对服务器发出httprequest,大量消耗服务器带宽和资源。
技术实现要素:
本发明所要解决的技术问题是,通信效率低,大量消耗服务器带宽和资源。
为了解决上述问题,提供一种基于websocket的混合模式移动应用实时消息推送方法,通过建立websocket连接使html5前段页面与服务端交互,实现即时消息的传递,具有通信效率高,带宽占用少的优点。
本发明解决以上技术问题的技术方案:一种基于websocket的混合模式移动应用实时消息推送方法,包括如下步骤:
s1、客户端向服务器发送一个http握手请求;
s2、服务器启动套接字监听收到的握手请求,读取握手请求的字符串,解析判断其中是否为包含websocket协议的头信息,若是,则生成应答信息,建立websocket连接,否则,不生成应答信息;
s3、客户端通过websocket连接和服务器交互信息。
作为本发明的进一步改进,进一步的,步骤2中包含websocket协议的头信息为sec-websocket-key1,sec-websocket-key2和8-bytesecuritykey。
作为本发明的进一步改进,进一步的,步骤2中生成应答信息,建立websocket连接包括如下步骤:
s21、逐个字符读取sec-websocket-key1头信息中的值,将数值型字符连接到一起放到一个临时字符串里,并统计所有空格的数量;
s22、将生成的临时字符串转换成一个整型数字,再除以所有空格的数量,获取浮点数并将之转换成整数型值;
s23、将整数型值转换为符合网络传输协议的key1字节数组;
s24、将sec-websocket-key2按步骤s21-s23生成key2字节数组;
s25、将8-bytesecuritykey和key1字节数组、key2字节数组合并成一个16位字节数组;
s26、将16位字节数组通过md5算法生成哈希值,服务器将哈希值作为安全密钥返回给客户端,同意创建websocket连接。
作为本发明的进一步改进,进一步的,步骤2中建立websocket连接后形成具有websocket协议和套接字连接功能的websocket服务器。
作为本发明的进一步改进,进一步的,客户端可通过html5用户界面调用websocketjavascript接口和服务器端来交互。
作为本发明的进一步改进,更进一步的,html5用户界面可封装到混合模式的应用里,或通过网页外部链接的方式调用。
本发明还提供一种基于websocket的混合模式移动应用实时消息推送系统,包括
握手请求单元,用于客户端向服务器发送一个http握手请求;
握手回复单元,用于服务器启动套接字监听收到的握手请求,读取握手请求的字符串,解析判断其中是否为包含websocket协议的头信息,若是,则生成应答信息,建立websocket连接,否则,不生成应答信息;
信息交互单元,用于客户端通过websocket连接和服务器交互信息。
作为本发明的进一步改进,更进一步的,握手回复单元中包含websocket协议的头信息为sec-websocket-key1,sec-websocket-key2和8-bytesecuritykey。
作为本发明的进一步改进,更进一步的,握手回复单元中包括:
读取统计单元,用于逐个字符读取sec-websocket-key1头信息中的值,将数值型字符连接到一起放到一个临时字符串里,并统计所有空格的数量;
获取转换单元,用于将读取统计单元生成的临时字符串转换成一个整型数字,再除以所有空格的数量,获取浮点数并将之转换成整数型值;
key1字节组转换单元,用于将获取转换单元生成的整数型值转换为符合网络传输协议的key1字节数组;
key2字节组转换单元,用于将sec-websocket-key2通过读取统计单元和获取转换单元获取的整数型值生成key2字节数组;
合并单元,用于将8-bytesecuritykey和key1字节数组、key2字节数组合并成一个16位字节数组;
秘钥生成单元,用于将16位字节数组通过md5算法生成哈希值,服务器将哈希值作为安全密钥返回给客户端,同意创建websocket连接。
总之,本发明采用基于tcp的协议建立一个websocket连接,只需一次连接成功就可实现的客户端和服务器通信的时时响应,无需客户端每次发起http请求来建立与服务端的连接,有效提高了通信效率,减少服务器带宽和资源消耗。
附图说明
图1是本发明的方法流程示意图。
图2是本发明的系统模块图。
具体实施方式
一种基于websocket的混合模式移动应用实时消息推送方法,包括如下步骤:
s1、客户端向服务器发送一个http握手请求;
s2、服务器启动套接字监听收到的握手请求,读取握手请求的字符串,解析判断其中是否为包含websocket协议的头信息,若是,则生成应答信息,建立websocket连接,否则,不生成应答信息;
s3、客户端通过websocket连接和服务器交互信息。
以下将对上述步骤s1~步骤s3中的操作规则、具体方法等进行详细说明:
本方法中websocket协议采用draft-hixie-thewebsocketprotocol-76版本描述,
其中步骤2中包含websocket协议的头信息为sec-websocket-key1,sec-websocket-key2和8-bytesecuritykey。
根据包含websocket协议的头信息,服务器作出答复回应,具体步骤如下:
s21、逐个字符读取sec-websocket-key1头信息中的值,将数值型字符连接到一起放到一个临时字符串里,并统计所有空格的数量;
s22、将生成的临时字符串转换成一个整型数字,再除以所有空格的数量,获取浮点数并将之转换成整数型值;
s23、将整数型值转换为符合网络传输协议的key1字节数组;
s24、将sec-websocket-key2按步骤s21-s23生成key2字节数组;
s25、将8-bytesecuritykey和key1字节数组、key2字节数组合并成一个16位字节数组;
s26、将16位字节数组通过md5算法生成哈希值,服务器将哈希值作为安全密钥返回给客户端,同意创建websocket连接。
如下给出一个典型的websocketupgrade信息:
服务器根据用户传递的握手信息来生成网络字节数组。
websocekt连接建立,实现了websocket握手信息的处理逻辑,形成一个具有基本功能的websocket服务器。整个websocket服务器由两个核心类构成,一个是websocketserver,另外一个是socketconnection。
客户端可根据需求设计html5用户界面,通过html5界面调用websocketjavascript接口和websocket服务器端来交互,可将页面封装到混合模式的应用里,或通过网页外部链接的方式调用,若想实现打开app就直接建立websocket连接,则可将该方法嵌入到初始页框架中。
本实施例还提供一种基于websocket的混合模式移动应用实时消息推送系统,如图2所示,包括
握手请求单元,用于客户端向服务器发送一个http握手请求;
握手回复单元,用于服务器启动套接字监听收到的握手请求,读取握手请求的字符串,解析判断其中是否为包含websocket协议的头信息,若是,则生成应答信息,建立websocket连接,否则,不生成应答信息;
信息交互单元,用于客户端通过websocket连接和服务器交互信息。
握手回复单元中包含websocket协议的头信息为sec-websocket-key1,sec-websocket-key2和8-bytesecuritykey。
握手回复单元中包括:
读取统计单元,用于逐个字符读取sec-websocket-key1头信息中的值,将数值型字符连接到一起放到一个临时字符串里,并统计所有空格的数量;
获取转换单元,用于将读取统计单元生成的临时字符串转换成一个整型数字,再除以所有空格的数量,获取浮点数并将之转换成整数型值;
key1字节组转换单元,用于将获取转换单元生成的整数型值转换为符合网络传输协议的key1字节数组;
key2字节组转换单元,用于将sec-websocket-key2通过读取统计单元和获取转换单元获取的整数型值生成key2字节数组;
合并单元,用于将8-bytesecuritykey和key1字节数组、key2字节数组合并成一个16位字节数组;
秘钥生成单元,用于将16位字节数组通过md5算法生成哈希值,服务器将哈希值作为安全密钥返回给客户端,同意创建websocket连接。
除上述实施例外,本发明还可以有其他实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明要求的保护范围。