欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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嵌入到主程序中。
  1. 代码;熟系test.c代码后,我们可以将goahead的初始化代码和处理循环放到单独的线程中。
  2. 编译;goahead编译的目标文件libgo.so和头文件都在build目录下,使用时记得链接和引入,几乎不会出什么问题。
相关标签: # http服务器