2014-05-09 33 views
1

我有一些环路我运行两种方式之一。超时与Python请求+ Clojure HttpKit服务器但不是环服务器

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

这是一个Web应用程序(由一个Angular.js浏览器客户端消耗)。

我必须使用请求库用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(不应该需要),并没有改变。

任何想法有什么不对?

回答

0

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

我正在使用wrap-json-response环中间件采取HashMap并将其转换为JSON。我改用json/write-str与我的经理人进行自己的转换,这解决了这个问题。

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

我已经梳理了Wireshark转储,我看不到两者之间有任何相关的区别。发送的Content-Length字段是相同的。 “关于在飞行字节”不同,在518和524

没有线索,为什么Web浏览器是满意的,但Python的请求没有,以及是否这是Requestshttpkitring-middleware-format或错误我自己的代码。

+0

我基本上有同样的问题。 FWIW,看起来好像请求最终使用基本的python套接字库来读取,直到它接收到10K字节或EOF。然后,调用链中的某些东西似乎并没有关闭连接。我仍在四处寻找选择。 – James

+0

疯了。请回报,我很想知道。 – Joe

相关问题