我正在使用uber like / cab预订应用程序。我为此使用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个用户将创建新订单。可以使用哪种更优雅的解决方案?
答案 0 :(得分:1)
通常,这类任务称为背压。 UNIX系统上的最大线程数量可能在大约10K到允许的最大500K之间。
处理背压的最常见方法是在两者之间插入一个快速队列(例如 RabbitMQ 之类的东西),并随着处理请求的负载增加而增加队列使用者的数量。 / p>
100 / s没什么,但是如果您打算处理成千上万的并发连接,我强烈建议您重新考虑选择的语言两次。 Rails并非为此任务而创建的软件。 Ruby也不是。