gpt4 book ai didi

apache - 能够代理请求的 HTTP 服务器

转载 作者:可可西里 更新时间:2023-11-01 16:43:43 26 4
gpt4 key购买 nike

出于性能原因,我不得不重写我们网络基础设施的一部分。

为此,我用 C++ 将关键部分编写为 Web 应用程序。此 Web 应用在给定端口上监听,一次只接受一个 TCP 连接,并处理它在当前连接上收到的所有 HTTP 请求。

你可以这样启动它来监听8080端口:

./webapp 8080

虽然它可以完美无缺地工作并且比以前快得多,但它的局限性在于应用程序的一次一个连接的性质。您不能仅通过一个应用程序实例通过多个连接同时提供 HTML 页面、Javascript 和图像。

为了克服这个限制,我想运行一个前端反向代理 HTTP 服务器,它监听端口 80,并在后台运行的我的 Web 应用程序的多个实例上均匀地重定向传入的 HTTP 请求。这些实例可以像这样在启动时创建:

./webapp 10000
./webapp 10001
./webapp 10002
./webapp 10003
./webapp 10004
./webapp 10005
./webapp 10006
./webapp 10007
./webapp 10008
./webapp 10009

前端应配置为在开始时与每个网络应用程序建立永久 HTTP 连接,然后将传入的 HTTP 请求转发到正在运行的网络应用程序之一,均匀分布。

反向代理还应该支持从客户端到自身的 SSL。支持 SPDY 将是一个优势,但不是必须的。

我的问题是:哪些 HTTP 反向代理能够在我的场景中充当前端?如果您知道不止一种,那么每种的优缺点是什么?

最佳答案

您拥有单一连接服务器的动机是什么?对于网络服务器来说,这听起来像是一个糟糕的选择。当您的网站出现时,每个客户端浏览器通常会并行发送数十个请求。

如果您通过 TCP 连接生成一个进程,您最终将获得糟糕的性能。实际上,您在这里寻找的是多线程服务器而不是多进程基础设施(拥有不同进程有什么意义?)

不过,您可以走几条路:

  • 如果您真的想拥有单独的进程,则每次收到请求时都会 fork 您的 webapp。这在性能方面不会很好,但它是我能想到的最接近你最初提出的问题。

  • 您继续使用单线程 webapp,但您维护一个您监听的套接字列表,并将它们与它们的“好友套接字”配对,它们将流量转发到这些套接字(注意它是双向的)。尽管如此,这并不是最佳性能明智的选择,因为您可能会受到内核调用的限制。

  • 您为每个请求生成一个新线程,然后仅在该线程中处理该请求,就像您处理单线程架构一样。

如果我是你,我会直接转向解决方案 3,因为它是最佳选择。这并没有太大的麻烦,因为它与您的单线程方法(只是一对套接字)保持接近,并且它没有到处 fork 进程的性能影响。

我认为您不会找到满足您需求的网络服务器,因为它不是处理此类情况的标准方法,而且我怀疑是否有人花时间开发它:)

编辑:

好的,我从您的编辑中了解到您的问题。

不过,对我来说,要解决的问题仍然是相同的:您需要一个将流量分派(dispatch)给您的进程的进程。我不认为您会发现这样一个开箱即用的调度程序,因此您需要使用我提到的三种技术之一来实现它。

如果您考虑一下,您实际上是在尝试实现代理的一侧,而另一侧是转发到您的 webapp。所以你应该使用代理技术恕我直言。

关于apache - 能够代理请求的 HTTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15725624/

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