2014-05-09 30 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

相關問題