说明
- 采用第三方开源库作为嵌入式web服务器并且对外提供自定义接口,goahead是个不错的选择,它支持内存CGI并且可以很方便的嵌入到自己的程序中,在中小公司中很受欢迎。
简介
- GoAhead是一个开源,免费,功能强大,可以在多个平台运行的嵌入式WebServer,主要特性有:
- 支持ASP
- 嵌入式的javascript
- 标准的CGI执行
- 内存中的CGI处理GoFroms
- 扩展的API
- 快速响应,每秒可处理超过50个请求
- 完全和标准兼容
- 如果不包含SSL,仅要求60K的内存;包含SSL,要求500K内存
- web页面可以存在ROM或文件系统中
- 支持多种操作系统,包括eCos 、LINUX 、LynxOS 、QNX 、VxWorks 、WinCE、
pSOS等
环境准备
- 下载地址
- 编译安装
- 使用当前最新版本: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。
- 运行
./goahead -v --home 配置文件路径 网页文件路径 绑定IP:监听端口
./goahead -v --home /etc/goahead /var/www/goahead 127.0.0.1:8080
开源库入门
- 目录结构
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,需要实现的有:
- 提供webservice接口
- 提供动态网页
- 与主程序配合
- 自定义程序可以参照test目录下test.c实现以上功能。
- goahead更新比较频繁,4.1.3版本相比之前工作中使用的版本,接口命名和使用都有了一些改变,以test目录下的示例和当前版本的帮助文档为准。
提供webservice接口
- 初始化时添加action定义
websDefineAction("test", actionTest);
- action支持get和post方式访问
* get方式
http://192.168.70.210:8080/action/test?xxx=xxx
* post
<form action=/action/test method="post">
....
</form>
提供动态网页
- 初始化时添加Jst定义
websDefineJst("aspTest", aspTest);
static int aspTest(int eid, Webs *wp, int argc, char **argv)
{
char *test = "hello asp";
return websWrite(wp,"%s",test);
}
- 在ASP网页中添加如下代码
<% aspTest();%>
- 在浏览器上访问该ASP网页时,网页中该部分代码将会被替换成aspTest函数的执行结果。
与主程序配合
- 可以在主程序中初始化goahead,如测试代码test.c中的一样,这样就是同一个进程。
- 也可以通过进程通信的方式,在服务器进程和主进程之间进行通信。