我有一個數組填充了潛在的大量記錄。每個記錄應由服務器保存在RESTful RecordsController中。我在當下的解決方案是這樣的:RESTful Rails控制器ans net/http作爲客戶端 - 很多請求很慢
def self.send! options = nil
records = fetch_records
records.each do |r|
send_data!(r) ? records = records.delete_if{|rec| rec == r } : break
end
storage.save! records
true
end
private
def self.send_data! record, options = nil
begin
response = Net::HTTP.Proxy(configuration.proxy_host, configuration.proxy_port).start(configuration.host, configuration.port) do |http|
request = Net::HTTP::Post.new(request_path options)
request.body = record.to_json
http.request request
end
raise StandardError unless response.code == "200"
rescue Exception => e
return false
end
true
end
該解決方案的好處是,如果一個ConnectionError,ConnectionTimeout或SERVERERROR發生時,未發送的記錄,獲得本地存儲和以後可以再次提交。匹配的控制器是標準的Rails控制器。
我現在的問題是,在生產模式下,這似乎很慢。大約有4個請求/秒,服務器不是瓶頸。
現在的問題是,它可以幫助實例化HTTP客戶端一次,並使用相同的連接發送所有記錄。我沒有找到解決方案來實現這一點,因爲我需要在這裏代碼的save_or_store行爲。
另一個解決方案可能不是將記錄依次傳輸,而是將它們分組並創建一個新的控制器,該控制器接受我的記錄組來存儲它們。
所以這個問題歸結爲比技術更具建築性的問題。無論哪種方式,我想知道是否可以保持HTTP連接打開並以這種方式加快我的解決方案。
任何想法?
問候 菲利克斯
嘿agmcleod,thx爲您的建議。 httparty是一個咕h提示,我會看看它。上面的示例代碼簡單地錯過了send_data的參數! ...修正了這一點。 – GeorgieF
酷,更新我的答案以反映這一點。 – agmcleod