【问题标题】:Using AJP to perform requests from Python to Java webserver使用 AJP 执行从 Python 到 Java 网络服务器的请求
【发布时间】:2011-08-28 23:47:09
【问题描述】:

我必须实现一个 Python Web 应用程序,该应用程序对通过 Web 服务(带有 GET 请求和 JSON 响应的 API)可用的数据进行操作。

API 服务器是用 Java 实现的。如果通过 urllib2 进行 API 调用(每个请求打开和关闭连接),初步测试显示开销很大。

如果我在 API 服务器中启用 AJP,我应该使用哪个库来使用 Python 中的 AJP 协议执行请求?我用谷歌搜索了 Plup,但我找不到在 Python 中请求和使用数据的明确方法,而不仅仅是在其他地方代理它。

使用 AJP 是一个好的解决方案吗?显然我必须维护一个连接池来执行 AJP 请求,但是我在 Plup 中找不到任何相关的东西。

谢谢。

【问题讨论】:

    标签: java python ajp


    【解决方案1】:

    我不知道 AJP 是什么。此外,您没有打开“重大开销”的内容,所以我可能是一个可怜的人来回答这个问题。

    但如果我是你,我会先尝试一些技巧:

    在 urllib2 上启用 HTTP 1.1 keep-alive

    (这里是使用另一个库 Python urllib2 with keep alive 的示例)

    HTTP 1.1 keep-alive 连接不会关闭后续请求的 TCP/IP 管道。

    使用 Spawning / eventlets web 服务器为 urllib / Python 套接字执行非阻塞 IO 补丁

    http://pypi.python.org/pypi/Spawning/

    当应用程序的开销是输入/输出时,这将使 Python 中的并行化更加健壮,而不是使用 CPU 来处理请求。 JSON 解码很少受 CPU 限制。

    通过这两个技巧,我们能够在来自 Microsoft IIS 支持的 API 服务器(场)的 Python Web 应用程序中每秒消耗 1000 个请求。

    【讨论】:

    • 感谢您的回答。我会先尝试启用keep-alive。我找到了完全符合我需要的库。 code.google.com/p/urllib3
    • AJP 是大多数 Java Web 服务器实现的协议,用于启用来自 apache 或 lighthttpd 等前端服务器的请求代理。
    • 在开销下,我的意思是从位于网络附近的 HTTP 服务器访问资源所需的时间与从网络中的同一位置获取相同资源所需的时间之间的差异,通过测量访问时间和持久连接(例如 Mongo 的 db)。在我的设置中,在单线程模式下建立和关闭每个连接最多浪费了 50 毫秒。
    • 我相信 TCP/IP 延迟是 HTTP 保持活动应该解决的问题。 HTTP 连接比任何包含“Java”字样的协议都更通用,所以除非你真的需要它,否则请远离它:)
    • 如果你真的需要快速的二进制协议,它会是谷歌协议缓冲区,但我们希望你还不需要去那里,因为它会显着增加实现的复杂性
    猜你喜欢
    • 2018-04-16
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2011-12-24
    • 2016-11-01
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多