擅长:python、mysql、java
<p>我使用长轮询而不是连续轮询,这对我来说很好。在长轮询模式下,<code>db.changes</code>块,直到至少发生一个更改,然后返回生成器对象中的所有更改。在</p>
<p>下面是我用来处理更改的代码。<code>settings.db</code>是我的CouchDB数据库对象。在</p>
<pre><code>since = 1
while True:
changes = settings.db.changes(since=since)
since = changes["last_seq"]
for changeset in changes["results"]:
try:
doc = settings.db[changeset["id"]]
except couchdb.http.ResourceNotFound:
continue
else:
// process doc
</code></pre>
<p>如您所见,这是一个无限循环,在每次迭代中我们调用<code>changes</code>。对<code>changes</code>的调用返回一个包含两个元素的字典,即最近更新的序列号和修改的对象。然后循环每个结果,加载适当的对象并处理它。在</p>
<p>对于连续进纸,使用<code>while True:</code>行,而不是<code>while True:</code>行。在</p>