goahead - 引入项目
程序员文章站
2024-03-20 16:39:34
...
说明
- 在项目中采用goahead作为Http服务器,为远程客户端提供访问接口和资源(网页,图片等),往往需要自定义很多接口和处理。
- 自定义接口,简单点可以使用CGI协议(大部分公司采用的),但是由于CGI程序的性能问题以及CGI程序与主程序进程通信的不便,我们需要其它方式,例如:内存CGI,嵌入到主进程等。
goahead扩展性
- 设计初,goahead就充分考虑了扩展性和可嵌入性,内存CGI等机制就体现了这一点,查看编译脚本可发现核心源码最终编译成了一个库(libgo.so),主程序goahead也是链接的该库实现的。
扩展
- 我们采用内存CGI机制实现自定义接口并链接libgo.so库将goahead嵌入到自己的程序。
- goahead是C语言编写的,使用C++使用其接口也不会报错。
单独的程序
- goahead源码中test目录下的test.c是一个使用示例,但是默认未编译,需要仿照编译脚本中其它编译代码在编译脚本中加上如下代码:
TARGETS += $(BUILD)/bin/test
#
# test.o
# 47
DEPS_47 += $(BUILD)/inc/goahead.h
DEPS_47 += $(BUILD)/inc/js.h
$(BUILD)/obj/test.o: \
test/test.c $(DEPS_47)
@echo ' [Compile] $(BUILD)/obj/test.o'
$(CC) -c -o $(BUILD)/obj/test.o $(CFLAGS) $(DFLAGS) -D_FILE_OFFSET_BITS=64 -D_FILE_OFFSET_BITS=64 -DMBEDTLS_USER_CONFIG_FILE=\"embedtls.h\" -DME_COM_OPENSSL_PATH=$(ME_COM_OPENSSL_PATH) $(IFLAGS) "-I$(ME_COM_OPENSSL_PATH)/include" test/test.c
#
# 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'
$(CXX) -std=c++11 -o $(BUILD)/bin/test $(LDFLAGS) $(LIBPATHS) "$(BUILD)/obj/test.o" $(LIBPATHS_48) $(LIBS_48) $(LIBS_48) $(LIBS) $(LIBS)
- 仿照test.c中的代码以及编译命令即可轻松实现单独的自定义服务器程序。
嵌入到主程序
- 考虑到进程通信的麻烦,以及本项目平台的一些特性,我们倾向于将goahead嵌入到主程序中。
- 代码;熟系test.c代码后,我们可以将goahead的初始化代码和处理循环放到单独的线程中。
- 编译;goahead编译的目标文件libgo.so和头文件都在build目录下,使用时记得链接和引入,几乎不会出什么问题。
推荐阅读
-
一次项目经历[3] 博客分类: 项目管理 研发管理创业心得
-
goahead - 引入项目
-
一次项目经历[2] 博客分类: 项目管理 研发管理
-
运行play framework项目 报错 Could not bind on port 9000 博客分类: play
-
vue项目中实现下载后端返回的excel数据表格
-
dotnet开源项目 项目管理ASP.netdotnetnuke.netASP
-
play framework学习笔记之 部署项目 log4jlighttpdGAEApacheJPA
-
OSPF综合实验(telent+nat+mgre+路由引入)
-
前后端分离项目利用Blob下载文件中文乱码的解决办法
-
封装一个在小项目中使用的volley(通俗简便、方便灵活)