我正在考虑用C或C ++为MongoDB编写REST适配器。它将采用声明性配置文件并相应地公开REST端点。似乎有两种简单的方法可以做到这一点,如C中的nginx module或C或C ++中的uWSGI插件。
基本上,我想在C / C ++中重新实现像this这样的项目。
这两个basic versions作为nginx模块存在。另一方面,uWSGI允许我用C ++编写它并使用强化的MongoDB C ++驱动程序。 (MongoDB C驱动程序被描述为“in alpha”。)
我很好奇哪个“更正确”/与nginx / uWSGI的设计理念保持一致。这个功能属于nginx -> uWSGI
服务器堆栈的位置?更一般地说,我觉得我有点困惑为什么我们需要uWSGI或者它只提供nginx的角色。
答案 0 :(得分: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或阻止网络应用程序)时,你需要在nginx后面使用uWSGI