展会信息港展会大全

基于Matlab web Server实现混合编程
来源:互联网   发布日期:2011-12-16 20:15:56   浏览:24685次  

导读:1. Matlab web Server 简介 Matlab Web Server可以在WWW环境中开发网络上的应用程序:用户在浏览器上输入数据,提交给服务器上的Matlab,进行计算,把计算结果在浏览器上进行显示。 Matlab Web Server应用包括M文件、HTML和图形。建立Matlab Web Server应用...

1. Matlab web Server 简介
Matlab Web Server可以在WWW环境中开发网络上的应用程序:用户在浏览器上输入数据,提交给服务器上的Matlab,进行计算,把计算结果在浏览器上进行显示。 Matlab Web Server应用包括M文件、HTML和图形。建立Matlab Web Server应用需要以下几部分的工作:
(1) 建立一个向Matlab提交数据的HTML输入文档。
(2) 建立一个显示Matlab计算结果的HTML输出文档。
(3) 建立一个处理输入数据和计算结果的 M文件。
(4) 建立一个测试文件对代码进行测试。
Matlab Web服务器需要运行在TCP/IP网络上。
(1)应用环境:Matlab Web服务器可以适用于类似以下形式的网络上,如下图所示:
 


运行要求系统上必须安装TCP/IP网络软件;客户端必须安装浏览器 (Netscape Communicator Release 4.7或者Microsoft Internet Explorer 5.0.。旧的版本也许可以但没有经过测试)。服务器上必须安装了 Web服务器软件(如I I S,Apache等),并且要能运行C G I程序。本人的运行环境是windows xp +Apache.+matlab7.0.+ MyIE2下面就介绍在这个环境下如何安装和配置,实现matlab web server的功能。


2.  Apache的安装和配置
(1)  Apache简介和获取:
Apache是世界上排名第一的服务器,根据Netcraft所做的调查,世界上百分之五十以上的Web服务器在使用Apache。而且Apache是免费的。
 

 

 


首先,到www.apache.org 下载安装程序。
http://httpd.apache.org/dist/httpd/binaries/wind32/  目录下有多种安装文件,在这里编者选择1.3.20版的。
注意:如果读者不能直接连接到国外网站,需要用代理服务器(例如 218.25.251.168 端口 80)。
(2) Apache安装说明:
下载完后即可安装。在安装过程中需要注意的是,出现如下对话框时,如下图示:


#p#副标题#e#安装程序要求三项都必须填写。如果没有申请域名,(Network Domain)项可随便填,以后也可以在配置文件httpd.conf中修改,主机名(Server Name),填写自己的IP地址也可以。
安装目录为方便起见,选择在C: ,安装完后所有的文件都在c:Apache目录下。(安装目录可以自己选择,无强制要求,下面的介绍均以安装在C盘根目录下为例,若安装到其他目录下,操作是类似的)。
(3)  Apache安装完测试:
安装结束后,将文件C:Apachehtdocsindex.html.en 改名为index.html.。 目录c:Apachehtdocs就是WWW服务器的根目录,index.html为首页。在浏览器中输入http://localhost,则出现如下Apache的测试页面,如下图。(如果显示不正常则可能安装有问题)。
 


安装成功后,还要对Apache进行一系列的设置。可以参考Apache的联机文档,或者参考http://apache.winet.cn/。下面只对与相关的内容进行说明。
(4) Apache相关设置语法说明:(Windows环境下)
i)DocumentRoot 指令
说明:组成网络上可以观看的主文档树的目录
语法:DocumentRoot 目录路径
系统默认值为DocumentRoot "C:/Apache/htdocs" Apache根据请求定位文件的默认操作是,取出URL路径(即,URL中主机名和端口后面的部分)附加到由DocumentRoot 指定的文件系统路径后面,组成在网上所看见的文件树结构比如说:
DocumentRoot "C:/Apache/htdocs"
假设主机的域名www.myhost.com,于是对于http://www.myhost.com/index.html的访问就会指向C:/Apache/htdocs/index.html
ii) Alias 指令
说明:映射URL到文件系统的特定区域
语法:Alias 虚拟目录 实际目录
Alias指令使文档可以被存储在DocumentRoot以外的本地文件系统中。 以虚拟路径开头的URL可以被映射到以 实际目录开头的本地文件。
例如:   Alias /icons/ "C:/Apache/icons/"  对虚拟目录/icons的访问,实际将指向目录C:/Apache/icons/
iii) ScriptAlias 指令
说明:映射一个URL到文件系统并视之为CGI脚本
语法:ScriptAlias 虚拟目录 实际目录
ScriptAlias指令的行为与Alias指令相似.
例子:ScriptAlias /cgi-bin/ "C:/Apache/cgi-bin/"
执行虚拟目录下/cgi-bin/matweb.exe 程序,实际将执行C:/Apache/cgi-bin/matweb.exe
(5)  例子说明:
为了帮助读者学习和操作,本章以matlab自带的例子Peaks Plot Generator 为基础,介绍如何对Apache进行配置。以及在后面将针对该例介绍如何进行matlab web server 编程。
步骤1:
在 C盘根目录下新建文件夹C:testweb
在testweb文件夹中包含了演示项目所需要的文件即:
(a)向matlab提交数据的HTML输入文档。
(b)显示matlab计算结果的HTML输出文档。
(c)处理输入数据和计算结果的 M文件。
(d)测试文件
(e)cgi-bin文件夹
(f)icons 文件夹,放置所需要的图片,包括MATLAB运行过程生成的图片
#p#副标题#e#步骤2:
准备所以相关的文件和程序放置在对应的文件夹中
(1)将本例子中使用到的webpeaks1.html、dummy.html、peaksplot.html 和webpeaks2.html四个HTML文档以及M文件webpeaks.m(在%matlab%toolboxwebserverwsdemos下)复制到目录c:testweb下,其中webpeaks1.html定义了显示的框架,dummy.html为初始显示在框架下半部分的页面,peaksplot.html生成输入界面,webpeaks2生成输出界面;
(2)把%matlab%toolboxwebserverwsdemos下的matweb.conf和 matweb.exe 复制到C:testwebcgi-bin。
(3)把%matlab%toolboxwebserverwsdemos 下的peaks-jr.jpg复制到c:testwebicons下。
(4)把webpeaks1.html 重命名为index.html.
(5)配置Apache相关参数。所有的配置基本上都在文件c:Apacheconfhttpd.conf 中实现。
步骤3:
修改默认根目录:
将默认根目录指向c:testweb
在httpd.conf文件中找到DocumentRoot 项,将”c:Apachehtdocs”改为 “c:/testweb”,如下图所示:

 
步骤4:
设置CGI
MATLAB Web Server 是通过CGI方式工作的,为了让Apache使用CGI(这里是matweb.ext)程序,必须为cgi-bin目录打开特定的特权
在配置文件中找到ScriptAlias /cgi-bin/ "C:/Apache/cgi-bin/" 这一项,如下图示:
 


将其修改为
ScriptAlias /cgi-bin/ "C:/testweb/cgi-bin/",以后对/cgi-bin/中文件的访问实际上是对c:/testweb/cgi-bin/中的文件进行访问。同时将
中的<Directory "C:/Apache/cgi-bin">修改为<Directory "C:/testweb/cgi-bin">
Options None 改为Options ExecCGI。表示允许在C:/testweb/cgi-bin目录下运行CGI程序。修改的结果如下图示:


步骤5:
设置icons目录:
对icons目录的设置不是每个应用项目都需要的,一般来说,对于需要调用或者生成图片的应用项目,为了方便管理,将所有图片放置在同个文件夹(如icons文件夹)中。MATLAB Web Server 的演示程序中有需要生成图片和调用图片,所以对icons进行设置。
在配置文件httpd.conf中找到以下内容,如下图示:


将其修改如下图所示:
 


即将虚拟目录/icons/映射到目录c:/testweb/icons/,以后对/icons/的访问实际上是对c:/testweb/icons/的访问。
注意:每次对httpd.conf文件修改后,要重启Apache,设置的修改才起作用。

#p#副标题#e#3. matlab web server 的安装和配置
Web Server 的系统配置文件位于%MATLAB%webservermatlabserver.conf.(%MATLAB%表示实际的安装目录)初次安装后,该文件中只有一行
-m 1
这一参数表示允许同时运行的MATLAB进程数。默认为1。可以修改为更大的数值,数值越大,MATLAB服务器的负担越大。
对matlabserver.conf的说明:
当matlabserver启动时,从matlabserver.conf文件获取初始设置数据,当安装Matlab Web server时生成了这个文件,位于 %matlab%/webserver目录中,配置设置必须显示在matlabserver.conf的第一行,其基本的设置选项为:

 

选项

说明

-p [n]

Matlabserver 侦听的端口号 默认值是8888

-m [n]

Matlabserver同时运行的最大线程数  m,默认值是1

-o timeout

等待Matlabserver开始的秒数,默认值300

-a path

 

 

#p#副标题#e#Web Server 的配置文件为:
%MATLAB%toolbox webserver wsdemosmatweb.conf
Web Server 的CGI程序为
%MATLAB%toolbox webserver wsdemosmatweb.exe或者
%MATLAB%webserverbinwin32matweb.exe.
对matweb.conf文件的说明:
matweb 连接matlabserver 需要的配置文件,必须同matweb 程序一起放在虚拟目录 /cgi-bin中。
Matlab自带例子中初始的配置文件内容如下图所示:
 


在同一个工程中,不同应用的配置必须在同一个配置文件中。例如matlab自带的例子可视为一个工程,其中有四个应用webmagic , webpeaks , webstockrnd ,players .
 

选项

说明

参考值

[application]

(必须)

Matlab应用运行的M文件名

[webpeaks]

mldir

(可选)

读写文件的工作目录,设定后将自动添加到Matlab的搜索目录中

mldir=c:/testweb/icons

mllog

(可选)

产生一个记录应用和Matlab进行信息交换的日志文件。运行时需将它关闭,否则降低程序的性能

 c:/testweb/webpeaks.log

mlserver

(必须)

运行matlabserver主机名

K;也可以是IP地址211.66.15.83

 

mlport

(可选)

Matlabserver侦听的端口号,必须与Matlabserver.conf中一致

默认8888

mltimeout

(可选)

等待matlabserver的最大超时时间的秒数

默认180

my_var

用户自定义的配置变量

 


按编者自己的实际配置修改如下图示:
 

 


#p#副标题#e#要特别注意一下,必须在[webpeaks]和项中加入
mldir=C:/testweb/icons
否则,程序运行生成的图片将被放置在根目录即c:testweb下,而调用显示图片时是在c:testwebicons里查找文件。结果是无法显示生成的图片。

4.  运行例子
根据上述操作后,完成了一个简单的matlab web server 应用的配置,在局域网中其他机子上的浏览器地址栏中输入211.66.15.83可出现如下页面,如下图示:
 

 

 


选择参数,并按下Generate Plot 按钮后,出现如下画面,如下图示:
 

5.  matlab web server 应用程序的编写
1.  Matlab web server 工作原理:
Matlab Web Server 组件包括matlabserver.exe、matweb.exe、matweb.m和两个配置文件matlabserver.conf、matweb.conf。
matlabserver管理Web 应用和Matlab之间的通信,matlabserver是一个多线程的基于 T C P/IP的服务器,它运行输入HTML 文档内的隐藏域mlmfile 的值指定的M文件,这是通过唤起文件matweb.m,再由它来执行这个 M文件. matlabserver可以侦听任何一个合法的 TCP/IP  端口,不过要配置matlabserver.conf  文件,并且在该文件中还可以设置同时最多有几个连接。Matweb是matlabserver 的一个客户端应用,利用 C G I 把 H T M L 的输入数据传送给matlabserver; matweb.m是调用 Web  应用要运行的 M文件matweb.conf是matweb 连接Matlabserver 需要的配置文件。

 

 

 


#p#副标题#e#2.  代码分析
2.1  主页index.html(即webpeaks.html)的代码如下:
<!-- $Revision: 1.2 $ -->
<HTML>
<HEAD>
<TITLE>MATLAB Peaks Plot</TITLE>
</HEAD>
 
<frameset rows="300, *" border=0>
 
  <frame scrolling=auto
        src="peaksplot.html"
        name="topframe"
        marginwidth=10
        marginheight=1
        frameborder=0>
 
  <frame scrolling=auto
        src="dummy.html"
        marginwidth=0 marginheight=0
        name="outputwindow" frameborder=0>
 
</frameset>
</body>
</HTML>
标记<frameset> </frameset>定义了一个框架集,其中有frame定义的两个框架,第一个名为topframe,起始文档为peaksplot.html第二个名为outputwindow,起始文档为dummy.html。
2.2  输入html文档peaksplot.html部分代码如下:
窗体顶端

 

 

<!-- $Revision: 1.2 $ -->
<html>
<body bgcolor="#FFFFFF">

<form action="/cgi-bin/matweb.exe" method="POST" target="outputwindow">
    <input type="hidden" name="mlmfile" value="webpeaks"><p>

<!-- #### 注释 :
<form action=“/cgi-bin/matweb.exe”method=“POST”>表示把输入表单form的数据发给虚拟目录 /cgi-bin下的CGI程序matweb.exe,数据传送方法为POST。
<input type=“hidden”name =“mlmfile”value=“webpeaks”>表示输入表单有一个隐藏的名为mlmfile的变量,现设其值为“webpeaks”,表示执行计算的M文件是webpeaks.m。
-->

<center>
<h3>Peaks Plot Generator</h3>
<table border=0>
<tr>

<td>
<img src="/icons/peaks-jr.jpg">
</td>
<td width=40>
<br>
</td>

<td bgcolor=#DDDDDD valign=top>

<center><b>Lighting Color</b></center>
<p>
<select name=red>
<option>0

<!-- #### 注释 :
颜色下拉组合框中的选项设置,为节省篇幅,在此不列出,请在Matlab web server demo中查找。
-->
 
</select> <font color="#AA0000"><b>Red</b></font>
<br>
<select name=green>
<option>0

<option>1
</select> <font color="#00AA00"><b>Green</b></font>
<br>
<select name=blue>
<option>0

<option>1
</select> <font color="#0000AA"><b>Blue</b></font>

</dir>
</td>
<td width=40>
<br>
</td>

<td bgcolor=#DDDDDD valign=top>

<b>Shading</b><br>
<select name=shading>
<option>Interpolated 
<option>Flat
<option>Faceted
</select>
<p>
<b>View Angle (degrees)</b><br>

<input type="text" size="5" name="AZ" maxlength="5" value="-37.5"> Horizontal Rotation<br>  
<input type="text" size="5" maxlength="5" name="EL" value="30"> Vertical Elevation
</td>
</tr>
</table>
<p>
<input type="submit" value="Generate Plot">
<p>

<###注释:
!--是向服务器提交数据的语句。
>

</center>
</form>
</body>
</html>

对应的页面如下图所示:
 


#p#副标题#e#2.3  peaks plot 的M文件webpeaks.m分析:
function rs = webpeaks(h)
 % h是matweb程序产生的一个结构,包含了与输入hmtl表单域的相对%应的域,在该例中h的域值分别为h =
%   mlmfile: 'webpeaks'
%   red: '0.7'
%   green: '0.6'
%   blue: '0.8'
%   shading: 'Interpolated'
%   AZ: '-37.5'
%   EL: '30'
%   mlid: 'ml00003'
%   mldir:  'c:/testweb/icons’
%
 mlid = getfield(h, 'mlid');%获得唯一的id,用来生成唯一的图像文件名。
cd(h.mldir);%修改当前路径,即设c:/testweb/icons为当前目录
wscleanup('ml*peaks.jpeg', 1);%删除当前目录下与ml*peaks.jpeg名字
%相似的一小时前生成的文件
%获得选择的颜色值和角度及阴影类型
rcolor = str2double(h.red);
gcolor = str2double(h.green);
bcolor = str2double(h.blue);
azimuth = str2double(h.AZ);
elevation = str2double(h.EL);
if (isfield(h, 'shading'))
   shdng = getfield(h, 'shading');
   if strcmp(shdng, 'Interpolated'); 
      shdng = 'interp';
   end
end
%生成图形
f = figure('visible','off');
z = peaks;
surf(z);
pos = get(gcf, 'position');
pos(3) = 380;
pos(4) = 310;
l = light('color', [rcolor gcolor bcolor]);
shading(lower(shdng));
lighting phong;
set(gcf, 'Position', pos, 'PaperPosition', [.25 .25 4 3]);
view(azimuth, elevation);
%保存图形
drawnow;
s.GraphFileName = sprintf('%speaks.jpeg', mlid);
wsprintjpeg(f, s.GraphFileName);
  s.GraphFileName = sprintf('/icons/%speaks.jpeg', mlid);%如果没有这
%条语句,则需要在输出html文档中的
%<p align="center"><img border=0 src="$GraphFileName$"></p>
% src="$GraphFileName$"项改为src="/icons/$GraphFileName$"
%否则无法正确读取图片
close all;
templatefile = which('webpeaks2.html');
rs = htmlrep(s, templatefile);
对程序中使用到的几个函数进行简单的介绍。
getfield(h, 'mlid') 函数用来获得结构变量 h中名为mlid的变量的值。在这里,mlid是matlabwebservice提供的惟一的标志值,利用mild生成文件名可以保证文件名是惟一的,对于同一应用的不同连接请求也是如此。
在程序中的代码 s.GraphFileName = sprintf(‘%speaks.jpeg’,mild)具有生成文件名的功能,例如,mlid的值是ml00003,则图形文件的名字是ml00003peaks.jpeg。
wsprintjpeg(f, s.GraphFileName)用于把f图片框中的图形存到以 s . GraphFileName的值为文件名的文件里。wsprintjpeg首先利用matlab的带-djpeg参数的print命令生成JPEG文件。如果失败,就生成一个临时的P C X文件,再调用imread 和imwrite写到一个JPEG文件。
htmlrep(s, templatefile),用来替换html文档中的变量的值。S是一个Matlab结构,包含变量名和相应的值。Templatefile是包含webpeaks2.html完整路径的html文件名,即C:testwebwebpeaks2.html

 

 

2.4  输出html,dummy.html 代码分析:
<html>
<body bgcolor="#FFFFFF">
<p><font color="#000000" size="5" face="Arial">
<i>MATLAB Peaks Plot</i></font> </p>
  <p align="center"><img border=0 src="$GraphFileName$"></p>
<p><font color="#0000FF" size="2" face="Arial">?001 by The
MathWorks, Inc. All rights reserved. MATLAB is a registered
trademarks of The MathWorks, Inc.</font></p>
</body>
</html>
在html中图片的显示使用标记<img>, GraphFileName是要显示图片的变量名,写成$GraphFileName$的形式,由Matlab输出结构中的相应变量代替

赞助本站

人工智能实验室
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港