Tôi đang phát triển một ứng dụng nhỏ đăng XML vào một số dịch vụ web. Điều này được thực hiện bằng cách sử dụng Net :: HTTP :: Post :: Post. Tuy nhiên, nhà cung cấp dịch vụ khuyên bạn nên sử dụng lại kết nối.Thực hiện chiến lược kết nối lại bằng Ruby Net
Cái gì như: yêu cầu 1 thất bại -> thử lại sau 2 giây yêu cầu thứ 2 thất bại -> thử lại sau 5 giây yêu cầu thứ 3 thất bại -> thử lại sau 10 giây ...
gì sẽ là một cách tiếp cận tốt để làm điều đó? Chỉ cần chạy đoạn mã sau đây trong một vòng lặp, bắt ngoại lệ và chạy lại sau một khoảng thời gian? Hay có cách nào khác để làm điều đó? Có lẽ gói Net thậm chí còn có một số chức năng được tích hợp sẵn mà tôi không biết?
url = URI.parse("http://some.host")
request = Net::HTTP::Post.new(url.path)
request.body = xml
request.content_type = "text/xml"
#run this line in a loop??
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
Cảm ơn rất nhiều, luôn đánh giá cao sự hỗ trợ của bạn.
Matt
Tuyệt vời. Cảm ơn! – Matt
Avdi, whats một cách tốt để kiểm tra này? (sử dụng rspec hoặc bất kỳ) – Mike
Cảm ơn. Btw có vẻ như 'SomeException' phải, không may là 'StandardError', cf: http://stackoverflow.com/questions/5370697/what-s-the-best-way-to-handle-exceptions-from-nethttp. Không tuyệt vời, nhưng ít nhất nó được dàn vào một đường kẻ, và không nuốt phải nếu đó là một lỗi không thực sự thoáng qua. – chesterbr