一种基于Websocket协议的即时通讯方法

文档序号:7553890阅读:1218来源:国知局
专利名称:一种基于Websocket协议的即时通讯方法
技术领域
本发明涉及一种计算机网络处理技术,特别是教育信息化行业的基于Websocket协议的即时通讯方法。
背景技术
随着教育信息化的推广以及最近几年移动互联网的飞速发展,依靠校讯通的短信、彩信等通道建立的家长、教师沟通桥梁已经越来越不能满足家长的需要,家长需要的是能在线跟老师实时交流,能传输图片、语音的沟通工具。在保障用户师隐私的同时,他们希望能在网站或者手机上能即时的跟好友沟通交流。目前网站注册用户已有几百万,日活跃用户有一万左右,传统的基于servlet的阻塞技术是一个连接启用一个线程,这样就无法满足这么多的活跃用户长连接。而作为传统实现comet的技术的定时刷新,由于需要在很短的间隔内不停发送请求用来获取服务状态,导致服务负载增大,而且考虑到在手机终端上,频繁的定时刷新请求会导致手机电量很快消耗。在聊天消息的处理上,传统方式是将消息插入到数据库中,然后判断用户是否在线,如果在线侧投递给用户,同时将消息状态设置为已投递,如果没有侧保留,等用户下次登录时候发送离线消息给用户。由于网站活跃用户人数过多,这次对数据库的频繁访问会增加数据库压力导致系统故障的增加,而且这种方式也不能很好处理群组消息。发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于Websocket协议的即时通讯方法。
为了解决上述技术问题,本发明公开了一种基于Websocket协议的即时通讯方法,在网络通讯层和业务逻辑层之间加入Websocket协议和消息队列服务HornetQ进行消息传输; 使用基于开源的网络处理框架netty的webbit框架提供websocket协议的基本服务,在websocket握手协议成功后,客户端与服务建立网络链接,发送认证登录信息,认证通过后,服务端启动消息队列服务HornetQ,将客户端登录用户加入到等待会话队列中等待消息的激活,收到激活消息后,通过websocket协议将消息返回给客户端。
本发明中,基于websocket的im技术,nio的高并发长连接,以及基于hornetq消息队列的高性能消息处理。通过websocket协议穿透防火墙发送即时消息数据,在消息队列服务HornetQ上注消息监听,快速处理用户消息。
本发明中,将多个队列同时绑定一个地址,用于实现群聊功能。
本发明中,设置有效时间,在有效时间内未能被处理的消息都会自动转到过期队列中,后台服务将这些过期的消息保存进数据库,在终端上线时进行提醒服务。
WebSocket是Html 5 —种新的协议,它实现了浏览器与服务器的全双工通信,HornetQ是一个支持集群和多种协议的可嵌入、高性能的异步消息系统,具有持久化的消息引擎性能和灵活的集群功能。本发明米用了 html5中的websocket来作为实时通讯的技术,目前支持websocket的浏览器有ie9, safar1、firefox、chrome已经涵盖了所有的主流浏览器,在不支持websocket的浏览器上,本发明采用了 flash作为替换方案。为了解决大量的长连接,底层采用了基于netty实现的nio框架,减少长连接所带来的传统线程池消耗,为了减轻数据库处理消息的压力,采用了 hornetq作为高性能的队列服务,利用hornetq的多queue可以绑定同一个address的特性,将班级的address与用户个人queue绑定,轻松实现了群聊功能。为了使系统的负载能力大幅提供,本发明对每个消息都设置了有效时间,在有效时间内未能被处理的消息都会自动转到过期队列中,后台服务会自动将这些过期的消息保存进数据库,以备以后查询检索。有益效果:本发明基于websocket、Hornetq的im方法,只需要使用一种通讯协议,就可以实现无缝接入手机、web、pc等多种不同形式的客户端,实现客户端和服务器的实时通信。基于hornetq的消息队列提供了高性能、高实时的消息处理机制。本发明尤其是基于Websocket、Hornetq技术的web、手机、pc的实时聊天技术,在大量长连接情况下,聊天服务的性能平滑扩展问题,涉及到聊天服务器处理性能和扩展能力的提升。本发明解决了高并发高链接情况下快速处理用户消息,提高系统的负载均衡能力,实现了长连接情况下聊天服务器的性能提升和能力的扩展,降低了频繁访问时数据库系统故障,有效的处理了群组消息。


下面结合附图和具体实施方式
对本发明做更进一步的具体说明:
图1为现有技术的传统不意图。图2为基于Websocket协议的即时通讯技术不意图。图3为基于Websocket协议的即时通讯架构图。
具体实施例方式如图1和图2所示,本发明相对于现有技术,提供了一种基于Websocket协议的即时通讯方法,在网络通讯层和业务逻辑层之间加入Websocket协议和消息队列服务HornetQ进行消息传输;使用基于开源的网络处理框架netty的webbit框架提供websocket协议的基本服务,在websocket握手协议成功后,客户端与服务建立网络链接,发送认证登录信息,认证通过后,服务端启动消息队列服务HornetQ,将客户端登录用户加入到等待会话队列中等待消息的激活,收到激活消息后,通过websocket协议将消息返回给客户端。本发明通过websocket协议穿透防火墙发送即时消息数据,在消息队列服务HornetQ上注消息监听,快速处理用户消息。本发明将多个队列同时绑定一个地址,用于实现群聊功能。本发明设置有效时间,在有效时间内未能被处理的消息都会自动转到过期队列中,后台服务将这些过期的消息保存进数据库,在终端上线时进行提醒服务。本发明实现了 web浏览器、手机终端、PC机相互访问时提高了访问速度,减少了数据库连接次数,实现了基于hornetq的多queue连接同一 address的群组模式。并且在展现层中抽象出网络通讯层,更好的应用webscoket进行数据访问。
如图2所示,本发明在展现层中加入了网络通讯层,网络通讯层的作用是应用webscoket连接业务逻辑层,将前台资源例如图片、消息、语音等信息,传输到数据库或者其他终端设备。如果浏览器不支持webscoket,就使用flash作为替换方案,实现以上功能。同时,本发明利用hornetq技术,将多queue可以绑定同一个address,这就实现了群聊功能。在消息处理机制中,本发明采用了设置有效时间,在有效时间内未能被处理的消息都会自动转到过期队列中,后台服务会自动将这些过期的消息保存进数据库,在终端上线时进行提醒服务。
5.1 WebSocket 介绍: UHTML5规范中定义,WebSocket在浏览器和服务器之间采用单socket全双工传输来“推送”和“拉取”信息。可以有效的避免Comet中存在的连接和移植问题。
2、在服务器和客户端之间,通过WebSocket协议在第一次“握手”时建立,同时它也是基于底层的TCP/IP协议。客户端和普通的浏览器一样通过80或443端口和服务器进行请求握手,服务器根据http header识别websocket请求,握手成功后就进入到数据的长连接传输阶段。
3、WebSocket的数据传输是基于巾贞的方式,数据以utf_8编码。Websocket使浏览器不需要安装插件,就可以实现web通信的高效性和稳定性。
4、WebS0Clet数据帧能够以双通道模式发送和接受数据,成功链接后,客户端和服务器数据交互是通过浏览器里的websocket接口中onmessage和postmessage方法实现。
5.2 Html5 WebSocket 在应用层的特点: I无缝穿过防火墙和路由器 I支持跨域交流 I兼容二进制数据 I完美整合基于cookie的认证 I支持http负载平衡5.3 HornetQ 介绍: HornetQ是一个支持集群和多种协议,可嵌入、高性能的异步消息系统,完全支持JMS,并能够定义属于自己的消息API,最大限度的提升了 HornetQ的性能和灵活性。
5.4 HornetQ 特点: UHornetQ在消息引擎方面具有持久化性能。
2、完全使用POJO设计,尽量不依赖第三方包,既可以独立运行也可以减少入侵性,同时可以与其他java应用程序服务器集成使用。
3、具有完善的错误处理机制,提供故障自动转移和服务器复制功能,可以减少消息丢失。
4、具有灵活 的集群功能,提升性能的消息负载均衡,可以灵活的配置消息路由。
5、提供大量的管理API和监控服务器,可以无缝与应用程序服务器整合,共同工作再一个HA环境中。
如图3软件架构图所示,本实施案例采用了 N层架构。层次之间采用松散耦合,即一个层次的修改,尽可能小的影响其他层次,最好是零更改。N层架构包括:UI展现层、n逻辑层、服务层、业务层、持久层。UI展现层:提供给用户的web页面、手机终端页面、PC客户端界面。本层只提供交互的展现,例如web页面的布局、手机终端的屏幕分辨率、PC客户端的按钮。UI逻辑层:基于n展现层的n逻辑,例如web页面具体下拉列表的实现类、手机终端的通信方式、PC客户端的按钮的实现类等。服务层:也叫应用层,主要是将n逻辑层的业务流进行粒度分析,制定出相应粒度方案,然后暴露服务、注册服务,最后根据具体的业务逻辑层的业务逻辑调用持久层,把最后结果返还给n逻辑层。业务层:也叫业务逻辑层,主要是提供整个系统的业务逻辑,来源是项目前期的需求分析后形成的领域模型。根据领域模型,抽象出具体的实体类、控制类、边界类,再根据具体实现类,制定出不同的实现算法,以供服务层调用,在业务层中,可以应用当前比较流行的spring框架。因为Spring框架拥有IOC和AOP特点。持久层:提供数据库访问的便捷,将以二维表形式的数据库,orm成面向对象的对象实体。以供服务层调用。接下来我们了解一下基于websocket、hornetq技术实现的校讯通互联网聊天服务的代码样列,其中包括 AppServerHandler, UserSession, HornetPubsublmpl。I AppServerHandler处理客户端的登录请求,负责维护连接的合法性。AppServerHandler提供了一些方法。以下有具体的代码说明及具体实现。AppServerH andler提供了以下几个重要的方法:
1.AppServerHandler ();构造函数
2.0nOpen (WebSocketConnection connection);新的 WebSocket 连接
3.0nClose (WebSocketConnection connection);关闭 WebSocket 连接
4.0nMessage(WebSocketConnection connection, String message);将前台的jason消息传递到后台
5.User authenticate (String from, String token);用户鉴定
I UserSession负责处理用户的消息请求,负责与hornetq服务的接口。UserSession提供了一些方法。以下有具体的代码说明及具体实现。1.load (User user);读取用户信息
2.get (String uid) ;UserSession 的 get 方法
3.attachConnection (WebSocketConnection connection);建立连接
4.detachConnection (WebSocketConnection connection);分离连接
5.cleanUp ();没有连接
6.process (String action, JsonObject jsonOb ject);进程说明
7.process (MessageRequest req);对 process 进行了重载
8.send (ResponseData data);发送消息
I HornetPub sub Imp I 负责 hornetq 队列服务的启动、监听、投递。HornetPubsublmpl提供了一些方法。以下有具体的代码说明及具体实现。1.HornetPubsublmpl (ClientSession session);构造函数2.subscribe(String topic, String queue, final SubscribeHandlerhandler);建立 queue3.unsubscribe (String queue);关闭 queue4.publish (String topic, Object message, boolean duarble, long expir);启动hornetq队列服务 5.serialize (Object o);序列化 6.deserialize (byte [] in);发序列化 在浏览器前端上,本发明抽象出了网络通讯层,如果浏览器支持webscoket就使用浏览器的原生websocket能力,如果浏览器不支持,就使用flash作为替换方案,经过实验证明,webscoket的实时性得到了很好的体现。
本实施例中可能涉及的英文名词以及中文含义对应如下: HTTP超文本传输协议 ie9 微软公司出品的网络浏览器 safari苹果公司出品的网络浏览器 firefox M0ZZLIA开源组织出品的网络浏览器 chrome google公司出品的网络浏览器 WebSocket网页套接字 HornetQ redhat开源的消息队列服务 Netty redhat开源的网络处理框架 Nio多路(non-bloking)非阻塞式的高伸缩性网络I/O servlet在JAVA服务器上运行的小程序 queue 队列 comet基于HTTP长连接的服务器推送技术 address 地址 IM即时通讯 flash由macromedia公司推出的交互式矢量图和Web动画的标准本发明提供了一种基于Web socket协议的即时通讯方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
权利要求
1.一种基于Websocket协议的即时通讯方法,其特征在于,在网络通讯层和业务逻辑层之间加入Websocket协议和消息队列服务HornetQ进行消息传输; 使用基于开源的网络处理框架netty的webbit框架提供websocket协议的基本服务,在websocket握手协议成功后,客户端与服务建立网络链接,发送认证登录信息,认证通过后,服务端启动消息队列服务HornetQ,将客户端登录用户加入到等待会话队列中等待消息的激活,收到激活消息后,通过websocket协议将消息返回给客户端。
2.根据权利要求1所述的一种基于Websocket协议的即时通讯方法,其特征在于,通过websocket协议穿透防火墙发送即时消息数据,在消息队列服务HornetQ上注消息监听,快速处理用户消息。
3.根据权利要求1或2所述的一种基于Websocket协议的即时通讯方法,其特征在于,将多个队列同时绑定一个地址,用于实现群聊功能。
4.根据权利要求1或2所述的一种基于Websocket协议的即时通讯方法,其特征在于,设置有效时间,在有效时间内未能被处理的消息都会自动转到过期队列中,后台服务将这些过期的消息保存进数据库,在终端上线时进行提醒服务。
全文摘要
本发明公开了一种基于Websocket协议的即时通讯方法,在网络通讯层和业务逻辑层之间加入Websocket协议和消息队列服务HornetQ进行消息传输;使用基于开源的网络处理框架netty的webbit框架提供websocket协议的基本服务,在websocket握手协议成功后,客户端与服务建立网络链接,发送认证登录信息,认证通过后,服务端启动消息队列服务HornetQ,将客户端登录用户加入到等待会话队列中等待消息的激活,收到激活消息后,通过websocket协议将消息返回给客户端。
文档编号H04L29/06GK103139051SQ20131009311
公开日2013年6月5日 申请日期2013年3月22日 优先权日2013年3月22日
发明者刘本中, 司震, 郑国松, 胡明慧, 刘斌, 宋炜伟 申请人:南京信通科技有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1