В Ruby у меня есть действие контроллера, которое немедленно запускает вычислительно-интенсивную задачу, которая занимает несколько секунд. Я хочу, чтобы клиент опросил мой сервер и получил обновления статуса.
в моем контроллере:
def complex_task
Thread.new do
loop do
one_part_of_the_computationally_intensive_task
# Note how much progress we've made, in case the client asks.
save_progress
end
end
# returns to client straightaway, but task continues in background.
end
def check_status
# Retrieve state in here.
get_progress
end
Обратите внимание, как check_status
необходимо получить состояние, сохраненное отдельным потоком.
Как написать функции save_progress
и get_progress
? Где хранить состояние? Кажется, что не очень хорошая идея хранить его в session
, так как это отправляется клиенту, но где еще мне его хранить?
(относится к к этому вопросу , но гораздо более общий. Я ожидаю совсем других ответов.)