【问题标题】:How do I cleanly bridge client connections between a frontend webserver and a backend running CherryPy?如何干净地桥接前端 Web 服务器和运行 CherryPy 的后端之间的客户端连接?
【发布时间】:2010-10-06 17:58:43
【问题描述】:

标题可能有点含糊,但这是我的目标:我有一个前端网络服务器,它接收传入的 HTTP 请求,对它们进行一些预处理,然后将请求传递给我的 real 网络服务器获取 HTTP 响应,然后将其传递回客户端。

目前,我的前端是基于 BaseHTTPServer.HTTPServer 构建的,后端是 CherryPy。

所以问题是:有没有办法获取这些 HTTP 请求/客户端连接并将它们插入 CherryPy 服务器以获取 HTTP 响应?一个明显的解决方案是在本地端口或使用 UNIX 域套接字上运行 CherryPy 后端实例,然后前端 Web 服务器与后端建立连接并中继任何请求/响应。显然,由于开销,这并不理想。

我真正想要的是 CherryPy 后端绑定到任何端口,而只是坐在那里等待前端传递客户端的套接字(以及修改后的 HTTP 请求信息),此时它会执行正常的 CherryPy 魔法并将请求直接返回给客户端。

我一直在仔细阅读 CherryPy 的源代码以找到实现此目的的方法,目前正在尝试修改 wsgiserver.CherryPyWSGIServer,但它变得非常麻烦,可能不是最好的方法。

【问题讨论】:

  • 你在做什么预处理?解决方案可能就像用几行代码扩展 CherryPy 一样简单。
  • 我正在尝试处理 HTTP/1.1 升级请求(请参阅 stackoverflow.com/questions/3859823/…)。我希望 CherryPy 发送一个 HTTP 响应,然后将套接字交给我的协议处理程序。

标签: python cherrypy


【解决方案1】:

您的主应用程序是 wsgi 应用程序吗?如果是这样,您可以编写一些 middleware 将其包裹起来,并在传递给主应用程序之前完成所有请求争吵。

如果这是可能的,它将避免您必须运行两个网络服务器以及您遇到的所有问题。

【讨论】:

  • 谢谢。这应该够了吧。最初我想将前端和后端解耦,以便在必要时替换 CherryPy,但看起来麻烦多于其价值。另外,我想使用 WSGI 中间件,只要替代“后端”符合 WSGI,用另一个网络服务器替换 CherryPy 应该很容易。
  • 是的,我已经将应用程序从 mod_wsgi 和 apache 移动到 uwsgi 和 nginx 而不接触应用程序。
【解决方案2】:

Handling HTTP/1.1 Upgrade requests in CherryPy 回答了升级问题。不确定这是否解决了这个问题。

【讨论】:

  • 这个问题比较笼统,最好使用 WSGI 中间件解决。对于真正低级的套接字处理(如链接的问题),(链接的)答案绝对是最好的(唯一的?)方法。谢谢。
猜你喜欢
  • 2016-02-16
  • 1970-01-01
  • 2010-12-25
  • 2017-05-25
  • 2012-04-24
  • 2022-01-24
  • 2020-06-20
  • 2016-07-06
  • 2018-10-19
相关资源
最近更新 更多