2012-01-31 66 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。祝你好運!