Пушер в фоновом задании опережает мое приложение - отсутствуют уведомления JS

Я перемещаю импорт файлов Excel (часто больших, часто маленьких) в фон с помощью Sidekiq и предупреждаю пользователя, когда импорт завершен, с помощью Pusher.

Сначала в «синхронном» потоке (здесь приложение Rails) он запускает импорт в Excel, а затем перенаправляет на страницу панели мониторинга, которая будет получать уведомления от Pusher, когда импорт будет завершен.

Проблема в том, что поток Sidekiq-Pusher иногда идет быстрее, чем перенаправление на страницу панели инструментов. Мой подписчик JavaScript не будет инициализирован вовремя для получения сообщения, которое публикуется из фонового процесса. Таким образом, клиент ничего не получает.

Предлагает ли Pusher способ отложить публикацию сообщения до тех пор, пока не появится подписчик? Или Pusher предлагает способ «накапливать» сообщения до тех пор, пока подписчик не оживет, чтобы их использовать? Или, может быть, здесь есть более простое решение, о котором я не думал?

Fyi, я не хочу, чтобы фоновое задание спало на несколько секунд, чтобы убедиться, что клиент готов, и я не хочу использовать Pusher для запуска обновления (т.е. сохранить что-то в БД, а затем обновить, чтобы отобразить его ).

При желании я с радостью предоставлю образцы кода.

РЕДАКТИРОВАТЬ:

Я, конечно, готов использовать что-то еще, помимо Pusher, если что-то еще может решить мою проблему.


person rfish26535    schedule 23.04.2014    source источник
comment
Эй, не входя в учетную запись Pusher, как вы могли бы получить сообщение на стороне клиента. Я имею в виду, что если я не вошел в учетную запись pusher, используя свой адрес электронной почты и пароль, я не получаю сообщение, поскольку соединение неактивно. Как мы можем сделать это?   -  person Rajesh Omanakuttan    schedule 09.05.2014
comment
Вы можете использовать веб-перехватчики, чтобы проверить, освобожден ли канал. Если это просто подождите, пока кто-нибудь будет подписан :)   -  person vasilakisfil    schedule 04.06.2014


Ответы (1)


Вызвать воркера через 1-2 секунды от текущего времени, чтобы он был вызван и показывал сообщение после перенаправления на целевую страницу.

TestProcess.perform_at(2.seconds.from_now,parameters)

Это будет работать как положено. Надеюсь, это поможет :)

person Rajesh Omanakuttan    schedule 23.04.2014
comment
В идеале я не хочу полагаться на задержки на стороне сервера (будь то внутри фонового задания или для самого задания), потому что я хочу учитывать возможность того, что у пользователей могут возникать сбои в браузере / подключении, когда это может занять некоторое время для Rails. перенаправить, чтобы пройти. Спасибо, что подняли этот вопрос. - person rfish26535; 23.04.2014