Libevent HTTP 服务器和压缩?
我在我的应用程序中使用 libevent2 来托管 http 服务器。我找不到压缩输出的内置方法。
这些是我正在考虑的选项:
- 在发送响应之前,在我的应用程序中使用 zlib 应用 gzip/deflate 压缩
- Hack libevent 的 http.c 以公开 evhttp_connection->bufev (bufferevent 对象),并对传出数据应用 zlib 过滤器
(两者都从 Accept-Encoding 标头读取支持的压缩格式)
是否有一些我忽略的更简单的方法,或者就是这样?
I'm using libevent2 in my application to host a http server. I cant find a built-in way to compress the output.
These are the options I'm considering:
- Apply gzip/deflate compression using zlib in my app before sending out the response
- Hack libevent's http.c to expose evhttp_connection->bufev (the bufferevent object), and apply a zlib filter for outgoing data
(Both read the supported compression formats from the Accept-Encoding header)
Is there some easier way I'm overlooking, or is this pretty much it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我使用这个小技巧来获取 evhttp_connection 的文件描述符,它就在您想要的指针旁边。这是一个令人讨厌的黑客行为,但它很简单,而且比重建 libevent 更容易。它已经在x86_64下测试并且运行良好。
查看结构定义(下面),您想要的 bufev 似乎应该可以使用 (((void *)this_connection) + 8) 或非常类似的东西来访问。
I use this little trick to obtain the file descriptor of an evhttp_connection, which is right next to the pointer you want. It's a nasty hack, but it's simple, and easier that having to rebuild libevent. It has been tested under x86_64 and runs fine.
Looking at the structure definition (beneath), it appears the bufev you want should be accessible using (((void *)this_connection) + 8) or something very similar.
在 2022 年获得 FD 套接字的非 hacky 方法:
Non-hacky way to get the FD socket in 2022: