百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

基于Vert.x的实时Web监控系统

zhezhongyun 2025-01-19 01:53 46 浏览

摘 要: 创新性地使用最新的Vert.x框架,利用其异步、非阻塞、实时性、高并发的工作模式,对现有的工业过程监控系统进行全面改造,极大提升了系统的响应速度,实时性得到显著提高,完全满足大量客户端并发的实时请求。

0 引言

工业生产监控系统的Web化[1]已成为标准,客户端只使用浏览器即可实现对监控数据的实时显示,不需要安装各种监控组件,简化了监控系统维护。实现监控数据的实时传输和显示技术也在不断地出现,从传统HTTP请求/响应模式,到AJAX的Comet及HTML5的WebSocket,采用数据推送技术,使得Web监控系统的实时性得到极大提高。然而监控服务器在面对大量客户连接的并发请求时,实时性难以满足。无论JavaEE,还是NET都如此,它们的多线程工作模式是根源所在。为解决此问题,Vert.x框架[2-3]应运而生,它采用全新工作模式,特别适合开发实时性要求极高的系统。

Vert.x是用于下一代异步、可伸缩、并发应用的框架,轻量级的高性能JVM应用平台,适合开发各种移动及企业应用。它彻底解决了业界遭遇C10K问题,即当并发连接超过一万以上时,传统技术会引发暂停。以Tomcat为例,它在超过100个并发长请求就堵塞,而Vert.x可支持超10万个并发请求。

本文采用Vert.x对现有的供热监控系统进行改造,对监控服务器端和客户端进行重构。在服务器端使用Vert.x的Web服务器取代现有Tomcat7,采用Vert.x TCP读取西门子PLC300的监控数据。用户端采用Vert.x的Event Bus Bridge技术,实时接收服务器端监控数据,改造后的监控系统的性能和响应速度比原有系统有显著的提高。

1 Vert.x框架概述

Vert.x核心采用与Node.js相同的事件驱动的异步工作模式,使用单线程的事件循环机制实现高并发的请求处理,而不像传统的服务器采用多线程的模式。

Vert.x的核心组件是Verticle,运行在Vert.x实例中。Vert.x启动后,根据服务器CPU的内核数,自动创建对应的Vert.x实例,并发运行Verticle。

Vert.x采用事件驱动的异步编程模式,通过触发事件以及注册事件处理器完成所有编程任务。Verticle之间不能直接调用,只能发送和接收事件实现协作。

Vert.x的核心是事件总线,Verticle在事件总线发送和接收事件。事件总线是分布式的,能连接服务器和客户端。事件总线支持点对点和发布-订阅模式的事件传输,监控系统中服务器向所有连接的客户端发送监控数据就使用发布订阅模式,使得所有客户端浏览器都能实时接收到监控数据。

2 实时监控系统设计与实现

大连柳树供热公司监控系统现场采用西门子PLC S7-300[4],通过屏蔽双绞线连接到中心机房的核心交换机上,中心监控主机CPU采用志强8核服务器,可并发运行8个Vert.x实例,能支持十几万个并发请求。页面采用最新的Bootstrap模版技术[5],自动适应不同尺寸的屏幕显示,包括手机、平板等。

2.1 读取PLC监控数据TCP编程

西门子S7-300采用TCP FETCH WRITE通信方式[6],该模式下通过TCP协议的Socket,主机可与PLC进行数据交换。

Vert.x内置TCP Client方法,如下是TCP客户端读取PLC数据的代码:

var vertx=require(′vertx′);//获得Vert.x运行实例

var eb=require(′vertx/event_bus′)//获得Event Bus对象

var client=vertx.createNetClient;//创建TCP客户端

client.reconnectAttempts(1000);//设置连接尝试次数

client.reconnectInterval(500);//设置尝试间隔时间

//连接PLC Socket端口,并定义回调函数

client.connect(config.port,config.ip,function(err,socket){//定义接收到PLC数据的事件处理器

socket.dataHandler(function(buffer){

var data=JSON.parse(buffer);

//将接收的数据发布到Evnet Bus上

eb.publish("rtdata.in.receive",{info:data},function(result){});

//使用定时器,每间隔0.5 s发送请求数据指令到PLC

var timer=vertx.setPeriodic(500,function(timerID){sock.write("datain");});

}});

客户端定时发送数据指令,PLC数据到达后,Socket上的事件监听器工作,从回调函数中取得监控数据,并转换为JSON格式,使用总线方法publish发布事件。总线上监听的Web客户端都能同步接收监控数据。Vert.x采用推模式实现数据传输,由Vert.x服务器主动发送数据,不需客户端请求,节省了网络带宽,提高了传输速度,满足了监控系统实时性。监控系统的总体架构如图1所示。

在Vert.x服务器中,可启动多个TCP客户端Verticle,实现多路监测数据的并发读取,如下代码展示主服务器依次启动Http Web Server和TCP Client监控Verticle等实例。

//获得Vert.x实例容器

var container=require("vertx/container");

//启动Web服务器

container.deployVerticle("HttpServer.js");

//启动PLC TCP客户端

container.deployVerticle("TCPClient.js",{port:2201,ip:192.168.1.101});

2.2 监控Web服务器的编程

系统采用Vert.x的服务器模块web-server~2.0,实现功能强大的Web服务器,并使用异步模式接收客户端浏览器的HTTP请求,支持客户高并发的HTTP连接请求,示意代码如下。

var container=require("vertx/container");

container.deployModule("io.vertx~mod-web-server~2.0.0-final",{port:80,host:"localhost",

bridge:true,

inbound_permitted:[

{address:′rtdata.in.receive′},

{address:′rtdata.out.receive′}

]);

Vert.x通过deployModule载入Web模块,Web模块自动将目录/web作为站点发布目录,在/web目录中存储站点的页面文件。

代码中bridge:true表示将服务器端的事件总线延伸到Web客户端,实现服务器和客户端的数据传输。每个Verticle都可以在Event Bus注册事件处理器,以此实现数据的接收和发送。

2.3 监控客户端编程

客户端使用普通的HTML即可,不需要动态页面。为实现与Vert.x服务器的Event Bus通信,客户端页面需要引入Vert.x的Event Bus Bridge的库文件vertxbus-2.1.js。

监控数据显示使用<div>,使用Bootstrap框架布局,将<div>悬浮在图片指定位置。监控客户端页面的数据接收和显示代码如下:

$(document).ready(function{

var eb=new vertx.EventBus(′localhost/eventbus′);

eb.onopen=function{

eb.registerHandler("rtdata.in.receive",function(args){var data=args.data;

$("#rt1010").html(data);});

};});

代码中关键是取得Vert.x的Event Bus对象,通过事件总线提供的vertx.EventBus,使用Javascript创建一个实例即可。如果与服务端的Event Bus连接成功,则eb.onopen回调函数工作。在此方法内,通过Event Bus的registerHandler对指定的地址进行监听,当有此地址的事件event到达时,定义的回调函数function(args)开始运行,参数args为事件中包含的JSON数据,解析出JSON数据,使用jQuery的函数html将数据显示在指定的 <div>元素内,实现监控数据的实时显示。实时监控系统监控界面如图2所示。

3 结论

Vert.x具有的实时通信、全新的异步响应式工作模式和分布式Event Bus等特性,使其必将在实时系统开发中得到广泛应用。与Node.js相比,Vert.x以其性能压倒性的绝对优势,必将推动实时Web的飞速发展,进而引起Web领域颠覆性的革命,彻底淘汰以AJAX为主的Web2.0,引领新的Web发展趋势。

参考文献

[1] 李玉珠,吴敏,徐福仓.基于Web的炼焦实时监视系统设计与实现[J].自动化与仪表,2009(4):1-4.

[2] PARVIAINEN T.Real-time Web application development using Vert.x 2.0[M]. Birmingham-Mumbai: Packt Publishing,2013.

[3] Vert.x[EB/OL]. http://vertx.io/.

[4] 潜立标,杨马英,俞立,等.基于Web和S72300 PLC的远程控制实验室系统[J].浙江工业大学学报,2007(2):73-77.

[5] 陈群.基于ASP.NET AJAX新型Web Scada的设计与实现[J].工业控制计算机,2009(6):42-44.

[6] 赵佳宝,付羽.基于SVG的实时监控流程图实现技术[J].工业控制计算机,2009(6):10-12.

相关推荐

JavaScript中常用数据类型,你知道几个?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师Lison这篇文章我们了解一下JavaScript中现有的八个数据类型,当然这并不是JavaScr...

踩坑:前端的z-index 之bug一二(zh1es前端)

IE6下浮动元素bug给IE6下的一个div设置元素样式,无论z-index设置多高都不起作用。这种情况发生的条件有三个:1.父标签position属性为relative;2.问题标签无posi...

两栏布局、左边定宽200px、右边自适应如何实现?

一、两栏布局(左定宽,右自动)1.float+margin即固定宽度元素设置float属性为left,自适应元素设置margin属性,margin-left应>=定宽元素宽度。举例:HTM...

前端代码需要这样优化才是一个标准的网站

  网站由前端和后端组成,前端呈现给用户。本文将告诉您前端页面代码的优化,当然仍然是基于seo优化的。  就前端而言,如果做伪静态处理,基本上是普通的html代码,正常情况下,这些页面内容是通过页面模...

网页设计如何自学(初学网页设计)

1在Dreamweaver中搭建不同的页面,需要掌握HTML的语句了,通过调整各项数值就可以制作出排版漂亮的页面,跟着就可以学习一些可视化设计软件。下面介绍网页设计如何自学,希望可以帮助到各位。Dre...

1、数值类型(数值类型有)

1.1数据类型概览MySQL的数据类型可划分为三大类别:数值类型:旨在存储数字(涵盖整型、浮点型、DECIMAL等)。字符串类型:主要用于存储文本(诸如CHAR、VARCHAR之类)。日期/...

网页设计的布局属性(网页设计的布局属性是什么)

布局属性是网站设计中必不可少的一个重要的环节,主要用来设置网页的元素的布局,主要有以下属性。1、float:该属性设置元素的浮动方式,可以取none,left和right等3个值,分别表示不浮动,浮在...

Grid网格布局一种更灵活、更强大的二维布局模型!

当涉及到网页布局时,display:flex;和display:grid;是两个常用的CSS属性,它们都允许创建不同类型的布局,但有着不同的用法和适用场景。使用flex布局的痛点当我们使...

React 项目实践——创建一个聊天机器人

作者:FredrikStrandOseberg转发链接:https://www.freecodecamp.org/news/how-to-build-a-chatbot-with-react/前言...

有趣的 CSS 数学函数(css公式)

前言之前一直在玩three.js,接触了很多数学函数,用它们创造过很多特效。于是我思考:能否在CSS中也用上这些数学函数,但发现CSS目前还没有,据说以后的新规范会纳入,估计也要等很久。然...

web开发之-前端css(5)(css前端设计)

显示控制一个元素的显示方式,我们可以使用display:block;display:inline-block;display:none;其中布局相关的还有两个很重要的属性:display:flex;和...

2024最新升级–前端内功修炼 5大主流布局系统进阶(分享)

获课:keyouit.xyz/14642/1.前端布局的重要性及发展历程前端布局是网页设计和开发的核心技能之一,它决定了页面元素如何组织和呈现。从早期的静态布局到现代的响应式布局,前端布局技术经历了...

教你轻松制作自动换行的CSS布局,轻松应对不同设备!

在网页设计中,自动换行的CSS布局是非常常见的需求,特别是在响应式设计中。它可以让网页内容自动适应不同屏幕尺寸,保证用户在不同设备上都能够获得良好的浏览体验。本文将介绍几种制作自动换行的CSS布局的方...

晨光微语!一道 CSS 面试题,伴你静享知识治愈时光

当第一缕阳光温柔地爬上窗台,窗外的鸟鸣声清脆悦耳,空气中弥漫着清新的气息。在这宁静美好的清晨与上午时光,泡一杯热气腾腾的咖啡,找一个舒适的角落坐下。前端的小伙伴们,先把工作的疲惫和面试的焦虑放在一边,...

2023 年的响应式设计指南(什么是响应式设计优缺点)

大家好,我是Echa。如今,当大家考虑构建流畅的布局时,没有再写固定宽度和高度数值了。相反,小编今天构建的布局需要适用于几乎任何尺寸的设备。是不是不可思议,小编仍然看到网站遵循自适应设计模式,其中它有...