一、简介
嵌入式web服务器的搭建,这里使用的是 goahead-5.2.0版本
二、虚拟机下编译
1.下载源码
2. 解压
输入命令进行解压 tar -zxvf goahead-5.2.0-src.tgz
3.编译
在源码根目录直接输入make进行编译,编译出的文件在build目录下
三、基本工程创建
1. 目录结构
2. 测试代码
#include "goahead.h"
#include "js.h"
static int finished = 0;
#if ME_UNIX_LIKE
static void sigHandler(int signo)
{
finished = 1;
}
#endif
void initPlatform(void)
{
#if ME_UNIX_LIKE
signal(SIGINT, sigHandler);
signal(SIGTERM, sigHandler);
signal(SIGKILL, sigHandler);
#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN);
#endif
#elif ME_WIN_LIKE
_fmode=_O_BINARY;
#endif
}
static void logHeader(void)
{
char home[ME_GOAHEAD_LIMIT_STRING];
getcwd(home, sizeof(home));
logmsg(2, "Configuration for %s", ME_TITLE);
logmsg(2, "---------------------------------------------");
logmsg(2, "Version: %s", ME_VERSION);
logmsg(2, "BuildType: %s", ME_DEBUG ? "Debug" : "Release");
logmsg(2, "CPU: %s", ME_CPU);
logmsg(2, "OS: %s", ME_OS);
logmsg(2, "Host: %s", websGetServer());
logmsg(2, "Directory: %s", home);
logmsg(2, "Documents: %s", websGetDocuments());
logmsg(2, "Configure: %s", ME_CONFIG_CMD);
logmsg(2, "---------------------------------------------");
}
int main()
{
char *route, *auth, *endpoint;
route = "web_cfg/route.txt";
auth = "web_cfg/auth.txt";
endpoint = "*:8080";
logSetPath("stdout:2"); //设置日志输出
//websSetBackground(1); //程序后台运行
//websSetDebug(1); //设置是否以debug模式运行
//logSetPath(5); //设置打印等级
//设置工作目录
char *documents = "web"; //设置网页路径
if (chdir("./") < 0) { //设置工作路径
error("Cannot change directory to %s", "./");
exit(-1);
}
initPlatform();
if (websOpen(documents, route) < 0) {
error("Cannot initialize server. Exiting.");
return -1;
}
logHeader(); //程序运行的初始打印
if (websLoad(auth) < 0) {
error("Cannot load %s", auth);
return -1;
}
if (websListen(endpoint) < 0) { //接听用户输入的ip和端口号
return -1;
}
if (websGetBackground()) { //获取是否在后台运行
if (daemon(0, 0) < 0) { //守护进场
error("Cannot run as daemon");
return -1;
}
}
websServiceEvents(&finished);
logmsg(1, "Instructed to exit\n");
websClose();
return 0;
}
四、x86平台下测试
1. 程序执行
找不到动态库文件
error while loading shared libraries: libgo.so: cannot open shared object file: No such file or directory
添加脚本
export LD_LIBRARY_PATH=./lib
./goahead_test
2. 执行结果
五、代码工程
工程已经实现文件的上传,文件的下载,登录,作为基础工程进行开发,有需要带走