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

对于智能化监控软件,从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系统,进行进一步讨论。

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

猜你喜欢

转载自blog.csdn.net/weixin_42488570/article/details/80825167