1

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

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

它是一个 Web 应用程序(由 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(不需要)并且没有任何变化。

有什么想法有什么问题吗?

4

1 回答 1

0

我找到了如何解决这个问题,但没有令人满意的解释。

我正在使用wrap-json-responseRing 中间件来获取 HashMap 并将其转换为 JSON。我切换到在我的处理程序中使用 进行自己的转换json/write-str,这修复了它。

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

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

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

于 2014-05-09T15:00:07.937 回答