【问题标题】:Timeout with Python Requests + Clojure HttpKit Server but not Ring serverPython 请求超时 + Clojure HttpKit 服务器但不是环服务器
【发布时间】:2014-05-09 13:35:17
【问题描述】:

我有一些环形路线,我正在以两种方式之一运行。

  1. lein ring server,带有 lein-ring 插件
  2. 使用org.httpkit.server,如(hs/run-server app {:port 3000}))

这是一个网络应用程序(由 Angular.js 浏览器客户端使用)。

我使用 Requests 库用 Python 编写了一些 API 测试:

my_r = requests.post(MY_ROUTE,
                     data=MY_DATA,
                     headers={"Content-Type": "application/json"},
                     timeout=10)

当我使用lein ring server 时,此请求在 JS 客户端和 Python 测试中运行良好。

当我使用httpkit 时,这在 JS 客户端中运行良好,但 Python 客户端超时

socket.timeout:超时

我无法弄清楚 Python 客户端超时的原因。 httpkit 会发生这种情况,lein-ring 不会发生这种情况,所以我只能假设原因与差异有关。

  • 我查看了 WireShark 中的流量,看起来它们都给出了正确的响应。两者都有相同的Content-Length 字段(15 个字节)。
  • 我已将线程数提高到 10 个(不需要)并且没有任何变化。

有什么想法吗?

【问题讨论】:

    标签: python clojure python-requests ring http-kit


    【解决方案1】:

    我找到了解决此问题的方法,但没有令人满意的解释。

    我使用wrap-json-response Ring 中间件获取 HashMap 并将其转换为 JSON。我改用json/write-str 在我的处理程序中进行自己的转换,这解决了它。

    猜测可能与处理输出缓冲的服务器有关,但这是推测。

    我已经梳理了 Wireshark 转储,但看不出两者之间有任何相关差异。发送的Content-Length 字段是相同的。 “飞行中的字节”不同,分别为 518 和 524。

    不知道为什么网络浏览器对此感到满意,但 Python 请求却不满意,以及这是否是 Requestshttpkitring-middleware-format 或我自己的代码中的错误。

    【讨论】:

    • 我遇到了基本相同的问题。 FWIW,看起来 requests 最终使用基本的 python 套接字库来读取,直到它接收到 10K 字节或 EOF。然后调用链中的某些东西似乎没有关闭连接。我仍在四处寻找选择。
    • 疯了。请务必报告,我很想知道。
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2021-09-13
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2021-06-07
    相关资源
    最近更新 更多