2

我正在开发超级喜欢/出租车预订应用程序。为此,我正在使用 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 个用户将创建新订单。可以使用什么更优雅的解决方案?

4

1 回答 1

1

通常这种任务被称为有背压。UNIX 系统上的最大线程数可能从大约 10K 到允许的最大 500K 不等。

处理背压的最常见方法是在两者之间插入一个快速队列(如RabbitMQ或其他东西),并随着请求负载的增加增加队列消费者的数量。

100/s 不算什么,但如果您计划处理数千个并发连接,我强烈建议您重新考虑两次选择的语言。Rails 不是为此类任务创建的软件。鲁比也不是。

于 2019-01-06T16:56:24.607 回答