论文部分内容阅读
摘 要:突发天气对地铁运营会造成较大危害与财产损失。通过人工巡查天气预警信息的方式存在效率低下问题。
为解决该问题,从实际需求出发,设计了基于Node.js的天气监测告警系统。该系统可实时监测关注城市的突发天气预警信息。系统基于B/S微服务架构,采用Node.js全栈技术,数据库使用Sqlite。该系统可显著提升地铁运营人员获取突发天气预警信息的效率,提早做好应对行动,最大程度地降低突发天气带给地铁运营的损失。
关键词:Nodejs;Sqlite;B/S
引言
当前,国内的地铁建设正处于大规模发展阶段,地铁线路越来越多地采用高架与地面形式,同时气象对地铁的影响也是日趋显著。气象灾害防范已是地铁运营急需关注的问题[1]。地铁运营公司一般由控制中心(以下简称OCC)接收到突发天气预警信息后,向各个部门或中心发布突发天气预警信息,现场各岗位按照突发天气下的相关作业标准和要求执行。目前,无锡地铁的OCC是通过江苏省气象局网站来获取突发天气预警信息,这一环节需要依靠人员不断地通过手动刷新与肉眼观察的手段来监测气象局网站的动态信息。这样的方式不仅效率低下,大量浪费人员的精力,而且容易发生信息遗漏的问题。为解决这个问题,本文设计了一种基于Node.js技术的天气监测告警系统的解决方案。该系统通过后台以固定的时间间隔来循环读取气象局网站指定地址的信息,并将信息过滤,只留下有价值的关注城市与关注时间的突发天气预警信息。系统将突发天气预警信息写入数据库,同时浏览器自动打开并指向天气监测告警系统,天气监测告警系统的前端界面发出语音图文提示,提醒系统用户及时关注突发天气预警信息。
1 系统架构
系统架构采用当下流行的B/S架构与Node.js全栈技术。用户通过使用Webkit为核心的浏览器使用软件系统。同时采用微服务架构的理念,根据实际需求,将业务划分为独立数据共享型的自治服务,可以融合不同种类与不同时期的技术。B/S架构相对于C/S架构的优势是不需要对所有客户端单独进行部署与升级,它的部署与升级都集中在服务端。B/S架构可显著降低系统维护的人力与时间成本。
2 相关技术
2.1 框架技术Node.js
Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js的包管理器 npm,是全球最大的开源库生态系统[1]。
2.2数据库技术Sqlite
SQLite 是轻型的嵌入式数据库。它是一款自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它的优势是资源占用少、性能良好和零管理成本。目前SQLite是在世界上最广泛部署的SQL数据库引擎 [4]。
2.3响应式Web设计Bootstrap
Bootstrap由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是目前最流行的前端框架之一。Bootstrap是基于 HTML、CSS、JavaScript设计,简洁灵活的特点可以使 Web开发更加快捷[4]。
3 系统设计
3.1 系统流程设计
预警信息可分为三类,正在预警中数目,有效预警与已解除预警。正在预警中数目代表有效预警的实时数目。有效预警是预警记录的实时清单,清单中的预警记录处于有效状态。一旦预警无效,则从有效预警的清单中撤出,并放入已解除预警的清单。已解除预警是已解除状态预警记录的清单。
在Node.js系统服务端启动后,首先执行初始模块。初始模块会第一次读取正在预警中数目、有效预警与已解除预警这三类信息。接下来执行循环模块,循环模块会以固定的周期读取正在预警中数目。如果该数目没有变化,则不做任何操作。如果该数目发生变化,则读取有效预警与已解除预警的清单,然后从清单中对城市与时间进行过滤,将过滤后的信息写入数据库。同时执行Http模块,浏览器将自动指向天气监测告警系统的前端页面。前端页面通过语音图文来提醒系统用户关注突发天气预警信息。
3.2 系统功能模块
系统功能模块可分為三个,初始模块、循环模块、Http模块、日志模块与数据库模块。系统功能的模块结构图如图1所示。
图1 模块结构图
3.2.1 初始模块
初始模块在系统服务端启动后执行一次。初始模块使用cheerio类库加载指定三个URL地址的HTML字符串,URL地址分别指向正在预警中数目、有效预警与已解除预警的页面。其中正在预警中数目可直接获取。有效预警需设定关注城市,只获取关注城市的预警信息。已解除预警需设定关注城市与当下时刻,只获取关注城市与当下时刻的预警信息,其中当下时刻精确到分钟。初始模块取得这三类预警信息后将其存放至全局变量,以供循环模块比对。同时通过日志模块将信息存储到日志中。
3.2.2 循环模块
初始模块执行完毕后,开始执行循环模块。循环模块以固定的周期间隔读取正在预警中数目,同时将当前读取的数目与上一次读取的数目进行比对,判断是否一致。如果数目无变化,则只通过日志模块写入日志,不做其他任何操作。如果前后数目不一致,则读取有效预警与已解除预警的HTML字符串。根据设定的关注城市与当下时刻的条件进行过滤,过滤后的信息是我们想要得到的预警信息。通过日志模块与数据库模块将其分别写入日志与数据库Sqlite。数目不一致的情况也将触发Http模块。
3.2.3 Http模块
Http模块使用RESTful的架构风格,通过不同的GET或者POST请求方法,将请求引导至对应的页面并渲染其内容。如果请求是index,则引导并渲染页面index.html。如果请求是warnlist,则引导并渲染页面warnlist.html。Http模块的前端使用Bootstrap技术,其主要包含两种功能,控制面板与预警记录。控制面板包含了最新一次预警的时间、数量、语音、有效预警与已解除预警的清单。预警记录包含了所有预警记录,并可以快捷搜索。Http模块可以通过两种方式触发执行。这两种方式是循环模块判断数目不一致与用户通过浏览器主动访问Http模块。 3.2.4 日志模塊
日志模块将预警记录信息写入日志中,日志文件以扩展名log结尾,一个月对应一个日志文件,下一个月的月初建立并使用新的日志文件。日志文件记录了历史信息,可方便追溯过往发生的信息,也可以同数据库互为参考依据。一般情况下日志模块被初始模块与循环模块所调用。
3.2.5 数据库模块
数据库模块将预警信息写入轻型嵌入式数据库Sqlite。预警信息的字段主要是时间、数量、有效预警与已解除预警。由于有效预警与已解除预警所包含的信息可能一次包含两个城市或两个城市以上的预警信息,所以这两个字段最适合使用数据库的JSON技术。使用Sqlite的函数方法JSON_OBJECT将键值字符串转换JSON对象,使用Sqlite的函数方法JSON_ARRAY将多个JSON对象转换为JSON数组。一般情况下数据库模块被循环模块所调用。
4 结论
突发天气诸如台风、暴雨、雷电、大雾、冰雹等都可能会对地铁运营的设备与人员造成危害。通过天气监测告警系统,可实现全自动地监测地铁运营公司所在城市的突发天气预警信息。该系统帮助地铁运营人员更早地获取预警信息,更快地做出应对突发天气的方案与行动。自动化的监测系统不仅显著提升地铁运营人员的获取突发天气预警信息的效率,而且可以最大程度地降低突发天气对地铁运营产生的损失。同时它也可以成为当下地铁智慧运营理念的有机组成部分。
参考文献
[1]李毅雄. 香港地铁气象灾害防范技术[J]. 中国安全生产科学技术, 2007, 3(2).
[2]Node.js Foundation. Nodejs Documentation [EB/OL]. [2019-08-05]. https://nodejs.org/en/docs.
[3]SQLite Consortium. SQLite Documentation [EB/OL]. [2019-08-05]. https://sqlite.org/about.html.
[4]Mark Otto. Bootstrap Documentation [EB/OL]. [2019-08-05]. https://getbootstrap.com/docs/4.3/getting-started/introduction.
为解决该问题,从实际需求出发,设计了基于Node.js的天气监测告警系统。该系统可实时监测关注城市的突发天气预警信息。系统基于B/S微服务架构,采用Node.js全栈技术,数据库使用Sqlite。该系统可显著提升地铁运营人员获取突发天气预警信息的效率,提早做好应对行动,最大程度地降低突发天气带给地铁运营的损失。
关键词:Nodejs;Sqlite;B/S
引言
当前,国内的地铁建设正处于大规模发展阶段,地铁线路越来越多地采用高架与地面形式,同时气象对地铁的影响也是日趋显著。气象灾害防范已是地铁运营急需关注的问题[1]。地铁运营公司一般由控制中心(以下简称OCC)接收到突发天气预警信息后,向各个部门或中心发布突发天气预警信息,现场各岗位按照突发天气下的相关作业标准和要求执行。目前,无锡地铁的OCC是通过江苏省气象局网站来获取突发天气预警信息,这一环节需要依靠人员不断地通过手动刷新与肉眼观察的手段来监测气象局网站的动态信息。这样的方式不仅效率低下,大量浪费人员的精力,而且容易发生信息遗漏的问题。为解决这个问题,本文设计了一种基于Node.js技术的天气监测告警系统的解决方案。该系统通过后台以固定的时间间隔来循环读取气象局网站指定地址的信息,并将信息过滤,只留下有价值的关注城市与关注时间的突发天气预警信息。系统将突发天气预警信息写入数据库,同时浏览器自动打开并指向天气监测告警系统,天气监测告警系统的前端界面发出语音图文提示,提醒系统用户及时关注突发天气预警信息。
1 系统架构
系统架构采用当下流行的B/S架构与Node.js全栈技术。用户通过使用Webkit为核心的浏览器使用软件系统。同时采用微服务架构的理念,根据实际需求,将业务划分为独立数据共享型的自治服务,可以融合不同种类与不同时期的技术。B/S架构相对于C/S架构的优势是不需要对所有客户端单独进行部署与升级,它的部署与升级都集中在服务端。B/S架构可显著降低系统维护的人力与时间成本。
2 相关技术
2.1 框架技术Node.js
Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js的包管理器 npm,是全球最大的开源库生态系统[1]。
2.2数据库技术Sqlite
SQLite 是轻型的嵌入式数据库。它是一款自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它的优势是资源占用少、性能良好和零管理成本。目前SQLite是在世界上最广泛部署的SQL数据库引擎 [4]。
2.3响应式Web设计Bootstrap
Bootstrap由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是目前最流行的前端框架之一。Bootstrap是基于 HTML、CSS、JavaScript设计,简洁灵活的特点可以使 Web开发更加快捷[4]。
3 系统设计
3.1 系统流程设计
预警信息可分为三类,正在预警中数目,有效预警与已解除预警。正在预警中数目代表有效预警的实时数目。有效预警是预警记录的实时清单,清单中的预警记录处于有效状态。一旦预警无效,则从有效预警的清单中撤出,并放入已解除预警的清单。已解除预警是已解除状态预警记录的清单。
在Node.js系统服务端启动后,首先执行初始模块。初始模块会第一次读取正在预警中数目、有效预警与已解除预警这三类信息。接下来执行循环模块,循环模块会以固定的周期读取正在预警中数目。如果该数目没有变化,则不做任何操作。如果该数目发生变化,则读取有效预警与已解除预警的清单,然后从清单中对城市与时间进行过滤,将过滤后的信息写入数据库。同时执行Http模块,浏览器将自动指向天气监测告警系统的前端页面。前端页面通过语音图文来提醒系统用户关注突发天气预警信息。
3.2 系统功能模块
系统功能模块可分為三个,初始模块、循环模块、Http模块、日志模块与数据库模块。系统功能的模块结构图如图1所示。
图1 模块结构图
3.2.1 初始模块
初始模块在系统服务端启动后执行一次。初始模块使用cheerio类库加载指定三个URL地址的HTML字符串,URL地址分别指向正在预警中数目、有效预警与已解除预警的页面。其中正在预警中数目可直接获取。有效预警需设定关注城市,只获取关注城市的预警信息。已解除预警需设定关注城市与当下时刻,只获取关注城市与当下时刻的预警信息,其中当下时刻精确到分钟。初始模块取得这三类预警信息后将其存放至全局变量,以供循环模块比对。同时通过日志模块将信息存储到日志中。
3.2.2 循环模块
初始模块执行完毕后,开始执行循环模块。循环模块以固定的周期间隔读取正在预警中数目,同时将当前读取的数目与上一次读取的数目进行比对,判断是否一致。如果数目无变化,则只通过日志模块写入日志,不做其他任何操作。如果前后数目不一致,则读取有效预警与已解除预警的HTML字符串。根据设定的关注城市与当下时刻的条件进行过滤,过滤后的信息是我们想要得到的预警信息。通过日志模块与数据库模块将其分别写入日志与数据库Sqlite。数目不一致的情况也将触发Http模块。
3.2.3 Http模块
Http模块使用RESTful的架构风格,通过不同的GET或者POST请求方法,将请求引导至对应的页面并渲染其内容。如果请求是index,则引导并渲染页面index.html。如果请求是warnlist,则引导并渲染页面warnlist.html。Http模块的前端使用Bootstrap技术,其主要包含两种功能,控制面板与预警记录。控制面板包含了最新一次预警的时间、数量、语音、有效预警与已解除预警的清单。预警记录包含了所有预警记录,并可以快捷搜索。Http模块可以通过两种方式触发执行。这两种方式是循环模块判断数目不一致与用户通过浏览器主动访问Http模块。 3.2.4 日志模塊
日志模块将预警记录信息写入日志中,日志文件以扩展名log结尾,一个月对应一个日志文件,下一个月的月初建立并使用新的日志文件。日志文件记录了历史信息,可方便追溯过往发生的信息,也可以同数据库互为参考依据。一般情况下日志模块被初始模块与循环模块所调用。
3.2.5 数据库模块
数据库模块将预警信息写入轻型嵌入式数据库Sqlite。预警信息的字段主要是时间、数量、有效预警与已解除预警。由于有效预警与已解除预警所包含的信息可能一次包含两个城市或两个城市以上的预警信息,所以这两个字段最适合使用数据库的JSON技术。使用Sqlite的函数方法JSON_OBJECT将键值字符串转换JSON对象,使用Sqlite的函数方法JSON_ARRAY将多个JSON对象转换为JSON数组。一般情况下数据库模块被循环模块所调用。
4 结论
突发天气诸如台风、暴雨、雷电、大雾、冰雹等都可能会对地铁运营的设备与人员造成危害。通过天气监测告警系统,可实现全自动地监测地铁运营公司所在城市的突发天气预警信息。该系统帮助地铁运营人员更早地获取预警信息,更快地做出应对突发天气的方案与行动。自动化的监测系统不仅显著提升地铁运营人员的获取突发天气预警信息的效率,而且可以最大程度地降低突发天气对地铁运营产生的损失。同时它也可以成为当下地铁智慧运营理念的有机组成部分。
参考文献
[1]李毅雄. 香港地铁气象灾害防范技术[J]. 中国安全生产科学技术, 2007, 3(2).
[2]Node.js Foundation. Nodejs Documentation [EB/OL]. [2019-08-05]. https://nodejs.org/en/docs.
[3]SQLite Consortium. SQLite Documentation [EB/OL]. [2019-08-05]. https://sqlite.org/about.html.
[4]Mark Otto. Bootstrap Documentation [EB/OL]. [2019-08-05]. https://getbootstrap.com/docs/4.3/getting-started/introduction.