Libevent::evhttp服务器

摘要:
“,__LINE_);return;}else{size_tcopy_len=post_size˃BUF_MAX?BUF_MAX:post_size;printf(”===行:%d,postlen:%d,copy_len:%d“,__LINE__,post_size,copy_en);memcpy(BUF,evbuffer_pullup(req-˃input_buffer,-1),copy_lun);BUF[post_size]='
#include <cstdio>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "evhttp.h"
#include "event.h"
#include "event2/http.h"
#include "event2/event.h"
#include "event2/buffer.h"
#include "event2/bufferevent.h"
#include "event2/bufferevent_compat.h"
#include "event2/http_struct.h"
#include "event2/http_compat.h"
#include "event2/util.h"
#include "event2/listener.h"
int main()
{
    struct evhttp *http_server = NULL;
    short http_port = 8081;
    char *http_addr = "0.0.0.0";

    //初始化
    event_init();
    //启动http服务端
    http_server = evhttp_start(http_addr, http_port);
    if (http_server == NULL)
    {
        printf("====line:%d,%s
", __LINE__, "http server start failed.");
        return -1;
    }

    //设置请求超时时间(s)
    evhttp_set_timeout(http_server, 5);
    //设置事件处理函数,evhttp_set_cb针对每一个事件(请求)注册一个处理函数,
    //区别于evhttp_set_gencb函数,是对所有请求设置一个统一的处理函数
    evhttp_set_cb(http_server, "/post", http_handler_testpost_msg, NULL);
    evhttp_set_cb(http_server, "/get", http_handler_testget_msg, NULL);

    //循环监听
    event_dispatch();
    //实际上不会释放,代码不会运行到这一步
    evhttp_free(http_server);

    return 0;
}
//解析post请求数据
void get_post_message(char *buf, struct evhttp_request *req)
{
    size_t post_size = 0;

    post_size = evbuffer_get_length(req->input_buffer);//获取数据长度
    printf("====line:%d,post len:%d
", __LINE__, post_size);
    if (post_size <= 0)
    {
        printf("====line:%d,post msg is empty!
", __LINE__);
        return;
    }
    else
    {
        size_t copy_len = post_size > BUF_MAX ? BUF_MAX : post_size;
        printf("====line:%d,post len:%d, copy_len:%d
", __LINE__, post_size, copy_len);
        memcpy(buf, evbuffer_pullup(req->input_buffer, -1), copy_len);
        buf[post_size] = '

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇json web token 网上学习笔记Demo学习: FileUpload下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

http实现发送post请求,获取结果集

1 package com.ming; 2 3 import java.io.BufferedReader; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.PrintWriter; 7 impor...

[原]零基础学习SDL开发之在Android使用SDL2.0渲染PNG图片

在上一篇文章我们知道了如何在android使用SDL2.0来渲染显示一张bmp图,但是如果是一张png或者一张jpg的图,那么还能显示成功么?答案是否定的 我们需要移植SDL_image库来支持除bmp之外的图片格式。 一、移植SDL_image库: 使用如下命令,从SDLMercurial获取SDL_image的源码: hg clone https://...

qt 界面去掉系统边框

该代码在Qt5框架编辑,使用该类时, 直接继承这个类就可以了。 实现了拖拽功能和关闭功能,如果需要放大缩小功能, 需自己实现。 1 #ifndef CUSTOMIZE_QWIDGET_H 2 #define CUSTOMIZE_QWIDGET_H 3 #include <QWidget> 4 #include <QMouseE...

转:openwrt 框架分析

本文是本人对OpenWrt的Makefile的理解,并非转载。OpenWrt是一个典型的嵌入式Linux工程,了解OpenWrt的Makefile的工作过程对提高嵌入式Linux工程的开发能力有极其重要意义。OpenWrt的主Makefile文件只有100行,可以简单分为三部分,1~17行为前导部分,19~31为首次执行部分,33~101为再次执行部分。前...

第十一节:Bundles压缩合并js和css及原理分析

一. 简介  1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是MVC中特有的一种优化方式。  (当然现在前端也有很多基于node的工作流插件,可以合并压缩混淆js或css) 2. 原理(了解即可):核心方法ApplyTr...

Mac OS 安装mysqlcliet 失败问题解决

简单记录 Mac OS pip 安装mysqlclient报错处理过程 系统: python: Python 3.8.2 虚拟环境 直接安装 mysqlclient 会报错 Using cached https://files.pythonhosted.org/packages/f4/f1/3bb6f64ca7a429729413e6556b7ba5976...