Libevhtp

来源:互联网 发布:数据产品经理面试题目 编辑:程序博客网 时间:2024/06/11 21:26
依赖包版本
Libevent 版本 > 2.0
Openssl 版本 > 0.9.8k
Cmake 版本 > 2.8 (libevhtp使用cmake编译的)
系统yum源
这几个包在系统源中的版本都低于最低依赖版本
为了避免不破坏系统原有依赖
我们将新的包都安装到 /opt/local 一般来说这个目录都是空, 与/usr/local目录相对应
创建文件目录

sudo mkdir -p /opt/local

安装Openssl

cd /opt/local
wget "http://www.openssl.org/source/openssl-1.0.1e.tar.gz"
tar xzvf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config shared --prefix=/opt/local --openssldir=/opt/local/ssl
make
sudo make install

安装Libevent2.0

cd /opt/local
wget "https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz"

tar xzvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/opt/local LDFLAGS=-L/opt/local/lib CPPFLAGS=-I/opt/local/include
make
sudo make install

安装Cmake

wget "http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz"
tar xzvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap --prefix=/opt/local
make
sudo make install

安装Libevhtp



wget "https://github.com/ellzey/libevhtp/archive/1.2.4.tar.gz" -O libevhtp-1.2.4.tar.gz
tar xzvf libevhtp-1.2.4.tar.gz
cd libevhtp-1.2.4
/opt/local/bin/cmake -DCMAKE_PREFIX_PATH=/opt/local -DCMAKE_INSTALL_PREFIX=/opt/local .
make
sudo make install




使用Libevhtp
#编译命令中加上

gcc libevhtpDemo.c -I/opt/local/include -L/opt/local/lib -Wl,-rpath /opt/local/lib -levent_openssl -levent -levhtp



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
 
#include <evhtp.h>
 
void
testcb(evhtp_request_t * req, void * a);
 
void
testcb(evhtp_request_t * req, void * a) {
  evbuffer_add_reference(req->buffer_out, "foobar", 6, NULL, NULL);
  evhtp_send_reply(req, EVHTP_RES_OK);
}
 
int main (int argc, const char * argv[])
{
  evbase_t *evbase = event_base_new();
  evhtp_t *htp = evhtp_new(evbase, NULL);
 
  evhtp_set_cb(htp, "/", testcb, NULL); /* 设置回调函数 */
  evhtp_use_threads(htp, NULL, 4, NULL); /* 设置4个线程 */
 
  /* 监听本地所有IP的8080端口, backlog为1024 */
  evhtp_bind_socket(htp, "0.0.0.0", 8080, 1024);
 
  /* 进入循环、监听连接,http server开始工作 */
  event_base_loop(evbase, 0);
 
  return 0;
}
原创粉丝点击