2014-05-09 4 views
1

두 가지 방법 중 하나를 실행중인 링 경로가 있습니다. org.httpkit.server를 사용하여 lein-ring 플러그인 Python 요청 시간 초과 + Clojure HttpKit 서버 (링 서버가 아님)

    1. lein ring server

      ,

    그것은 웹 응용 프로그램의 (hs/run-server app {:port 3000}))처럼 (AN Angular.js 브라우저 클라이언트에 의해 소비되고).

    은 내가 요청 라이브러리를 사용하여 파이썬으로 작성된 일부 API 테스트가 있습니다

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

    내가 lein ring server를 사용하는 경우,이 요청은 JS 클라이언트와 파이썬 테스트에서 잘 작동합니다.

    내가 httpkit 사용

    이는 JS 클라이언트에서 잘 작동하지만

    socket.timeout과 함께 밖으로 Python 클라이언트 시간 :

    내가 왜 파이썬을 알아낼 수 없습니다

    시간 초과 클라이언트가 시간 초과되었습니다. httpkit에서 발생하지만 lein-ring과 함께 발생하지는 않습니다. 따라서 그 원인이 그 차이와 관련 있다고 가정 할 수 있습니다.

    • WireShark의 트래픽을 살펴본 결과 두 가지 모두 올바른 응답을 나타내는 것처럼 보입니다. 둘 다 동일한 Content-Length 필드 (15 바이트)를가집니다.
    • 스레드 수가 10 개 (필요하지 않아야 함)로 변경되었으며 변경되지 않았습니다.

    어떤 아이디어가 잘못 되었나요?

  • 답변

    0

    이 문제를 해결하는 방법을 찾았지만 만족스런 설명이 아닙니다.

    나는 HashMap을 가져 와서 JSON으로 변환하기 위해 wrap-json-response 링 미들웨어를 사용하고있었습니다. 내 처리기에서 json/write-str으로 내 자신의 변환 작업을 수행하기로 바꿨습니다.

    출력 버퍼링을 처리하는 서버와 관련이 있을지는 모르겠지만 추측입니다.

    나는 Wireshark 덤프를 샅샅이 뒤졌지만이 두 가지 사이에 어떤 관련성이있는 차이점을 볼 수 없습니다. 전송 된 Content-Length 필드는 동일합니다. '비행 바이트'(518) 및 (524)

    웹 브라우저 파이썬 요청 만이 아니었다 만족 이유에 대해 어떠한 단서에서, 차이, 그리고 여부를이 Requests, httpkit, ring-middleware-format 또는 버그 내 자신의 코드.

    +0

    기본적으로 동일한 문제가 있습니다. FWIW, 요청이 궁극적으로 10K 바이트 또는 EOF를받을 때까지 기본 파이썬 소켓 라이브러리를 사용하여 읽는 것 같습니다. 그리고 콜 체인의 어떤 것이 연결을 닫지 않는 것처럼 보입니다. 나는 아직도 옵션을 찾고있다. – James

    +0

    크레이지. 다시 신고 해주세요. 알고 싶군요. – Joe