gpt4 book ai didi

c++ - 使用 Nginx 在 C++ 中编写 REST 服务

转载 作者:行者123 更新时间:2023-12-01 14:53:58 37 4
gpt4 key购买 nike

Nginx 模块文档让我有点不知所措。我有很多 C++ 代码,并且已经使用 Boost Beast 运行了一个 REST 服务,我想使用 C++ 模块接口(interface)比较 Beast 和 NGINX 之间的性能,我将根据我的需要编写相应的基准。

我在这里看过这个教程:https://www.evanmiller.org/nginx-modules-guide.html

但到目前为止,我还没有看到一个简洁、简短的示例来入门。

是否有隐藏文档?或者,您是否有示例说明如何在 C(++) 中将 Nginx 用作 REST 服务?

最佳答案

简答:不要将任何应用程序代码嵌入到 nginx 中。

长答案:你可以制作新的 nginx 模块来帮助 nginx 更好地完成它的工作,例如:

  • 添加一些新的身份验证方法
  • 或一些新的后端传输方式,例如共享内存。

Nginx 旨在提供静态内容、代理请求并进行一些过滤(如修改 header )。nginx 的主要目标 - 尽可能快地完成这些事情并尽可能少地花费资源。它允许您的应用程序服务器动态扩展而不影响当前连接的用户。

Nginx 是一个很好的网络服务器,但从未被设计成应用服务器。

仅仅因为它是用C语言构建的,就把应用逻辑嵌入到nginx中没有多大意义。

如果您需要两全其美(代理、静态文件和 rest 服务器),那么只需同时使用它们(nginx 和 Beast),每个都有自己的责任。Nginx 将负责平衡、加密和任何其他非应用特定功能,应用服务器将完成其工作。

Nginx 的架构基于非阻塞网络/文件调用,所有连接都在单个线程中提供服务,Nginx 做得很好,因为它只是来回打乱数据。

如果您的应用程序代码可以快速生成内容并且不会阻塞对外部服务的调用,那么您可以将您的应用程序嵌入到 nginx 中,但后果是失去可扩展性。如果您的应用程序的某些部分需要 CPU 绑定(bind)工作或阻塞调用,那么您需要将这些东西从主网络循环中移出,这会使事情“有点复杂”。

通过将您的逻辑嵌入到 nginx 中,您可能会在通信上节省一些微秒和文件句柄。对于像聊天或股票提要这样的多用户 websocket 应用程序(即具有长期开放连接的应用程序),它可以释放额外的资源,但对于具有快速响应的 REST 应用程序,它不会获得任何 yield 。

您的 REST 应用很可能使用 SSL 加密。与通过此类实现获得的 yield 相比,这种加密会为您的响应时间增加更多的微秒(毫秒)。

我的建议:让 nginx 做它的事情,不要干扰它

关于c++ - 使用 Nginx 在 C++ 中编写 REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59339149/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com