【发布时间】:2019-01-06 16:45:45
【问题描述】:
我正在开发超级喜欢/出租车预订应用程序。为此,我正在使用 Action Cable。创建新的订单服务器后,获取最近的 10 个司机的列表并依次发送每个司机的订单详细信息(暂停 40 秒)。
Thread.new do
nearest_drivers.each do |id|
order_data_for_driver = { ... }
ActionCable.server.broadcast("driver_#{id}", order_data_for_driver)
sleep 40
Thread.exit if order.reload.canceled_by_user || order.trip
end
cancel_data = {canceled_by_timeout: true }
ActionCable.server.broadcast("order_#{order.id}", cancel_data )
end
生产模式下的rails可以同时运行的线程数有限制吗?例如,如果 100 个用户将创建新订单。有什么更优雅的解决方案可以使用?
【问题讨论】:
-
你考虑过sidekiq gem吗?您只需通过简单的配置即可更改进程和线程的数量。但是,您的代码需要与 aync 兼容。 github.com/mperham/sidekiq
-
尝试使用github.com/tidwall/tile38 获取最近的一个。 @ViT-Vetal-你能分享你的 github repo 吗?我很想知道它是如何工作的。
标签: ruby-on-rails ruby ruby-on-rails-5 ruby-thread