2009-10-28 62 views
6

我正嘗試使用來自Java的couchdb(連續)更改API,並發現在耗盡當前更改列表後,流似乎已關閉,而不是保持打開狀態,因爲它應該是這樣。如何使用CouchDB變更通知從Java持續更改?

我使用的代碼如下。我希望永遠不會從while循環中退出,但只要當前存在的更改完成流式處理即可。我對couchdb和Java都比較陌生,所以可能會漏掉一些明顯的東西。任何人都可以告訴我如何正確寫入?

​​

回答

7

除非提供不同的超時值或心跳,否則實際上會有60000ms(60秒)的默認超時。我在10月份更新了_changes wiki page,幷包含了我在代碼中遇到的任何默認值。

設置心跳基本上意味着您將在客戶端觀察超時,即心跳週期沒有換行意味着您肯定已經失去了連接。我相信如果有心跳,CouchDB會禁用超時檢查。

在任何情況下,您都應該期望連接在某個時間點被關閉,並且代碼爲該條件。

0

這只是一個猜測,因爲我對couchdb的連續執行或HttpUrlConnection實現不夠了解。但似乎禁止兩者的代碼中的任何錯誤,如果您的java連接客戶端的超時設置低於couchdb連續更改的默認心跳,那麼連接可能會被java客戶端終止。

只是一個想法。

3

您可以使用&heartbeat=1000讓couchdb每秒通過電線發送新的線路。這將保持您的連接打開,直到斷開連接和/或CouchDB關閉。

但是你是對的,我也會期望連接不會關閉 - 好像conn.setReadTimeout(0);也沒有任何幫助。

+0

我在這裏打開了一個缺陷:https://issues.apache.org/jira/browse/COUCHDB-580 – Joscha 2009-11-26 11:48:22