是否有使用 C 或 C++ 的高性能(最好是事件和开源)Web 服务器?
我希望能够使用它,因为它使用填充的 HTTP 请求类/结构调用我的应用程序中的方法/函数,然后我可以将填充的 HTTP 响应类/结构返回给它。
如果它不是开源的,我需要内置对长轮询连接、保持事件等的支持——否则,我认为我可以自己添加这些东西。
如果您不知道有任何可用的此类服务器,您是否会建议我编写自己的 Web 服务器来完成这项任务?它不能是基于文件的,并且必须用高性能 C/C++ 编写。
编辑:如果有帮助的话,我正在考虑类似 C 语言的 Ruby Mongrel 之类的东西。
最佳答案
我的工作有完全相同的要求,所以我评估了一些解决方案:mongoose、libmicrohttpd、libevent。我也在考虑编写 nginx 模块。以下是我的发现摘要:
nginx
我喜欢这个服务器并且经常使用它。它的性能和资源使用率比 Apache 好得多,我也在使用它,但计划迁移到 nginx。
- 非常好的可调性能。丰富的功能。便携性。
- 模块 API 没有文档记录,而且似乎非常冗长。看这个nginx hello world module例如。
- Nginx 不使用线程而是使用多进程。这使得编写模块变得更加困难,需要学习用于共享内存的 nginx API 等。
Mongoose
- 所有服务器代码都在单个 mongoose.c 文件中(大约 130K),没有依赖项。这很好。
- 每个连接一个线程,所以如果你需要并发,你必须配置很多线程,即。高内存使用率。不太好。
- 表现不错,但不是特别出色。
- API 很简单,但您必须自己编写所有响应 HTTP header ,即。详细了解 HTTP 协议(protocol)。
libmicrohttpd
- 官方 GNU 项目。
- 冗长的 API,虽然比编写 nginx 模块简单得多,但对我来说似乎很尴尬。
- 在 keep-alive 模式下表现良好(链接到我下面的基准测试),没有 keep-alive 就不太好。
自由事件
Libevent 库有一个名为 evhttp 的内置 Web 服务器。
- 它是基于事件的,为此使用 libevent。
- 简单的 API。自动构建 HTTP header 。
- 正式单线程。这是主要缺点。我找到了 a hack ,这使得多个 evhttp 实例同时运行,接受来自同一套接字的连接。不确定它是否安全可靠。
- 单线程 evhttp 的性能出奇的差。多线程 hack 效果更好,但仍然不好。
广域网
G-WAN project不是开源的,但我想说几句。
- 非常好的性能,低内存使用率,150 KB 可执行文件。
- 非常方便的“servlet”部署:只需将.c 文件复制到csp 目录,运行的服务器会自动编译它。代码修改也在运行中编译。
- 简单的 API。虽然在某些方面受到限制。丰富的功能(json、键值存储等)。
- 不稳定。我在静态文件上有段错误。卡在一些示例脚本上。 (有全新安装经验。从不混合不同版本的文件)。
仅 32 位二进制(不再)。
如您所见,现有的替代方案都不能完全满足我的要求。所以我开发了自己的服务器,也就是...
新网
功能亮点:
- 表现非常好;查看项目页面上的基准
- 可以处理数以万计的并发请求
- 内存占用小
- 专为扩展而设计的多线程模型
- 极轻的代码库
- 简单的 API
- 体面的 HTTP 协议(protocol)处理
- 保持连接
- SSL 支持(通过 GNUTLS)
- HTTP 代理(带保持事件连接池)
- 非阻塞发送文件支持(具有可配置的小文件内存缓存;gzip 预编码文件服务)
- 面向开发人员的模块化设计
- 可以作为守护进程运行;出错时重新启动
- 开源
限制:
依赖于 libev 库(不再)- 仅在 Linux 上测试过
关于c - C/C++ 中的高性能应用程序网络服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405811/