使用Python请求超时+ Clojure HttpKit服务器但不是Ring服务器

时间:2014-05-09 13:35:18

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

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

  1. lein ring server,使用lein-ring插件
  2. 使用org.httpkit.server,例如(hs/run-server app {:port 3000}))
  3. 这是一个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(不应该)并且没有更改。

    任何想法有什么不对?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

相关问题