基于MQTT协议研发安卓手机地震预警应用
2017-04-03周施文
周施文,郑 超,程 志
(福建省地震局,福州 350003)
0 引言
我国是世界上地震灾害最为严重的国家之一。随着移动通信和智能手机的普及和全民防震减灾意识的提高,国内手机应用市场上出现了相应的地震信息类应用。此类应用绝大多数以提供地震三要素(震时、震中、震级)信息为主,官方应用以中国地震台网的 “地震速报”为代表,第三方应用以成都高新减灾研究所的 “地震预警”为代表。在应用介绍里提到具有地震预警功能的国内手机应用,仅有成都高新减灾研究所的 “地震预警”应用,但是该应用的地震预警数据来源是基于较为简易的地震监测仪器和该所自主研发的地震监测系统,误报风险较大,并不具备官方权威性;而在日本,地震预警信息只有政府授权的组织和部门,如日本气象厅,才可发布地震预警信息。因此,研发一个基于官方地震数据来源、具备官方权威性的手机地震预警应用已不仅仅是市场所需,更是地震系统为大众提供地震预警服务的当务之急[1-2]。
实现手机地震预警应用需要采用高效、可靠、低耗的消息传输机制。目前主流的面向消息中间件协议有Java消息服务(JMS)、高级消息队列协议(AMQP)、流文本定向消息协议(STOMP)、可扩展通讯和表示协议(XMPP)、消息队列遥测传输(MQTT)等。基于上述各协议的中间件产品 (如Apache Qpid、ActiveMQ、RabbitMQ等)均能提供高效、可靠的消息传输服务。因此,各协议的功耗差别成为了本文选择的重要依据。经调研,MQTT协议 “体积”小、功能 “专一”,成为市面上手机APP的主要选择,代表应用为Facebook Messenger App。因此,MQTT协议成为本文搭建手机预警应用的选择。另一方面,目前主流的手机操作系统有安卓、苹果、微软和黑莓等。据统计,截至2015年,全球安卓操作系统份额达81%;2015年度中国手机市场上,搭载安卓系统的手机获得82.02%的关注比例,占据绝对主流。
基于上述两点,本文以安卓系统为目标,首先简略介绍MQTT相关资料,然后详细介绍基于MQTT协议开发安卓手机地震预警应用,并给出相关的测试评估结果。
1 MQTT协议简介
MQTT协议全称是消息队列遥测传输协议(Message Queuing Telemetry Transport), 由 IBM 公司主导开发,提供开源的实现。MQTT协议是面向消息中间件(Message-Oriented Middleware,MOM)的一种协议。MOM是一种异步、无阻塞、基于消息的通信技术,能够屏蔽操作系统和网络协议的差异,具有良好的可靠性和灵活性,特别适用于逻辑关系松散的分布式环境[3。基于此,MQTT协议具有以下几点特性:
(1)采用发布-订阅消息通信协议,提供一对多的消息发布模式。
(2)基于TCP/IP协议,提供3种消息服务质量 (Quality of Service, QoS):
①At Most Once,用0标识,消息最多被传递一次;在基于TCP/IP协议的网络中,消息可能会丢失或重复。
②At Least Once,用1标识,确保消息到达,但可能会重复传递消息。
③Once and Exactly Once,用2标识,消息保证传递且仅有一次传递。
(3)开销小,固定长度的消息头部是2字节,利于大数据并发时节省数据流量。
(4)支持处理客户端和服务器之间的连接丢失,如果客户端意外掉线,可使用 “遗愿和遗嘱”(Last Will和 Testament特性) 向服务器发布一条消息。
(5)支持绝大多数平台和编程语言,实现程序松耦合。
(6)易于实现,语法采用简单的动词集合,如connect、subscribe等。
1.1 MQTT协议基础模型
MQTT协议的基础模型中定义了3种角色:消息发布者Publisher、消息代理Broker和消息订阅者Subscriber,如图1所示。其中,消息代理即为消息代理服务端,负责管理消息发布者的注册和主题登记、消息订阅者的注册和主题订阅、消息的存储和转发。消息订阅者和消息发布者的角色可以根据场景的不同而互相转换。比如说,一个消息发布者可以同时向消息代理订阅主题并接收消息推送,从而成为消息订阅者,反之亦然。
MQTT协议屏蔽了具体的消息内容,以主题(Topic)为标识对发布的数据进行转发。发布者可以通过向不同主题发布不同的信息,提高信息发布的效率;订阅者可根据需要订阅相关的主题,减少冗余信息,提高信息的利用率。
图1 MQTT协议原理基础模型Fig.1 The fundamental model of MQTT
1.2 基于MQTT协议的消息代理软件
实现MQTT v3.1.1协议功能的消息代理软件有很多,其中开源的以Mosquitto、EMQTT(Erlang MQTT Broker)、VerneMQ为代表,闭源的以IBM公司的Websphere MQ和MessageSight为代表。其中,EMQTT和MessageSight突出了高并发功能,可支持百万级连接和消息并发。本文选择IBM MessageSight(虚拟机版)作为消息代理服务器,原因有3点:第一,便于安装,在虚拟机上导入MessageSight程序后配置,即可开始使用;第二,便于操作,MessageSight除了支持命令行配置之外,还带有可视化管理界面;第三,可以得到IBM的专业技术支持。
2 技术要素框架和应用模块
2.1 地震数据流
数据处理服务器接收到地震数据源发送的地震信息数据后,根据不同的信息,生成符合预定格式的地震预警数据和地震速报数据,通过不同的主题发送至消息代理服务器。安卓手机地震预警应用(以下简称预警应用)在连接MessageSight的时候会订阅相关主题,MessageSight会记录此信息,当接收到数据处理服务器发送的数据时,即时按主题推送至预警应用(图2)。预警应用根据接收到的数据和其所在的主题进行相关操作。本文的重点在实现预警应用与MessageSight的连接、主题订阅、消息接收和响应。
图2 地震数据流示意图Fig.2 The earthquake dataflow diagram
2.2 主题与数据格式
本文使用 “eewdata”和 “eqrdata”主题分别推送/接收地震预警数据和地震速报数据。两个主题的数据格式均采用JSON数据格式。地震预警数据包括发震时刻、震中经度、震中纬度、震中地名、震级和消息发送时刻等信息;地震速报数据包括自动/人工速报标识、震中地名、震中经度、震中纬度、震级、震源深度和发震时刻等信息。
2.3 预警时间和预估烈度
2.3.1 预警时间计算方法
本文采用的预警时间计算方法如图3所示。
设tw为用户所在位置的预警时间,TS为S波到达用户所在位置的时刻,T2为预警应用接收到预警数据的时刻(由预警应用即时获取),Tθ为地震发生时刻(由预警数据提供),Distance为用户所在位置到震中的距离(用户所在位置信息由预警应用获取,震中位置由预警数据提供,根据球面两点间距公式计算得出),VS为S波传播速度 (3.55 km/s)。假设服务器时间与终端系统时间均与因特网时间同步,预警时间计算公式如下所示:
2.3.2 用户所在地预估烈度计算方法
本文所使用的预估烈度计算方法如(2)所示。设m为震级(由预警数据提供),Intensity为用户所在地预估烈度。
2.4 安卓手机地震预警应用模块设计
安卓手机地震预警应用模块包括核心功能模块和辅助模块,核心功能模块包括连接模块、数据接收处理模块、信息展示模块;辅助模块包括数据库模块、定位模块、应用参数设置模块、地图模块、科普模块。本文主要介绍核心功能模块。
2.4.1 连接模块
预警应用通过MQTT协议连接MessageSight服务器,并订阅eewdata和eqrdata两个主题。应用安卓Service类在后台维持预警应用与MessageSight服务器的连接,包括断线重连等。
2.4.2 数据接收处理模块
当接收到MessageSight推送的数据包时,数据接收处理模块先提取主题名字,再从数据中提取各个参数值,生成可读性文本,对于地震预警,还需要计算用户所在地到震中的距离、预警时间和预估烈度,再激活相应的信息展示模块。
2.4.3 信息展示模块
信息展示模块有文本展示和地图展示,主要介绍文本展示部分。当接收到eewdata主题的信息时,将激活预警框。预警框中包含的信息有避震建议、预警倒计时、地震三要素、用户所在地预估烈度和与震中的距离,如图4所示;接收到eqrdata主题的信息时,将弹出速报通知。速报通知包含的信息有地震三要素、震中经纬度和震源深度,如图5所示。
每一条接收到的信息将以列表的形式展示,用户进入程序后可浏览信息。预警历史记录包含的信息有地震三要素、预警数据推送时刻和预警应用接收时刻,如图6所示。地震速报记录包含的信息有地震三要素、人工/自动速报标签、震源深度,如图7所示 (“[测试]”标签表示该条信息是测试数据。)
图3 预警时间计算示意图Fig.3 The schematic diagram of EEW time calculation
图4 预警框示例Fig.4 EEW alert example
图5 速报通知示例Fig.5 EQR notification example
图6 预警列表Fig.6 EEW list
图7 速报列表Fig.7 EQR list
3 测试评估
3.1 测试环境配置
3.1.1 测试服务器
测试服务器的操作系统是Windows Server 2008 R2 Enterprise x64,MessageSight所在虚拟机分配内存4GB。
3.1.2 测试用安卓真机
本文使用华为P6-T00(移动版)进行真机测试。该手机的基本参数是:安卓版本4.4.2,系统版本号Emotion系统 2.0,RAM 2.0GB,四核 1.5 GHz处理器。
3.1.3 测试用电脑
本文使用联想T440模拟批量客户端测试。该电脑的基本参数是:Intel Core i5-4200U@1.6GHz,RAM 4.00GB,Windows 7专业版 SP1 x 64。
3.2 测试方案及结果
(1)将安卓程序封装成安装程序(.apk文件),在华为手机上安装运行。
(2)联想T440模拟99个预警信息接收客户端。
(3)内网测试:100个客户端通过局域网同时连接上处在同一网络的MessageSight,发送端测试程序向MessageSight发布一条预警信息,分别在MessageSight连接负载数为1 000、2 000、3 000、4 000、5 000个的情况下,统计100个客户端接收到预警信息的时刻,计算与发送时刻之间的时间差(即耗时)并分析。
(4)外网测试:100个客户端通过因特网同时连接上MessageSight,发送端测试程序向MessageSight发布一条预警信息,分别在MessageSight连接负载数为1 000、2 000、3 000、4 000、5 000个的情况下,统计100个客户端接收到预警信息的时刻,计算与发送时刻之间的时间差(耗时)并分析。
(5)测试结果:内网、外网测试结果分别如图8、图9所示。基于此次测试,可以得出以下结论:
①在两种网络环境下,平均耗时均随着服务器连接负载量的增多而增高,但均不超过0.5 s。
②在内网环境下,数据接收耗时受服务器连接负载量影响大;在外网环境下,数据接收耗时受网络传输影响大。
4 结语
本文基于MQTT协议研发了安卓手机地震预警应用。该应用可实时接收消息代理服务器(IBM MessageSight)推送的地震预警数据和地震速报数据并进行相应的操作。模拟测试结果显示在网络较为稳定的情况下,接收服务器推送数据的平均耗时在0.5 s以内,可以满足地震预警对时效性的要求。MQTT协议提供的轻量级信息传递、低能耗也可以满足手机应用在数据流量、电池续航等方面的要求。
由于硬件条件的限制,本文无法实现更大样本数量的评估测试,将在后续的研究工作中进行更全面的评估测试和程序优化。
图8 内网测试结果Fig.8 Intranet experiment results
图9 外网测试结果Fig.9 External experiment results
参考文献:
[1]王 挺,陈修吾,叶佳宁.基于自动地震速报的地震应急基础信息快速提取模块的研究与实现[J].华南地震,2016,36(1):16-23.
[2]黄文辉,沈玉松,吕作勇,等.地震超快速报系统试运行结果评估[J].华南地震,2016,36(4):1-7.
[3]徐晶,许炜.消息中间件综述 [J].计算机工程,2005,31(16):73-76.