2013-05-10 3 views
0

Neo4j 서버 확장 프로그램 (여기에 설명 된대로 관리 대상 서버 확장자 : http://docs.neo4j.org/chunked/stable/server-plugins.html)을 작성했습니다. POST를 통해 문자열을 가져와야합니다 (생산성이 확장 프로그램에서 처리해야하는 정보를 보유 할 것이지만 여기에는 더 이상 관심이 없습니다). 그것은 Neo4j 1.8.2 및 1.9.RC2를 사용하여 확장을 시도했지만 결과는 동일했습니다.Neo4j 서버가 200 초 동안 처리 할 때 연결이 끊어지는 것 같습니다.

내 문제는 때로는이 확장이 몇 분이 걸릴 수있는 많은 작업을 수행한다는 것입니다. 그러나 정확히 200 초가 지나면 연결이 끊어집니다. 나는 무엇이 일어나고 있는지 절대적으로 확신하지는 않지만 서버가 연결을 끊는 것 같습니다.

이 동작을 확인하기 위해 나는 거의 아무것도하지 않고 Thread.sleep()을 통해 5 분을 기다리는 새로운 거의 비어 있지 않은 서버 확장을 작성했습니다. 테스트 클라이언트 클래스에서 나는 더미 데이터를 POST한다. Jersey, Apache HTTP 구성 요소 및 일반 Java URL 연결을 테스트했습니다. 저지와 일반 Java는 정확히 200 초 후에 다시 시도하지만 HTTPcomponents는 "org.apache.http.NoHttpResponseException : 대상 서버가 응답하지 못했습니다"를 발생시킵니다.

나는 서버 문제라고 생각한다. 예외는이 컨텍스트에서 (httpcomponent의 코드에서 주석이있다.) 두 번째이고 연결 시간 초과 및/또는 소켓 제한 시간을 값을 낮게 설정했기 때문이다 200 초가 넘으면 정상적인 타임 아웃 예외가 발생합니다.

이제는 그 중 하나가 있습니다. 나는 데이터를 POST 할 것이라고 말했습니다. 이 모든 행동은 전송 된 데이터의 양에 달려 있습니다. 나는 지금까지 내가 말할 수있는 그것을 꼬집었다, 길이 ca의 끈을 보낼 때. 4500 자, 설명 된 동작이 발생하지 않지만 모든 것이 정상이며 HTTP 204 "내용 없음"응답이 정확합니다. 내가 ca. 6000 자 이상이되면 언급 된 연결이 끊어집니다. 여기서 보내는 문자열은 더미 데이터입니다. 전송 된 문자열은 'a'의 시퀀스 (예 : 'aaaaaaaa ...')로 4500 또는 6000 회 반복의 for 루프로 각각 생성됩니다.

내 생산적인 코드에서 서버 작업이 끝날 때까지 기다리는 것이 좋지만 연결이 끊어지는 것을 방지하는 방법은 없습니다.

Neo4j 서버에서 구성 (내가 본 것처럼 보이지만 아무것도 찾지 못함) 옵션이 있습니까? 아니면 서버의 결함이 아니며 클라이언트가 잘못된 것을 수행합니까? 어딘가에 버그?

독서와 도움이나 도움을 주셔서 감사합니다!

+0

잘 모르겠지만 일부 저지 설정 옵션이 있거나 운영체제 설정입니다. –

+0

흠, 그런 저지 서버 쪽 옵션이 있습니까? 하나를 찾을 수 없습니다. 어쨌든 Neo4j Server는 어떤 웹 서버 기술입니까? 평범한 저지 또는 어떤 종류의 부두가 묻혀 있거나 ...? – khituras

+0

아, 죄송합니다. 나는 이전의 코멘트에서 Jetty를 의미했다. 물론 부두는 내부적으로 사용됩니다. –

답변

0

이것을 마무리 지으면서 : 결국 Jetty (버전 6.x는 Neo4j에 의해 사용 된 것으로 생각됩니다)에 기본 시간 제한 상수가 정확히 200 초 설정되었다는 것을 알게되었습니다. 이것은 Jetty API를 사용하여 변경할 수 있지만 Neo4j 서버는이를 구성 할 수있는 가능성을 제공하지 않습니다. Neo4j 2.x로 변경하면 결국 정확하게이 문제를 해결할 수 있습니다. Neo4j의 새 버전에서는이 문제가 더 이상 나타나지 않았습니다.