当前位置:首页 期刊杂志

基于WebSocket的消息推送系统①

时间:2024-05-04

王佃来,宿爱霞,安晏辉

1(首钢工学院 信息工程系,北京 100144)2(中国软件评测中心,北京 100048)

基于WebSocket的消息推送系统①

王佃来1,宿爱霞2,安晏辉1

1(首钢工学院 信息工程系,北京 100144)2(中国软件评测中心,北京 100048)

为解决学团管理工作中教师与学生信息交换效率低和反馈消息统计困难等问题,基于WebSocket协议设计实现了一个包括教师端和学生端的实时消息推送系统.并对系统设计实现中的关键模块和技术进行深入研究和分析.测试结果表明,该系统稳定可靠,满足消息推送软件效率和实时方面的需求.

WebSocket协议;消息推送;实时性

随着高等院校学生规模的不断扩大和学生管理质量要求的不断提高,负责学生管理工作的教师与学生之间的信息交换量大幅度提高,打电话和发短信等传统沟通模式存在工作量大、效率低和数据无法统计分析等缺点.因此,迫切需要一种全新的、高效的信息传递工具或方式,解决学生与学生管理教师之间的信息交换问题.

近年来信息技术飞速发展,人类对移动通讯和网络信息的需求急剧上升.迄今为止,全球移动通讯用户已超过50亿,互联网用户已合逾20亿,中国移动通讯用户达到7.38亿,移动通讯和互联网已成为当代人不可或缺的信息来源和交流工具.而大学生则是其中最具活力的人群,基本上人手一部智能手机,并且均接入互联网,手机成为当代大学生信息获取和交流沟通必备工具.这为消息推送系统的设计与实现提供了坚实的物质基础,也为解决学生与教师之间高效信息交换难题提供了契机.

移动通讯技术和互联网技术的高速发展也带动了消息推送和即时通讯系统的蓬勃发展.后前,移动推送技术的实现主要有以下几种方式:基于移动平台内置的推送技术、第三方推送平台技术和基于开放的网络协议实现的推送技术(如基于 XMPP,MQTT或WebSocket等),其中基于开放网络协议的推送技术具有良好的适用性和灵活性,受到许多开发的亲睐.关于XMPP、MQTT和WebSocket协议的详细介绍和优缺点比较请参阅文献[10],在此不再赘述.

本文要解决的首要问题是方便快捷的实现学生和教师之间的消息传递,更确切的说是如何方便快速的将学生管理类信息如:学团管理、班级管理、招生就业和毕业信息传达给学生,并且确认学生是否成功接收.因此,教师与推送服务器端的接入软件最好是不需要任何安装就可以使用的软件,如浏览器,而且教师发送软件时一般会使用操作方便的电脑,这样可提高录入信息和发送信息效率;学生端接入服务器方式应该不受时间和空间的限制,因此手机App软件恰好解决了这个问题,学生一般情况无法一直在电脑前,但其手机会随身携带.通过上述分析可以看出教师与服务器之前的协议最好支持Web,因此WebSocket协议成为本文开发的首选.WebSocket是HTML5提出的一个新的通信协议,它可以在服务器和浏览器之间架设一个全双工的通信信道并使用套接字来传输数据[8].WebSocket协议主要用于解决基于Web的推送,实时性强,效率高.有许多学者基于WebSocket协议实现了相关的消息推送系统,请参阅文献[5-7,11].

基于上述分析,本文在研究了WebSocket协议的基础上设计并实现了一个消息推送系统,该系统解决了教师与学生之间的消息推送问题,并在学院信息工程系做了测试和试运用.

1 消息推送系统的设计

1.1 系统总体结构设计

消息推送系统主要包括以下模块:教师消息推送子系统、WebSocket消息服务子系统和学生消息接收子系统,系统结构图如图1所示.

图1 消息推送系统结构图

教师消息推送系统包括消息管理模块、消息推送模块和消息统计分析模块.消息管理模块完成消息的添加、修改、删除、查询和审核功能;消息推送模块将通过审核的消息推送学生的功能;消息统计分析模块完成对推送消息的成功率、学生回馈信息和消息月、周统计等功能.

WebSocket消息服务子系统主要完成教师和学生之间消息的实时传功能.为了实现实时性,采用广播机制,将收到的消息广播给每一个连接到WebSocket服务的用户.

学生消息接收子系统包括消息接收模块、消息反馈模块和消息管理模块,主要完成消息接收、消息反馈和手机App端消息显示、查询与删除功能.

1.2 系统网络结构设计

系统网络结构如图2所示.为保证消息的准确性避免错误和无效消息的不良影响,教师用户分为以下三种角色:消息编辑员、消息审核员和消息发送员.首先,消息编辑员通过Internet使用部署在Web服务器端的教师消息推送子系统完成消息的编辑和修改,确认消息无误后交由消息审核员审核,消息审核无误后,消息发送员与WebSocket消息服务连接并通过该服务完成消息发送;如果消息未通过审核则消息返回消息编辑员重新编辑,直到消息无误后再提交上述流程进行消息发送.发送后的消息通过消息统计模块分析消息发送的情况,根据消息接收的成功率决定是不是对接收失败的消息重新发送.

WebSocket消息服务端完成消息的发送和接收中转,实现将教师下发的消息推送到学生端,此外完成学生端的反馈消息返回到教师端.

学生用户通过手机APP经由无线网络与WebSocket消息服务连接,完成消息的接收,并按消息要求完成反馈任务.

1.3 系统关键模块设计

系统中主要涉及教师端消息推送、WebSocket消息服务和学生端消息接收三个关键模块,下面分别对其进行详细描述.

(1) 教师端消息推送模块设计

为了方便操作和便用,教师端消息推送模块使用网页模式实现消息推送.首先,网页的onload事件中判断浏览器是否支持WebSocket,如果不支持在页面中给出提示,建议用户更换支持WebSocket的浏览器.如果支持则尝试与服务器建立连接,如果建立连接成功给出提示,可进行消息推送,如果建立连接不成功,提示用户无法建立连接,消息无法推送.具体流程如图3所示.

图2 系统网络结构图

(2)WebSocket服务模块设计

WebSocket服务模块主要完成以下功能:教师端和学生端用户的连接维护、将教师端的消息推送到学生端用户和处理学生的反馈信息.

教师端和学生端用户的连接维护功能采取以下机制实现:首先,为保证系统安全,在建立连接时需要用户鉴权,鉴权成功的用户,将以一个唯一标识加入消息推送链表,该链表做为推送消息的用户列表,在WebSocket服务内存中维护,鉴权失败的用户将做抛弃处理.其次,鉴权成功用户的唯一标识同时被写入数据库用做消息推送数据对比.教师端由于用户较少,唯一标识采用手工分配的方式,学生端则采用由手机App 自动生成的方式.最后,如果用户退出连接,则将该用户的唯一标识从消息推送链表中移除,数据库中并不删除该用户信息.连接建立流程见图4.

消息推送功能采取以下方式实现:首先,读取WebSocket服务端的消息推送链表数据(记为listWeb-Socket)和数据库中的用户列表(记为listDB);然后从listDB中的取一用户,判断该用户是否在listWebSocket中,如果在则直接将消息推送给用户,否则将消息写入未接收消息数据表,表示该用户没有接收到该消息,用户在下次登录时将发送给用户,如果用户未接收消息超过10条,则只发最近的10条消息,避免用户手机端接收过多消息.依次循环直到listDB中的所有用户都被遍历为止.

图3 教师端消息推送流程图

(3)学生端消息接收模块设计

学生端消息App采取以下流程实现消息接收.首先,手机App在移动端生成一个唯一的UUID和用户鉴权加密字符串,以上述两个字符串为参数与WebSocket服务发起建立连接请求,服务端使用加密字符串进行鉴权,鉴权成功则成功连接建立.成功建立连接后,在手机App端实现WebSocket协议监听连接状态,主要监听以下三个方法:onMessage()、onError()和 onClose()方法.如果 onMessage()方法中接收到消息,则调用手机端的Handler完成振铃、将消息写入到手机端数据库等操作;如果onClose()方法调用,则说明连接关闭,手机App弹出提示信息通知用户连接关闭,并尝试请重新连接;如果onError()方法调用,则说明发生错误,将弹出提示信息通知用户,并尝试重新启动WebSocket连接建立模块.

图4 用户与 WebSocket服务建立连接流程

2 消息推送系统的实现

2.1 系统开发环境

消息推送系统的开发环境如下所示:操作系统为window8.1,开发工具为 Eclipse4.5.1,JDK1.7.X,Web服务器采用Tomcat8.x;WebSocket的服务端实现使用Tomcat8.x的API进行二次开发而成,WebSocket移动端的实现采用开源http://java-websocket.org/提供的客户端协议实现,并做相应修改完成,浏览器使用Google Chrome,版本 48.0.2564.10 m (64-bit).

2.2 系统关键模块实现

(1)教师端消息推送模块实现

消息推送系统教师端的设计采用Struts2、Spring和JPA集成框架开发,其中Struts2主要为控制层,Spring为业务辑层的Java Bean提供整体的管理功能,JPA提供数据库的操作功能,整体采用注解方式实现,很好的减少了繁琐的配置文件配置,提高了开发效率,教师端实现界面如图5所示.

图5 消息推送端用户界面

通过浏览器推送消息的核心代码实现如下:

(2)WebSocket消息服务模块实现

WebSocket有许多Web服务器提供了实现,本文基于 Oracle发布的 JSR356规范,使用 Apache Tomcat8.x下的实现进行二次开发而成.其核心代码如下:

@ServerEndPoint(value="/MeWebSocket")public class MeWebSocket{

其中,@ServerEndpoint是一个类层次注解,它实现将当前类定义成一个WebSocket服务器端,value指定用户连接访问的服务器URL地址.@OnOpen、@OnClose和@OnError注解分别指定当WebSocket服务打开、关闭和出错时执行的方法.@OnMessage注解标明当服务器接收到客户端消息时执行onMessage()方法.

(3)学生端消息接收模块实现

学生端手机App基于android4.3平台开发,android端WebSocket协议使用http://java-websocket.org/提供的jar包,并其基础上进行封装.实现了与WebSocket服务端边接功能.具体实现过程如下:首先,手机端App启动时在Activity的onCreate()方法中完成与WebSocket服务器的连接;建立成功能后监听WebSocket的以下事件 OnMessage()、OnClose()和OnError()事件,完成消息的接收、连接关闭和出错信息.具体类图见图6.

图6 学生端消息发送类图

图6为手机端主要类的类图,图中MainActivity类是手机App的启动界面,在onCreate()方法中调用connectToWebSocket()方法完成与服务器端的连接,该类有四个主要的成员变量:handler、handlerClose、handlerError 和 mySocketClient,其中 handler、handlerClose和handlerError重载Handler类的handleMessage方法分别处理MySocketClient监听的onMessage()、onClose()和 onMessage()方法.MySocketClient类主要完成与WebSocket服务器的连接与消息事件的监听与响应,其onMessage()负责处理WebSocket服务器端消息,onClose()方法处理与WebSocket连接的关闭事件,onError()方法处理WebSocket错误事件.基于效率和程序健壮性的考虑MySocketClient的上述三个方法均采取多线程机制,更好完成消息处理.同时,为了提高效率和开发方便性,MySocketClient作为MainActivity的内部类,这种机制可在MySocketClient的三个方法中直接使用handler、handleClose和handleError三个成员变量.

3 结语

本文基于WebSocket协议实现了一个实时消息推送系统,系统实现后在学院信息工程系师生中进行了测试和试运行,结果表明该系统运行稳定,有较高的可扩展和应用价值.在该系统的帮助下,学生管理工作教师与学生之间的信息交换效率和质量有较大提高,在一定程度上提升了信息工程系统的信息化水平,促进了学团管理工作水平和质量的提高.

后前,系统只实现了Android手机端软件,对苹果手机还没有开发相应的学生端软件,下一步的工作是完成iOS学生端系统软件的设计与开发.此外,值得注意的是本文采用的WebSocket协议是一种正在发展的Web规范,存在一定的兼容性和扩展问题,且实现是在Tomcat8.x提供的API基础上进行封装,也有一定的局限性,下一步工作重点是基于开源WebSocket项后独立实现该协议,进一步完善消息推送系统.

1 孙清国,朱玮,刘华军,等.Web 应用中的服务器推送技术研究综述.计算机系统应用,2008,17(11):116–120.[doi:10.3969/j.issn.1003-3254.2008.11.030]

2 彭亮.面向移动设备的XMPP协议的研究与应用[硕士学位论文].长沙:中南大学,2014.

3 王美妮,王颖,赵伟.基于 XMPP 协议消息推送机制的研究与实现.长春师范学院学报(自然科学版),2014,33(1):27–31.

4 Pimentel V,Nickerson BG.Communicating and displaying real-time data with WebSocket.IEEE Internet Computing,2012,16(4):45–53.[doi:10.1109/MIC.2012.64]

5 张玲,张翠肖.WebSocket服务器推送技术的研究.河北省科学院学报,2014,31(2):49–53.

6 李锡辉,杨丽.基于 WebSocket的服务器推送技术研究.网络安全技术与应用,2014,(6):45–46.

7 张艺.基于WebSocket的即时通信系统研究与实现.软件,2015,36(3):89–94.

8 陆晨,冯向阳,苏厚勤.HTML5 WebSocket握手协议的研究与实现.计算机应用与软件,2015,32(1):128–131,178.

9 杨健,周渊平.基于Android平台的多人视频聊天系统.计算机系统应用,2016,25(1):75–79.

10 陈涛,李娟.基于 MQTT 协议的推送技术研究.软件导刊,2016,15(3):18–21.

11 陈炜,苏厚勤,柴炯.基于 WebSocket技术水文资源监管系统的研究与实现.计算机应用与软件,2016,33(3):104–108,113.

Message Pushing System Based on Websocket Protocol

WANG Dian-Lai1,SU Ai-Xia2,AN Yan-Hui1

1(Department of Information Engineering,ShouGang Institute of Technology,Beijing 100144,China)2(China Software Testing Center,Beijing 100048,China)

A real-time message pushing system,including teacher side and student side,is designed and implemented based on the WebSocket protocol aimed to improve the low efficiency in information exchange between teachers and students and to overcome the difficulty in getting the statistical feedback.At the same time,the key models and major technology are thoroughly investigated and analyzed.The results of the test indicate that the proposed system is stable and robust,and it meets the needs of message pushing software in terms of high efficiency and property in real-time.

WebSocket protocol;message pushing;real-time

王佃来,宿爱霞,安晏辉.基于 WebSocket的消息推送系统.计算机系统应用,2017,26(9):87–92.http://www.c-s-a.org.cn/1003-3254/5973.html

2016-12-30;采用时间:2017-01-16

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!