goahead - 导入项目

说明

  • 在项目中采用goahead作为Http服务器,为远程客户端提供访问接口和资源(网页,图片等),往往需要自定义很多接口和处理。
  • 自定义接口,简单点可以使用CGI协议(大部分公司采用的),但是由于CGI程序的性能问题以及CGI程序与主程序进程通信的不便,我们需要其它方式,例如:内存CGI,嵌入到主进程等。
  • 如何将goahead导入项目? 与主程序配合工作有多种方式,如下:

goahead扩展性

  • 设计初,goahead就充分考虑了扩展性和可嵌入性,内存CGI等机制就体现了这一点,查看编译脚本可发现核心源码最终编译成了一个库(libgo.so),主程序goahead也是链接的该库实现的。

扩展

  • 我们采用内存CGI机制实现自定义接口并链接libgo.so库将goahead嵌入到自己的程序。
  • goahead是C语言编写的,使用C++使用其接口也不会报错。

单独的程序

  • 将goahead源码编译成单独的程序,与主程序通过进程通信机制协调工作,是一种比较简便的方式。
  • 在goahead源码上进行扩展,有两种方法:
  1. 链接libgo,自己实现主程序
  • 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中的代码以及编译命令即可轻松实现独立的自定义服务器程序。
  1. 直接修改goahead.c
  • 默认编译的主程序goahead,实际上也是链接libgo,其源码文件为goahead.c,查看其实现可以发现和上面的test.c差别不大,因此可以直接修改goahead.c 来自定义程序。

嵌入到主程序

  • 考虑到进程通信的麻烦,以及单独进程代码不能复用,性能低点,想对goahead源码做较大调整,我们也可以将goahead嵌入到主程序中。
  • 实现:在主程序中,模仿示例代码(test.c), 链接和调用libgo中接口。
  1. 代码;熟系test.c代码后,我们可以将goahead的初始化代码和处理循环放到单独的线程中。
  2. 编译;goahead编译的目标文件libgo.so和头文件都在build目录下,使用时记得链接和引入,几乎不会出什么问题。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值