对于智能化监控软件,从wincc等国外的有相当积累的系统,以及国内一些小型的智能化集成软件,通常其监控数据通过前端绑定控件的方式,做到了实时的通讯,通过控件直接和后端服务交互。这种方式可以灵活的组态,但是对于当今用户终端轻量化趋势,其每一个监控点都对应一个控件,页面在用户体验上显得非常笨拙。

到了后期,一些系统开始考虑轻量的前台页面,AJAX开始流行,以及Comet技术,利用服务端推送的方式,通过长连接实现轻量化的数据展示。对于一些智能化常见的监控系统,例如LED、温度、电压,这些在BAS,FAS以及SCADA里常见的,无非提供了一个较大的提高。

这里提供了另外一种技术,可以直接通过mochiweb,实现后台数据的推送。mochiweb是一个用Erlang编写的服务器框架,其优势在于推送效率,这也是erlang语言的一大吸引人的地方,并且小巧灵活,易于理解。对于页面布局简单,但是对实时性要求高的监控数据的推送,是一个较好的选择。

mochiweb的轻量在于其web服务的轻量,搭建简单(linux),下面提供了在fedora环境下安装和搭建的步骤,简要实现了一个后台服务,通过socker接口接收数据,并实时推送展示到前台页面上:

  1. 直接下载其源码

    git clone https://github.com/mochi/mochiweb.git

  2. 创建新项目(这里注意,mochiweb是直接创建一个轻量的web服务器,如果您有过使用,请原谅小编的唠叨)

    make app PROJECT=mochipro PREFIX=/home/

    当您下载了mochiweb后,可以直接看其中的README文档,有说明具体的建项目方式

  3. 当创建完成后,进入新创建的目录,启动start-dev.sh脚本即可。现在您已经创建了一个web服务并运行,就是这么简单。

现在按照小编所说,我们要做的还有在现在的mochiweb基础上,实现一个TCP的服务端,接收数据并实时展示在页面上,这里的修改很简单,只需要修改mochipro_web.erl里面的几个方法即可,首先是start(Options)方法中,创建一个TCP服务端并监听,并且把解析的逻辑写好即可,这里列出改后的代码,和原始代码的不同参考原始的代码比对即可:

OK,现在只要自己开发一个TCP或多个(领教下其并发支持)TCP客户端,不断的向该服务器发送数据,即可看到炫酷的表现了,数据在无需刷新页面的情况下,快速的在页面更新。mochiweb的内部函数解析可以在网上查找,搭建过程中可能根据环境的不同会有不同的问题,包括一些问题细节,例如IP端口设置,页面编码,这里因为篇幅均省略,欢迎关注公众号:智能化IT系统,进行进一步讨论。

当然该方式也有缺陷,就是上文提到的组态,以及对于元素复杂的页面的展示。所以使用还是要综合业务要求,页面复杂度,性能等决定方案,对于实时性要求高,界面简单的系统来说,不妨一试。

利用mochiweb让服务端主动推送数据至前端页面相关推荐

  1. flux服务器推消息,服务端主动推送数据,除了 WebSocket 你还能想到啥?

    原标题:服务端主动推送数据,除了 WebSocket 你还能想到啥? 来自公众号: 江南一点雨 在 上篇文章 中,松哥和大家分享了 WebFlux 的基本用法,小伙伴们已经了解到使用 WebFlux ...

  2. 服务端主动推送数据,除了 WebSocket 你还能想到啥?

    在上篇文章中,松哥和大家分享了 WebFlux 的基本用法,小伙伴们已经了解到使用 WebFlux 我们的返回值可以是 Mono 也可以是 Flux,如果是 Flux,由于 Flux 中包含多个元素, ...

  3. 使用SignalR从服务端主动推送警报日志到各种终端(桌面、移动、网页)

    工作上有个业务,.Net Core WebAPI作为服务端,需要将运行过程中产生的日志分类,并实时推送到各种终端进行报警,终端有桌面(WPF).移动(Xamarin.Forms).网站(Angular ...

  4. spring集成mina,包含心跳检测,实现服务端主动推送

    服务端 1.常规的spring工程集成mina时,pom.xml中需要加入如下配置: <dependency><groupId>org.slf4j</groupId> ...

  5. Netty-Server-Hander自定义解码器-服务端主动推送

    netty server端使用自定义解码器,通过存储client连接实现主动推送消息,并发送自定义心跳包 Server端 依赖 <dependency><groupId>io. ...

  6. 服务端如何推送消息给客户端?

    大家好,我是前端西瓜哥,今天带大家了解一下服务端如何推送消息给客户端. 有时候,我们希望服务端能够主动推送一些信息给客户端.但 HTTP 协议只能让客户端发起请求然后服务端响应,而无法让服务端主动去发 ...

  7. Asp.net SignalR 实现服务端消息推送到Web端

    参考博客https://www.cnblogs.com/wintersun/p/4148223.html ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的W ...

  8. pushlet实现单机-集群服务端消息推送

    一.什么是pushlet? 1.pushlet推送是一种将java后台数据推送到web页面的框架技术,实现了comet. 2.comet是一个用于描述客户端和服务器之间交互的术语,即使用长期保持的ht ...

  9. RestAPI的进化之路,后端MVVM模式或许来临,通过观察者模式,后端收集前端的GET类请求,主动推送数据变更到前端

    RestAPI的进化之路,后端MVVM模式或许来临,通过观察者模式,后端收集前端的GET类请求,主动推送数据变更到前端 最近几年,前端MVVM模式彻底变革了前端的开发模式,那这股火焰会烧到后端嘛? 我 ...

最新文章

  1. 亲爱的,别把上帝缩小了 ---- 读书笔记2
  2. PHP Warning: date(): It is not safe to rely on the system's timezone settings
  3. 爱了!爱了!Markdown 必备组合神器!
  4. 构建Spring微服务并对其进行Dockerize生产
  5. 一些上流的CSS3图片样式
  6. java复选框批量删除_vue+element+Java实现批量删除功能
  7. 面试篇——mysql
  8. 用Scheme写Scheme编译器(三):一元运算
  9. 7-7 用扑克牌计算24点 (25 分)
  10. FireReport 层次坐标 使用问题A1[A1:-1]=A1
  11. pytest生成测试报告
  12. 什么是项目工作说明书?
  13. P4173 残缺的字符串(带通配符的字符串匹配,FFT)
  14. 华为联运游戏或应用审核驳回:检查HMS Core更新失败
  15. python牛顿法算立方根_使用牛顿法迭代求平方根与立方根
  16. 判断两个矩形是否重叠
  17. GuLi商城-简介-项目介绍、分布式基础概念、微服务架构图
  18. 【友盟】 微博分享缺少C8998文件
  19. matlab 利用polyfitpolyval函数进行基线矫正【matlab程序】
  20. 大数据可视化大屏实例

热门文章

  1. pat根据中序遍历和先序遍历_算法题399:从前序与中序遍历序列构造二叉树
  2. 千万千万不要运行的 Linux 命令
  3. js压缩代码后怎么生成source map_??markdown生成导航? #x27;[toc]#x27;足矣
  4. springboot整合jdbc
  5. cap流程图_3D流程图
  6. mysql的代码大全_MySql数目字函数大全
  7. 程序员的数学全三册密码_阿波罗50年前成功登月,少不了这位硬核女程序员
  8. 神经网络 测试集loss不下降_【NLP高频面试题】神经网络及其优化
  9. oracle表还原truncate,Oracle数据库之Oracle表恢复(truncate)
  10. 创维广电服务器无线,创维电视连有线网、连无线网详细图文教程