gpt4 book ai didi

http - Libevent HTTP 服务器和压缩?

转载 作者:可可西里 更新时间:2023-11-01 16:39:32 25 4
gpt4 key购买 nike

我在我的应用程序中使用 libevent2 来托管 http 服务器。我找不到压缩输出的内置方法。

这些是我正在考虑的选项:

  1. 在发送响应之前,在我的应用中使用 zlib 应用 gzip/deflate 压缩
  2. 破解 libevent 的 http.c 以公开 evhttp_connection->bufev(bufferevent 对象),并对传出数据应用 zlib 过滤器

(都从 Accept-Encoding header 中读取支持的压缩格式)

有没有我忽略的更简单的方法,还是差不多就是这样?

最佳答案

我使用这个小技巧来获取 evhttp_connection 的文件描述符,它就在您想要的指针旁边。这是一个令人讨厌的 hack,但它很简单,而且比重建 libevent 更容易。它已经在 x86_64 下测试并且运行良好。

static void
send_document_cb(struct evhttp_request *req, void *arg)
{
// ....

struct evhttp_connection *this_connection;
this_connection = evhttp_request_get_connection(req);

int *tricky;
tricky = (((int *)this_connection) + 4);
int fd = *tricky;

printf("fd: %i\n", fd);

// ....
}

查看结构定义(下方),您想要的 bufev 似乎可以使用 (((void *)this_connection) + 8) 或非常类似的方法访问。

struct evhttp_connection { 
TAILQ_ENTRY(evhttp_connection) next;

evutil_socket_t fd;
struct bufferevent *bufev;

...
}

关于http - Libevent HTTP 服务器和压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com