Ответ 1
Роберто, к сожалению, инфраструктура Thrift не имеет таких встроенных функций. В может быть несколько альтернатив, хотя, в зависимости от того, что вы хотите, чтобы ваш сеанс PHP-клиента выполнял в течение времени, которое вы обычно ожидали, когда компьютер с интенсивным вычислением Thrift будет отвечать (если бы вы не использовали oneway
.)
Теперь я могу только представить, что вы находитесь в ситуации, когда, закодировав веб-приложение, где пользователь (или несколько пользователей параллельно) может каждый запускать вычислительно-интенсивную задачу, вы хотели бы предоставить некоторую обратную связь для упомянутых пользователей, в то время как упомянутые задачи прерываются.
С самого начала вы абсолютно правы, пытаясь избежать решения, которое вы пытаетесь избежать. Ваши клиентские сессии PHP не могут обслуживать интерфейс обратного вызова без блокировки (если вы еще не углубляете свою дыру, пытаясь использовать pcntl_fork или какой-либо другой PHP-ленточный носитель.
Самый простой и самый лучший способ - это два переключателя из управляемой событиями модели (я хочу получать уведомления о завершении работы сервера) для модели опроса > (Я периодически буду спрашивать с сервером, будет ли это сделано.) Существует несколько способов реализации модели опроса с несколькими вариантами реализации на сервере, а также на стороне клиента, например:
-
во время фазы :
- сеанс клиента PHP выделяет уникальное значение
job_id
; сеанс затем делает асинхронный вызовoneway
void compute(..., job_id)
на вычислительно-интенсивный сервер Thrift,
- или -
- сеанс клиента PHP делает синхронный вызов
job_id start_compute(...)
на вычислительно-интенсивный сервер Thrift; сервер выделяет уникальное значениеjob_id
, а затем запускает актуальную вычислительно-интенсивную задачу в отдельном потоке/процессе, сразу возвращаясь к сеансу клиента PHP с выделеннымjob_id
- сеанс клиента PHP выделяет уникальное значение
-
на этапе вычислений:
- клиентский сеанс PHP периодически проверяет состояние вычислительно-интенсивного задания посредством синхронного вызова
status get_status(job_id)
на вычислительно-интенсивном сервере Thrift,
- или -
- клиентский сеанс PHP заканчивается сразу, чтобы освободить ценные ресурсы, передав браузеру
job_id
в браузер, а также поручив браузеру периодически проверять состояние трудоемкого заданияjob_id
(например, черезMETA REFRESH
или с помощью запроса XHR (AJAX) от Javascript и т.д.); проверка браузера порождает короткий сеанс PHP-клиента, который выполняет синхронный вызовstatus get_status(job_id)
на вычислительно-интенсивном сервере Thrift, завершая сразу же после пересылки статуса (в зависимости от того, что может быть) в браузере
- клиентский сеанс PHP периодически проверяет состояние вычислительно-интенсивного задания посредством синхронного вызова