说明

  • 采用第三方开源库作为嵌入式web服务器并且对外提供自定义接口,goahead是个不错的选择,它支持内存CGI并且可以很方便的嵌入到自己的程序中,在中小公司中很受欢迎。

简介

  • GoAhead是一个开源,免费,功能强大,可以在多个平台运行的嵌入式WebServer,主要特性有:
  1. 支持ASP
  2. 嵌入式的javascript
  3. 标准的CGI执行
  4. 内存中的CGI处理GoFroms
  5. 扩展的API
  6. 快速响应,每秒可处理超过50个请求
  7. 完全和标准兼容
  8. 如果不包含SSL,仅要求60K的内存;包含SSL,要求500K内存
  9. web页面可以存在ROM或文件系统中
  10. 支持多种操作系统,包括eCos 、LINUX 、LynxOS 、QNX 、VxWorks 、WinCE、
    pSOS等

环境准备

  1. 下载地址
  1. 编译安装
  • 使用当前最新版本:goahead-4.1.3,在Ubuntu上编译。
  • goahead 支持多种工具编译,使用make编译:
make   //编译本平台goahead
make -f projects/goahead-linux-default.mk //指定makefile
make install
* 使用make编译不需要执行 configure,configure中有说明。
  • 生成的文件在:bulid/linux-x86-default/目录下,安装时会将该目录下的文件拷贝至对应目录,配置文件安装在/etc/goahead目录下,默认网页目录/var/www/goahead。
  1. 运行
  • 执行命令
./goahead -v --home 配置文件路径 网页文件路径 绑定IP:监听端口
./goahead -v --home /etc/goahead /var/www/goahead 127.0.0.1:8080

开源库入门

  1. 目录结构
doc  //帮助文档
src  //源码
test //测试示例
  • doc目录下有说明文档,但是说明和示例不是很详细,可以参照test目录下的测试例子来验证。
  • test目录下的示例test.c默认不会编译需要手动修改makefile,仿照原有编译代码,添加代码如下:
#    test
#    48
DEPS_48 += $(BUILD)/bin/libgo.so
DEPS_48 += $(BUILD)/.install-certs-modified
DEPS_48 += $(BUILD)/obj/test.o

ifeq ($(ME_COM_MBEDTLS),1)
    LIBS_48 += -lmbedtls
endif
ifeq ($(ME_COM_MBEDTLS),1)
    LIBS_48 += -lgoahead-mbedtls
endif
ifeq ($(ME_COM_MBEDTLS),1)
    LIBS_48 += -lmbedtls
endif
ifeq ($(ME_COM_OPENSSL),1)
    LIBS_48 += -lgoahead-openssl
endif
ifeq ($(ME_COM_OPENSSL),1)
ifeq ($(ME_COM_SSL),1)
    LIBS_48 += -lssl
    LIBPATHS_48 += -L"$(ME_COM_OPENSSL_PATH)"
endif
endif
ifeq ($(ME_COM_OPENSSL),1)
    LIBS_48 += -lcrypto
    LIBPATHS_48 += -L"$(ME_COM_OPENSSL_PATH)"
endif
LIBS_48 += -lgo
ifeq ($(ME_COM_OPENSSL),1)
    LIBS_48 += -lgoahead-openssl
endif
ifeq ($(ME_COM_MBEDTLS),1)
    LIBS_48 += -lgoahead-mbedtls
endif

$(BUILD)/bin/test: $(DEPS_48)
	@echo '      [Link] $(BUILD)/bin/test'
	$(CC) -o $(BUILD)/bin/test $(LDFLAGS) $(LIBPATHS)  "$(BUILD)/obj/test.o" $(LIBPATHS_48) $(LIBS_48) $(LIBS_48) $(LIBS) $(LIBS)

自定义程序

  • 实际使用中,并不是直接使用goahead,需要实现的有:
  1. 提供webservice接口
  2. 提供动态网页
  3. 与主程序配合
  • 自定义程序可以参照test目录下test.c实现以上功能。
  • goahead更新比较频繁,4.1.3版本相比之前工作中使用的版本,接口命名和使用都有了一些改变,以test目录下的示例和当前版本的帮助文档为准。

提供webservice接口

  1. 初始化时添加action定义
websDefineAction("test", actionTest);
  1. action支持get和post方式访问
* get方式
http://192.168.70.210:8080/action/test?xxx=xxx
* post
<form action=/action/test method="post">
    ....
</form>

提供动态网页

  1. 初始化时添加Jst定义
websDefineJst("aspTest", aspTest);

static int aspTest(int eid, Webs *wp, int argc, char **argv)
{
    char *test = "hello asp";
	return websWrite(wp,"%s",test);
}
  1. 在ASP网页中添加如下代码
<% aspTest();%>
  1. 在浏览器上访问该ASP网页时,网页中该部分代码将会被替换成aspTest函数的执行结果。

与主程序配合

  1. 可以在主程序中初始化goahead,如测试代码test.c中的一样,这样就是同一个进程。
  2. 也可以通过进程通信的方式,在服务器进程和主进程之间进行通信。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐