概述

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 搭建相关推荐

  1. goahead服务器性能,嵌入式Web服务器GoAhead的研究与应用

    摘要: 随着计算机及网络技术的发展和应用,嵌入式系统的研究成为国内外的研究热点,而嵌入式Web服务器也显示出越来越重要的作用.如今嵌入式Web服务器已经成为国内外嵌入式领域的一个研究热点.目前大部分网 ...

  2. 如何搭建一个简易的Web框架

    Web框架本质 什么是Web框架, 如何自己搭建一个简易的Web框架?其实, 只要了解了HTTP协议, 这些问题将引刃而解. 简单的理解:  所有的Web应用本质上就是一个socket服务端, 而用户 ...

  3. 从使用传统Web框架到切换到Spring Boot后的总结

    1.前言 其实我接触 Spring Boot 的时间并不长,所以还算一个初学者,这篇文章也算是我对 Spring Boot 学习以及使用过程中的复盘,如果文章出现描述错误或表达不清晰的地方,欢迎大家在 ...

  4. java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享

    项目简介: 专门针对微信服务号开发的一套微信商城,微信分销商城,支持商品多规格,支持按地区设置邮费,支持限时打折,订单返现,满减送,满包邮,支持订单打印,订单打印模板自定义,发货单打印,发货单打印模板 ...

  5. goahead Web Server 环境搭建

    GoAhead WebServer GoAhead WebServer,它是一个源码,免费.功能强大.可以在多个平台运行的嵌入式WebServer. GoAhead WebServer的主要特性有: ...

  6. 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 ...

  7. git web框架搭建_Git,Python Web框架,AI,机器学习,Android,Linux和更多必读内容

    git web框架搭建 上周最受关注的是Kedar Vijay Kulkarni编写的新Git系列中的最新一期,随后是Nicholas Hunt-Walker编写的 Python Web框架系列中的最 ...

  8. Python框架篇之Django(Django项目搭建全过程、Web框架与Django)

    文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...

  9. goahead(嵌入式Web服务器)之交叉编译、移植篇

    GoAhead简介: GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server. GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Dig ...

最新文章

  1. phpexcel设置AAA单元格,兼容大于702列数据
  2. 利用libswscale转换yuyv422到yuv422p或rgb之间的转换, 视频翻转
  3. 三年经验java工资,含爱奇艺,小米,腾讯,阿里
  4. jQuery滑盖式自定义radio选择框按钮 jTumbler - Beautiful, Slider-Style Selection Boxes
  5. mysql ken len_MySQL EXPLAIN
  6. OCX控件注册相关(检查是否注册,注册,反注册)
  7. java技术栈_七天串起java技术栈-开篇
  8. Android 高效开发调试神器 JRebel
  9. 常用数据库及表相关操作语句
  10. Django模板-模板标签
  11. linux grep,egrep,正则表达式
  12. ArcMap2SLD添加中文支持
  13. makefile的简单编写
  14. c语言实现 字符串替换函数,C语言函数实现 字符串替换
  15. Team Foundation Server 2013 with Update 3 Install LOG
  16. SAP ABAP FOR ALL ENTRIES 的用法
  17. 二零二二,闯北十年,及时行乐,此生尽兴
  18. 论文笔记(一):Temporal Network Embedding with High-Order Nonlinear Information
  19. 苹果apple通过双重认证帐户恢复获取AppID访问权限
  20. 【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]

热门文章

  1. html2canvas遇到的坑,图片模糊,报Error loading image
  2. python成功将PDF文件转为图片,一次成功,不再踩坑!
  3. 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程
  4. SessionFactory()
  5. 攻防世界【favorite_number】解题方法
  6. stat函数的使用说明
  7. 初识栈溢出及利用栈溢出的四种攻击方法
  8. 阿里云账号实名认证、域名实名制与网站备案的区别
  9. 快手资讯|打不倒的辛巴强势复出!回归首秀GMV近20亿
  10. SpringBoot搭建的项目上传文件时提示The temporary upload location ***is not valid