用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

工控网中基于Linux的嵌入式HTTP服务器设计

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:54:19
。嵌入式HTTP服务器接收到客户提交的参数设备请求后,执行参数写入操作。

③远程实时控制。远程实时控制允许远程用户在线地控制系统中的相应执行机构,比如电机、电磁阀等。嵌入式HTTP服务器接收到远方客户提交的控制操作请求后,将下发控制命令驱动监控系统中相应的执行机构。

④访问级别设置和权限认证。只有权限不低于要求访问级别的客户,经嵌入式HTTP服务器认证后,方可进行其权限范围内的监控操作。

3 主要实现技术

3.1 超文本传输协议

HTTP协议是一个面向事务、无状态的应用层协议。在传输层,HTTP协议使用请求(request)/响应(response)模型。一次简单的HTTP事务包括以下过程。首先,客户(浏览器)发起和建立一条到服务器的TCP连接。然后,客户发送一个HTTP请求到服务器,请求包含方法、URI、协议版本和一个类MIME报文。服务器解析HTTP请求后,给出相应的HTTP响应,响应包括协议版本、状态码、解释状态码的简短短语和一个类MIME报文。最后,释放TCP连接。Linux操作系统为用户提供了称为BSD Socket的网络编程接口。利用其中的TCP套接口函数,可以非常方便地实现HTTP协议。

HTTP1.0为每一次HTTP请求/响应建立一条新的TCP连接,由于建立一条TCP连接要经历3次握手,因此效率不高。HTTP1.1提出了可持续性连接的概念。HTTP1.1只建立一次TCP连接,而重复地使用它传送一条素的请求/响应消息,减少了额外开销。在嵌入式HTTP服务器中,一般使用HTTP1.1协议。HTTP1.1协议的细节请参考RFC2616。

3.2 通用网关接口CGI

参数设置和远程控制功能都是通过CGI(通用网关接口)程序和表单实现的。CGI使用HTML表单向Web服务器发送信息。基本语法如下:

<FORM METHOD=get/post ACTION=URL></FORM>

其中,METHOD属性指定将数据传送到Web服务器的方法。输入方法有两种:GET和POST。ACTION属性定义要对表单数据进行处理的CGI脚本的URL。

CGI的工作流程是首先由浏览器将用户输入的数据传递给Web服务器,Web服务器根据接收到的数据设置环境变量并启动CGI脚本,CGI脚本从环境变量中读取所需要的数据并进行相应处理,最后使用STDOUT输出HTML形式的结果文件,经Web服务器送回浏览器,最终显示给用户。传统的CGI程序与服务器代码分开,是一个符号CGI标准的可执行文件,并储存在CF卡等存储设备上,一般用脚本语言编写。考虑到嵌入式HTTP服务器要求速度快,功能和代码都尽可能精简的特点,可以把原先由可执行文件完成的功能用C函数实现,放在服务器代码内部,并直接从HTTP请求报文接收数据。与传统CGI程序相比,这种方法具备如下特点:

*不需要标准输入,CGI函数可以直接获取到浏览器送来的信息;

*不需要标准输出,CGI函数可以直接将数据送回给浏览器;

*不需要环境变量,CGI和Web服务器在同一程序中实现,不需要环境变量来交换信息。

3.3 自定义标记

要在网页中显示工控系统中大量的实时数据,常规方法是将HTML代码直接集成到程序代码中,或者反之将C程序代码集成到HTML标记语言中。这两种方法均要求开发人员对HTML标记语言的语法细节非常熟悉。网页或程序结构的单方面调整都将导致整个系统全盘修改,系统不具备灵活性与可扩展性。HTML的精髓在于该语言的“标记”性,各种不同标记的具体含义是由服务器和浏览器进行解析。因此,当现有标记不能满足新的应用需求时,可以自行定义新的标记,只需服务器将自定义标记解析为标准标记,然后传送给浏览器即可。在本项目中,主要的实时数据转速、重量、一氧化碳含量等状态信息,可以定义相应的标记。服务器中解析相应标记的函数同样用C语言来实现。运行时,当客户端发出查看某实时网页的请求后,嵌入式HTTP服务器将相应的网页文件从电子盘加载到内存进行逐项解析。当辨识出自定义标记后,就调用相应的函数。该函数返回该标记对应的当前值,并置换HTML文件流中的自定义标记。最后,嵌入式HTTP服务器将解析结果发送给客户端。实时网页的设计与相应的HTTP服务器处理程序得以分离,处于一种弱耦合关联状态。这样,网页界面的调整不会影响HTTP服务器的程序设计,HTTP服务器程序的修改也与网页界面设计无关,整个嵌入式HTTP服务器具备灵活性和可扩展性。

3.4 多线程

最初的进程定义包含程序、资源及其执行三部分,其中程序通常指代码,资源通常包括 内存资源、I/O资源、信号处理等,而程序的执行指执行上下文,这一部分后来发展为线程。在线程的概念出现以前,为了减小进程切换的开销,操作系统设计者逐渐修改正进程的概念,允许将进程所占有的资源从其主体剥离出来,允许某些进程共离享一部分资源,例如文件、信号、数据内存、甚至代码,这就是轻质进程的概念。Linux内核的2.0.x版本就已经实现了轻质进程。应用程序可以通过一个统一的clone()系统调用接口,用不同的参数指定创建轻质进程还是普通进程。在内核中,clone()调用经过参数传递和解释后会调用do_fork(),这个核内函数同时也是fork、vfork()系统调用的最终实现。在do_fork()中,不同的flone_flags将导致不同

上一页  [1] [2] [3] [4]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:3,390.62500 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号