应用设想实现01-远程绘图Web显示

需求:不将数据传输到客户端,通过web请求远程绘图,返回图像url显示。

实现:
1.2000年左右就有实现了,当时是基于ISAPI,所有处理代码包括绘图都用VC实现。不过当时的数据是小时采样的时序数据,量不大,可以很容易处理。
**后来windows环境变化,停止了此模式。

2.2010年左右用WCF实现了新方式。用dotNet进行客户端和服务端实现,用C#进行绘图实现,通过WCF通信,不但可以绘图,还可以进行图形的交互处理。
**但是由于WCF的复杂性,而且后期放弃windows平台,也停止了此模式。

插入:
一直测试在客户端进行绘图的可能。早期用java applet,ActiveX控件都可以实现,后期用asp.net、php也可以实现,一直到html5等。客户端越来越方便,甚至可以直接使用第三方绘图库,不需要自己写绘图代码了。
**不过数据情况越来越不适合。首先是数据可能保密,是不允许传输到本地的;其次是数据量也越来越大,不仅有分钟采样,设置有秒采样数据了,请求的量也不能限定,如果是10年分钟采样数据就有400多万个点,传输到客户端绘图也不现实。
****所以当前需求不适合在客户端绘图。

3.因为2013年后放弃windows平台的web实现了,于是需要采取其他新的方式了。最近刚刚完善,基本达到目标了。
感觉其中需要的核心问题就是:用仿照异步模式解决web请求超时问题。以前几乎所有功能都需要自己写代码,但是现在有很多好的处理库,直接调用就行了,很方便。
因为积累了很多年的数据,都是允许调用的。而请求数据量不确定,是允许很大的,必须要应对超时问题。异步可以有多种技术实现。曾经在dotNet中用过Web Service的异步方法,不过感觉客户端是浏览器就会面临很多问题,干脆不试验。当前选择的是web方式就不考虑RPC调用了。
**最后的解决方法是自己模拟,暂时用的是用ajax查询server处理状态。当然可能存在访问量问题,如果用户多了就不行了。不过着用模式的应用是不会有太多用户的,太专业了。而且即使改进,因为服务器用的是tornado,可以尝试长连接估计就行了。

目前采样的技术:
客户端:
PHP/Yii
Javascript
Ajax

Web服务器:
Linux
Apache

数据库服务器:
Linux
mySQL

绘图处理服务器:
Linux
Tornado
Python
Gnuplot

目前运行效果还不错,大约半年分钟数据20万个点,需要2-4秒。当然还有很多细节需要完善。

另外:
需要特别说明的就是Gnuplot。最早时候采样的是用Pandas绘制时序图形,结果调用多了速度变慢,并且会出现类似阻塞的问题。而改用Gnuplot后,不但调用简单了,而且速度非常快。

应用设想实现01-远程绘图Web显示_第1张图片


相同的技术实现了在线绘制数字地震波形的功能。服务器上的数据文件是MiniSeed,使用Python实现的解压缩和输出。效果如图:

应用设想实现01-远程绘图Web显示_第2张图片


应用设想实现01-远程绘图Web显示_第3张图片


你可能感兴趣的:(Web,tornado,ajax,web,图形,javascript)