Когда запускается фоновое задание, оно отправляется в конец очереди, где его обрабатывает работник; задача очищается, а другая запускается. Я думаю, что я понял это правильно, за исключением того, что я не понимаю практическую сторону этого в некоторых случаях. Несомненно, если вы компания, рассылающая 15 000 информационных бюллетеней раз в неделю с использованием отложенной работы, это имеет смысл. Но если у вас есть приложение из даже 100 пользователей, в котором какое-то задание достаточно длинное, чтобы требовать фоновой работы (например, отправка / получение писем, которое может занять минуту), тогда каждому пользователю придется ждать в очереди, пока другой пользователь очищается (в если есть один рабочий).
Это та часть, в которой я не уверен, что понял правильно. Я говорю о том же задании , но индивидуально для каждого пользователя. Это считается работой на пользователя? Если у меня 100 пользователей, нужно ли сохранять 100 рабочих для каждого процесса, чтобы не связываться?
Я пытался использовать delayed_job , чтобы смоделировать это, и действительно, когда я вхожу с другой учетной записью, мне приходится ждать, пока письмо другого пользователя не будет отправлено, пока не появится мое. В то время как плагин работает быстро и просто, я думаю, что это неправильный подход.
Я также пытался использовать Ajax, но, поскольку это HTTP-запрос, он связывает браузер в режиме загрузки, пока не получит ответ от сервера (даже с async: true
). Не уверен, что я исключил это слишком быстро, но я искал более элегантное серверное решение.
Есть ли способ добиться такой фоновой работы? (Я слышал о различных, в основном коммерческих решениях, обещающих мало времени ожидания, но я заинтересован в полном устранении очереди между пользователями). Если нет, есть ли способ сделать ajax-запрос, не ожидая ответа? Я понимаю, что мои вопросы кардинально отличаются, но оба кажутся подходящим решением этой проблемы.