Bất kỳ ai có ý tưởng nào về cách tôi có thể thực hiện việc này? Có một thời gian khá khó tìm kiếm thông tin trực tuyến. Tốt nhất tôi tìm thấy là curbit nó đá quý nhưng tôi chỉ có thể nghĩ về cách thực hiện ứng dụng khôn ngoan.tỷ lệ giới hạn cuộc gọi hàm trong đường ray cho mỗi người dùng
Trả lời
Nó có thể được xử lý bởi: 1) máy chủ web 2) rack-application. Tất cả phụ thuộc vào những gì bạn cần. Chúng tôi use built-in chức năng nginx để hạn chế yêu cầu API:
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
limit_req zone=one burst=2;
Các giải pháp khác là rack-throttle.
Đây là phần mềm trung gian giá cung cấp logic cho việc giới hạn tốc độ các yêu cầu HTTP đến các ứng dụng Rack. Bạn có thể sử dụng Rack :: Throttle với bất kỳ khung công tác web Ruby nào dựa trên Rack, bao gồm cả Ruby on Rails 3.0 và với Sinatra.
Dưới đây là ví dụ về cách nó có thể được triển khai bằng Redis và dấu thời gian. Bạn sẽ bao gồm mô-đun này trong user.rb và sau đó bạn có thể gọi user.allowed_to?(:reveal_email)
# Lets you limit the number of actions a user can take per time period
# Keeps an integer timestamp with some buffer in the past and each action increments the timestamp
# If the counter exceeds Time.now the action is disallowed and the user must wait for some time to pass.
module UserRateLimiting
class RateLimit < Struct.new(:max, :per)
def minimum
Time.now.to_i - (step_size * max)
end
def step_size
seconds = case per
when :month then 18144000 # 60 * 60 * 24 * 7 * 30
when :week then 604800 # 60 * 60 * 24 * 7
when :day then 86400 # 60 * 60 * 24
when :hour then 3600 # 60 * 60
when :minute then 60
else raise 'invalid per param (day, hour, etc)'
end
seconds/max
end
end
LIMITS = {
:reveal_email => RateLimit.new(200, :day)
# add new rate limits here...
}
def allowed_to? action
inc_counter(action) < Time.now.to_i
end
private
def inc_counter action
rl = LIMITS[action]
raise "couldn't find that action" if rl.nil?
val = REDIS_COUNTERS.incrby redis_key(action), rl.step_size
if val < rl.minimum
val = REDIS_COUNTERS.set redis_key(action), rl.minimum
end
val.to_i
end
def redis_key action
"rate_limit_#{action}_for_user_#{self.id}"
end
end
Chỉ cần thông báo: tính toán của bạn cho 'tháng' không chính xác; bạn không cần hệ số "* 7". Hơn nữa, bạn chỉ có thể sử dụng '1.month.to_i' để lấy số giây trong vòng một tháng (và tương tự cho các đơn vị khác). –
Cảm ơn bạn! Nhiều đánh giá cao. –
- 1. Tỷ lệ giới hạn cho bộ điều khiển đường ray
- 2. Ngoại lệ: Lỗi hạn ngạch: Giới hạn tỷ lệ người dùng đã vượt quá
- 3. Django: Giới hạn UpdateView cho mỗi người dùng
- 4. Giới hạn tỷ lệ trên Facebook API
- 5. Google URL Shortener 403 Giới hạn tỷ lệ vượt quá
- 6. Giới hạn API biểu đồ Facebook - mỗi mã thông báo và mỗi IP?
- 7. Mysql - GIỚI HẠN theo Tỷ lệ phần trăm?
- 8. Cấu trúc mô hình đường ray cho người dùng
- 9. Giới hạn số người dùng trong ứng dụng C#
- 10. đặt giới hạn đệ quy python cho hàm
- 11. Giới hạn ký tự trên Instagram Tên người dùng
- 12. Đường ray: theo dõi ID của người dùng
- 13. BitBucket.org - chỉ giới hạn số lượng người dùng?
- 14. Làm thế nào để tăng giới hạn kích cỡ json cho cuộc gọi ASP.NET WebAPI Post?
- 15. Đường ray đến tên người dùng thay vì id
- 16. Rails 3.1 giới hạn đối tượng được tạo bởi người dùng
- 17. Thêm tên người dùng để tạo đường ray 4
- 18. Gọi hàm khi người dùng nhấn enter trong NSSearchField?
- 19. Giới hạn người dùng cho ứng dụng PHP của tôi - với mã ví dụ
- 20. Phạm vi đường ray tìm với người dùng hiện tại
- 21. Tuyến đường ray phụ thuộc vào người dùng hiện tại
- 22. Giới hạn số tham số cho mỗi phương thức?
- 23. Tỷ lệ màn hình chia tỷ lệ canvas của Android
- 24. Dịch bitmap/tỷ lệ trong phạm vi ranh giới?
- 25. Trường hợp nên quản lý cuộc gọi lại được đặt trong ứng dụng đường ray?
- 26. Làm thế nào để tự động gọi hàm trong php cho mỗi chức năng cuộc gọi khác
- 27. Thay đổi kích thước hình ảnh theo tỷ lệ với giới hạn MaxHeight và MaxWidth
- 28. mỗi người dùng resolv.conf
- 29. SQL tổng giá trị cột, độc đáo cho mỗi người dùng mỗi ngày
- 30. Cần tây: mỗi giới hạn nhiệm vụ đồng thời (# công nhân cho mỗi nhiệm vụ)?
Là phần yêu cầu của địa chỉ ip? Đã tự hỏi nếu điều này là cho mỗi người dùng. –