在我的(python)代码中,我有一个线程监听来自 couchdb feed 的更改( continuous changes )。更改请求有 timeout parameter在某些情况下(例如,当用户想要使用 ^C
手动中断程序时),该值太大。
- 如何中止长时间运行的阻塞 http 请求?
- 这可能吗?或者我是否需要减少超时以使我的程序响应更快?
这将是不幸的,因为超时足够小以使程序真正响应(例如,1 秒),意味着创建大量连接(每秒一个!),这违背了监听更改的目的,并且很难确保我们没有错过任何更改(在重新连接的时间跨度中,我们确实可能会错过更改,因此需要特殊的代码来处理这种情况)
另一个选项是强制中止线程,但是 that is not really an option in python .
最佳答案
如果我理解正确的话,看起来您在决定是否响应用户之前在请求之间等待了太长时间。你是对的,不断地关闭和创建新的连接将违背更改源的目的。
解决方案可能是使用 heartbeat查询参数,其中 couchdb 将不断发送换行符以告诉客户端连接仍然有效。
http://localhost:5984/hello/_changes?feed=continuous&heartbeat=1000&include_docs=true
只要您收到心跳(换行符),您就可以确定您正在收到新的更改。新行将表明没有发生任何更改。实际更改将被报告回来。无需关闭连接。回复您的客户if resp!="/n"
关于python - 中止长时间运行的 http 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24547851/