嵌入式web框架 goahead 搭建
概述
GoAhead WebServer 是世界上最受欢迎的嵌入式Web 服务器。它简单,小巧,是高效托管嵌入式web应用程序的理想选择。
GoAhead 经过优化,可通过事件驱动的的单线程内核托管动态嵌入式web应用程序,它非常紧凑( 115K代码)。
应用范围
GoAhead Web服务器是部署最广泛的嵌入式Web服务器,在数亿中设备中使用,包括:网络设备、电话、工厂自动化、数据采集、医疗设备、移动设备以及消费和办公设备。
goahead 特性
- 支持ASP
- 嵌入式的javascript
- 标准的CGI
- 执行内存中的CGI处理GoFroms
- 扩展的API快速响应,每秒可处理超过50个请求
- 完全和标准兼容
如果不包含SSI,仅要求60K的内存;包含SSI,要求500K内存
web页面可以存在ROM或文件系统中
支持多种操作系统,包括eCos 、Linux 、LynxOS 、QNX 、VxWorks 、WinC
Goahead 核心
ASP过程
在看完开发手册【官方介绍】之后,ASP过程其实就是JST模板的编写,
- 在goahead 服务器中,网页以 .asp 的拓展名保存,asp是一种动态服务界面;
- 在ASP网页中使用GoAhead JavaScript 时,需要使用<% 函数(参数, …) %) 进行使用;
- Goahead 将提供javascript的解析函数,来对解析脚本函数,参数传递,函数对应C语言实现的注册以及C函数称为JS的一个全局函数。
- 在goahead源码中使用一个自己定义的c函数,这个c函数通过调用goahead服务器中API函数 websAspDefine 向服务器注册此c函数,这样此c函数便成为了Ejscript的一个全局函数,负责具体实现Ejscript查询显示信息的功能。
GoAction 过程
goaction 是一个URL处理器 官方介绍
注: 从3.X 版本之后更新为从GoForms 更新为GoAction
- 会自动解析 /action/ 或者 /goform/ 之后的内容
- 在表单中用于
<form action=/action/NAME method="post">
- 随后将解析后的内容NAME 调用注册函数来处理请求,运行绑定的C函数。 注册函数是
websDefineAction(‘name’,name) 或者 websFormDefine() ; - 表单POST的信息由API函数websGetVar来进行处理;
- GoAction是直接绑定到特定URI的 C语言函数。他们响应客户请求,而无需为每个请求创建新的流程。通过与GoAhead共享地址空间,GoAction可以直接访问完整的请求上下文;
cgi 程序
通用网关接口(CGI)是用于将外部应用程序与WEB服务器接口的标准 官方介绍
- CGI脚本用可以从标准输入中读取,写入标准输出中以及访问环境变量的任何语言编写;
- cgi程序的请求构建时指定"/cgi-bin/ " 的URI前缀标识;
- cgi程序和脚本名称接在"/cgi-bin/ “后面,例如”/cgi-bin/ Name.cgi";
- CGI程序和脚本存储在文档根目录之外的特殊CGI目录中,需要在route.txt中设置;
- 运行CGI程序时,GoAhead CGI处理程序通过环境变量将请求信息传达给CGI程序;
goahead Linux 搭建
搭建环境:ubuntu 18.04
源码版本:goahead 4.1.3
1、下载goahead 源码, 解压
2、执行 ./configure
4、执行编译 make
5、编译完成之后根据提示进行安装 make install安装完成之后会自动创建相关文件:
程序生成文件:在当前目录下bulid/linux-x86-default/bin下
goahead配置文件:在/etc/goahead下 goahead默认文档录:/var/www/goahead
6、在goahead-4.0.2/src目录下找到self.key和self.crt文件,将这两个文件拷贝到/etc/goahead目录下(如果不这么做,启动时会提示读不到这两个文件,从而导致启动失败)
7、启动goahead进入bulid/linux-x86-default/bin下./goahead -v --home /etc/goahead /var/www/goahead 0.0.0.0:1314
打开浏览器,访问1314端口
CGI 程序部署
1、编译cgi 文件
2、配置/etc/goahead/route.txt 文件的参数, 这里要注意的是dir 这个参数 这是根目录, 需要设置为cgi 文件所在的路径。
##
在route.txt文件里的route uri=/cgi-bin dir=根路径 handler=cgi设置根路径,最终的路径为:根路径/cgi-bin,如设置根路径为/mnt/nfs/goheah12/,则cgi文件存放的路径为/mnt/nfs/goheah12/cgi-bin
###
3、如下图所示,main.cgi 所在的路径,文件目录是自己创建的。
4、运行goahead 组件。
5、访问update.html。
6、成功访问了cgi 文件。
update.html
这两个文件都是看别人博客的
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>用户登陆验证</title>
</head>
<body>
<form name="form1" action="/cgi-bin/main.cgi" method="POST">
<table align="center">
<tr><td align="center" colspan="2"></td></tr>
<tr>
<td align="right">用户名</td>
<td><input type="text" name="Username"></td>
</tr>
<tr>
<td align="right">密 码</td>
<td><input type="password" name="Password"></td>
</tr>
<tr>
<td><input type="submit" value="登 录"></td>
<td><input type="reset" value="取 消"></td>
</tr>
</table>
</form>
</body>
</html>
~
main.cgi
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>int main(void)
{fprintf(stdout, "Content-Type: text/html\r\n\r\n");char name[128];char passward[128];char buf[128];char *data;int len,i,m,n;char *method;method = getenv("REQUEST_METHOD");printf("method = %s\n",method);memset(name , 0 , sizeof(name));memset(passward , 0 , sizeof(passward));fscanf(stdin, "Username=%[^&]&Password=%s",name,passward);if(name[0] == '\0' || passward[0] == '\0')printf("name or passward error!");elseprintf("name=%s passward=%s\n",name , passward );fprintf(stderr, "passward = %s\n",passward);fprintf(stderr, "name = %s\n",name);len = atoi(getenv("CONTENT_LENGTH"));fprintf(stderr, "len = %d\n",len);fprintf(stdout, "$STATE$=1");return 0;
}
GoAction 开发
1、这个在网上的资料很少,而且案例还不完整,只知道在写完C函数之后需要WebsFormDefine()函数进行注册。于是找这个函数调用的位置和函数所在的位置。可以看到函数在goahead.h 中被定义,然后在其他的C文件中都调用了goahead.h 。 所以在这些C文件中都可以使用
WebsFormDefine()函数。
2、在别人的博客中的代码是添加在 main.c 的initWeb()中,但是新版本没有这个文件,也找不到文件,但是在http.c 中有这个函数。
3、在http.c 的如下位置添加代码
4、在/var/www/goahead/ 中添加html页面代码
5、使用make 重新编译
sudo ./configure
sudo make
sudo make install
6、运行 ./goahead -v --home /etc/goahead /var/www/goahead 0.0.0.0:1314
7、访问
8、随便输入一些信息,会跳转到带有goform 路径中。
http.c 文件中要加的内容
static void actionTest(Webs *wp)
{cchar *name, *address;name = websGetVar(wp, "name", NULL);address = websGetVar(wp, "address", NULL);websSetStatus(wp, 200);websWriteHeaders(wp, -1, 0);websWriteEndHeaders(wp);websWrite(wp, "<html><body><h2>name: %s, address: %s</h2></body></html>\n", name, address);websFlush(wp, 0);websDone(wp);
}
//加载initWebs ()函数中websDefineAction("test", actionTest); // 注册函数
form.html
中的action,url 会直接传送到http.c中的initWeb 函数中,然后通过 websDefineAction("test", actionTest); 把参数传到actionTest() 进行处理。
<html>
<!-Copyright(c) Go Ahead software Inc.,2012-2012.All Rights Reserved.->
<head>
<title>Goahead Form Test </title>
<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
</head>
<body>
<h1>Goahead Form Test 1111</h1>
<form action=/goform/test method=POST>
<table>
<tr>
<td>Name:</td><td><input type=text name=name size=50 value=""></td>
</tr>
<tr>
<td>Addr:</td><td><input type=text name=addr size=50 value=""></td>
</tr>
<tr>
<td></td>
<td ALIGN="CENTER">
<input type=submit name=ok value="OK"> <input type=submit name=ok value="CANCEL"></td>
</tr>
</table>
</form>
</body>
</html>
参考资料
开发文档
https://www.embedthis.com/goahead/doc/developers/handlers.html
嵌入式web框架 goahead 搭建相关推荐
- goahead服务器性能,嵌入式Web服务器GoAhead的研究与应用
摘要: 随着计算机及网络技术的发展和应用,嵌入式系统的研究成为国内外的研究热点,而嵌入式Web服务器也显示出越来越重要的作用.如今嵌入式Web服务器已经成为国内外嵌入式领域的一个研究热点.目前大部分网 ...
- 如何搭建一个简易的Web框架
Web框架本质 什么是Web框架, 如何自己搭建一个简易的Web框架?其实, 只要了解了HTTP协议, 这些问题将引刃而解. 简单的理解: 所有的Web应用本质上就是一个socket服务端, 而用户 ...
- 从使用传统Web框架到切换到Spring Boot后的总结
1.前言 其实我接触 Spring Boot 的时间并不长,所以还算一个初学者,这篇文章也算是我对 Spring Boot 学习以及使用过程中的复盘,如果文章出现描述错误或表达不清晰的地方,欢迎大家在 ...
- java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享
项目简介: 专门针对微信服务号开发的一套微信商城,微信分销商城,支持商品多规格,支持按地区设置邮费,支持限时打折,订单返现,满减送,满包邮,支持订单打印,订单打印模板自定义,发货单打印,发货单打印模板 ...
- goahead Web Server 环境搭建
GoAhead WebServer GoAhead WebServer,它是一个源码,免费.功能强大.可以在多个平台运行的嵌入式WebServer. GoAhead WebServer的主要特性有: ...
- python搭建django框架,Python之Web框架Django项目搭建全过程
Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...
- git web框架搭建_Git,Python Web框架,AI,机器学习,Android,Linux和更多必读内容
git web框架搭建 上周最受关注的是Kedar Vijay Kulkarni编写的新Git系列中的最新一期,随后是Nicholas Hunt-Walker编写的 Python Web框架系列中的最 ...
- Python框架篇之Django(Django项目搭建全过程、Web框架与Django)
文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...
- goahead(嵌入式Web服务器)之交叉编译、移植篇
GoAhead简介: GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server. GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Dig ...
最新文章
- phpexcel设置AAA单元格,兼容大于702列数据
- 利用libswscale转换yuyv422到yuv422p或rgb之间的转换, 视频翻转
- 三年经验java工资,含爱奇艺,小米,腾讯,阿里
- jQuery滑盖式自定义radio选择框按钮 jTumbler - Beautiful, Slider-Style Selection Boxes
- mysql ken len_MySQL EXPLAIN
- OCX控件注册相关(检查是否注册,注册,反注册)
- java技术栈_七天串起java技术栈-开篇
- Android 高效开发调试神器 JRebel
- 常用数据库及表相关操作语句
- Django模板-模板标签
- linux grep,egrep,正则表达式
- ArcMap2SLD添加中文支持
- makefile的简单编写
- c语言实现 字符串替换函数,C语言函数实现 字符串替换
- Team Foundation Server 2013 with Update 3 Install LOG
- SAP ABAP FOR ALL ENTRIES 的用法
- 二零二二,闯北十年,及时行乐,此生尽兴
- 论文笔记(一):Temporal Network Embedding with High-Order Nonlinear Information
- 苹果apple通过双重认证帐户恢复获取AppID访问权限
- 【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]
热门文章
- html2canvas遇到的坑,图片模糊,报Error loading image
- python成功将PDF文件转为图片,一次成功,不再踩坑!
- 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程
- SessionFactory()
- 攻防世界【favorite_number】解题方法
- stat函数的使用说明
- 初识栈溢出及利用栈溢出的四种攻击方法
- 阿里云账号实名认证、域名实名制与网站备案的区别
- 快手资讯|打不倒的辛巴强势复出!回归首秀GMV近20亿
- SpringBoot搭建的项目上传文件时提示The temporary upload location ***is not valid