0

我正在考虑用 C 或 C++ 为 MongoDB 编写一个 REST 适配器。它需要一个声明性配置文件并相应地公开 REST 端点。似乎有两种简单的方法可以做到这一点,作为 C 中的nginx 模块或作为 C 或 C++ 中的 uWSGI 插件。

基本上,我想在 C/C++ 中重新实现这样的项目。

这有两个基本 版本作为 nginx 模块存在。另一方面,uWSGI 允许我用 C++ 编写它并使用强化的 MongoDB C++ 驱动程序。(MongoDB C 驱动程序被描述为“ in alpha ”。)

我很好奇哪个“更正确”/符合 nginx/uWSGI 的设计理念。nginx -> uWSGI此功能属于服务器堆栈中的哪个位置?更一般地说,我想我对为什么我们需要 uWSGI 或者它在 nginx 之上提供什么角色有点困惑。

4

1 回答 1

2

为了对 nginx 友好,模块必须是非阻塞的,并且不能使用像 fork() 这样的调用。

如果你能像这样写一个 nginx 模块,使用 nginx 的方法。问题是所有当前可用的 mongodb nginx 模块都是阻塞的(它们通常使用线程池,但可能会阻塞)。

唯一的解决方案是在不使用当前可用库的情况下重新实现 mongodb 协议(检查这个项目http://mojolicio.us/perldoc/Mango )。

另一方面,uWSGI 没有这样的限制(它可以使用进程、线程和协程),并且已经有一个 gridfs 模块:http: //uwsgi-docs.readthedocs.org/en/latest/GridFS.html

问题是没有关于编写 uwsgi 插件的文档,所以你必须以当前可用的插件为基础

顺便说一句,当你有一些不能对 nginx 友好的东西(比如 CGI,或者阻塞 web 应用程序)时,你需要 nginx 后面的 uWSGI

于 2013-07-14T05:05:44.227 回答