EventMachine/em-http-request 检测 http 流连接何时停止
Posted
技术标签:
【中文标题】EventMachine/em-http-request 检测 http 流连接何时停止【英文标题】:EventMachine/em-http-request Detect when http stream connection is stalled 【发布时间】:2012-02-23 04:26:19 【问题描述】:我正在使用 EventMachine + em-http-request 来请求 Twitter 流 API。 它工作得很好,但现在我想得到它的错误证明。
检测连接停止的最佳方法是什么? (为了尝试自动重新连接)。
我有一个临时解决方案:每次我从流方法收到一个新块时,我都会保存当前时间戳。 PeriodicTimer 正在检查此时间戳,并在最后一个时间戳超过 30 秒时发出重新连接。此解决方案的问题在于,停止连接和没有内容的工作连接没有区别。
感谢您的帮助。
【问题讨论】:
由于您使用的是使用 TCP 连接的 http,因此您应该在发生断开连接时收到通知。我不确定 em-hhtp-request 是如何处理它的,但我确信它可以,只需使用本地服务器进行一些测试。 【参考方案1】:您可以将errback
回调附加到您的请求对象:
http.errback puts 'error or timeout'
来自 em-http-request wiki:
只有在连接失败的情况下才会调用 Errback 函数,例如超时或错误的 DNS 主机名。
就我个人而言,我更喜欢使用 Faraday 而不是使用原始的 em-http-request 库:
require 'faraday'
http = Faraday.new do |b|
b.adapter :em_http
end
res = http.get 'http://whatcodecraves.com'
puts res.body
这是tutorial for Faraday。如果您正在使用 twitter 流 API,请注意here's a gotcha。祝你好运!
【讨论】:
以上是关于EventMachine/em-http-request 检测 http 流连接何时停止的主要内容,如果未能解决你的问题,请参考以下文章