带有libevent的多线程HTTP服务器

Multi-threaded HTTP server with libevent

本文关键字:HTTP 服务器 多线程 libevent 带有      更新时间:2023-10-16

我正在尝试用libevent完成一个简单的HTTP服务器,并根据文档示例成功地完成了它。但是,如果没有线程,libevent的全部目的就是垃圾。我对C++11中的线程不是很有经验,但我很想知道如何正确地实现这样的服务器。

我在网上找到了这个例子:https://gist.github.com/kzk/665437

这是正确的吗?pthreads是正确的选择吗?此外,这句话很奇怪:

for (int i = 0; i < nthreads; i++) {
    pthread_join(ths[i], NULL);
}

那里发生了什么事?

由于一个严重的错误,我还不能推荐libevhtp,但您可能想看看他们是如何使用线程的:https://github.com/ellzey/libevhtp/blob/master/examples/thread_design.c
-他们正在创建单独的libevent实例,每个线程一个。只要在线程中小心使用相同的libevent库,所有异步代码都可以在没有额外锁等的情况下工作。IMO这是典型web服务器的libevent编码的最佳方法。

至于https://gist.github.com/kzk/665437,c++11线程应该不会比pthreads更糟糕。