Java에서 CouchDB 변경 알림을 지속적으로 변경하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1640653

  •  08-07-2019
  •  | 
  •  

문제

나는 Java의 CouchDB (Continuous) 변경 사항을 사용하려고 노력하고 있으며 현재 변경 목록을 소진 한 후 스트림이 닫히는 것처럼 보이며, 예상대로 영원히 열려 있지 않은 것처럼 보입니다.

내가 사용하는 코드는 다음과 같습니다. 나는 while 루프에서 떨어지지 않을 것으로 예상하지만, 현재 기존의 변경이 완료 되 자마자해야합니다. 나는 CouchDB와 Java에 비교적 새로운 것이므로 명백한 것을 놓치고있을 수 있습니다. 누구든지 이것을 올바르게 작성하는 방법을 보여줄 수 있습니까?

URL url = new URL("[path to database here]/_changes?feed=continuous";);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true); 
conn.setUseCaches(false); 
conn.setRequestProperty("Connection", "Keep-Alive"); 
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = reader.readLine()) != null){
    // do something with the line here
}
// Should never get here under normal circumstances
reader.close();
도움이 되었습니까?

해결책

시간 초과 값이나 하트 비트가 제공되지 않는 한 실제로 60000ms (60 초)의 기본 시간 초과가 있습니다. 나는 그것을 업데이트했다 _changes 위키 페이지 10 월에 돌아와서 코드에 나온 기본값이 포함되었습니다.

하트 비트 설정 기본적으로 클라이언트에서 타임 아웃을 시청한다는 것은 심장 박동 기간 동안의 새로운 라인이 없다는 것을 의미합니다. CouchDB가 하트 비트가 있는지 시간 초과 점검을 비활성화한다고 생각합니다.

어쨌든, 당신은 아마도 해당 조건에 대한 어느 시점에서 연결이 닫히고 코드가 닫히기를 기대해야 할 것입니다.

다른 팁

당신이 사용할 수있는 &heartbeat=1000 CouchDB가 매 초마다 와이어 위로 새 라인을 보내도록합니다. 연결이 끊어 지거나 CouchDB가 종료 될 때까지 연결을 열어줍니다.

하지만 당신은 옳습니다. 연결이 닫히지 않을 것으로 예상했을 것입니다. conn.setReadTimeout(0); 아무것도 도움이되지 않습니다.

CouchDB ContinuousFeed 구현 또는 HTTPURLConnection 구현에 대해 충분히 알지 못하기 때문에 이것은 추측입니다. 그러나 Java Connection 클라이언트가 CouchDB Continuous Changes의 기본 하트 비트보다 타임 아웃이 낮은 시간 초과 설정이 있으면 Java 클라이언트가 연결을 종료 할 수 있다는 것이 두 코드의 버그를 제외하고 보입니다.

그냥 생각.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top