2012-01-31 67 views
3

我使用EventMachine + em-http-request来请求Twitter流媒体API。 它完美的工作,但现在我想得到它的错误证明。EventMachine/em-http-request检测HTTP流连接停止时的状态

什么是检测连接停滞的最佳方法? (为了尝试自动重新连接)。

我有一个临时解决方案:每次我从流方法接收到一个新的块时,我保存当前的时间戳。 PeriodicTimer正在检查此时间戳,并在上次时间戳超过30秒时发出重新连接。这个解决方案的问题在于,在没有内容的情况下,停顿的连接和工作连接没有区别。

感谢您的帮助。

+1

由于您使用的是使用TCP连接的http,所以在发生断开连接时应该通知您。我不知道em-hhtp-request如何处理它,但我确定它确实如此,只需对本地服务器执行一些测试即可。 – Schmurfy 2012-02-14 15:14:04

回答

3

您可以将一个errback回调到您的请求对象:

http.errback { puts 'error or timeout' } 

从EM-HTTP请求wiki

errback可功能在连接失败这样的情况下,才会调用作为超时或错误的DNS主机名。

就个人而言,我更喜欢使用法拉第而不是与生EM-HTTP请求库工作:

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。祝你好运!