Roberto, ne yazık ki Thrift çerçevesi böyle yerleşik bir işleve sahiptir. Orada may be a number of alternatives, olsa da, [) (1] PHP istemci oturumu normalde (Eğer {kullanılmış olmasaydı cevap hesaplama-yoğun Thrift sunucu için bekledi olurdu süre içinde ne yapmak istediğinize bağlı olarak }.)
Ben sadece, bir kullanıcı (ya da paralel birkaç kullanıcı) Her bir hesaplama-yoğun görev tetikleyebilir bir web uygulamasını kodlu olması, size bazı geribildirim vermek istiyorum bir durumda olduğunu, şimdi, hayal kullanıcıların dedi iken görevleri boyunca yayık dedi.
Başlangıçtan itibaren, size önlemek için çalışıyoruz çözüm önlemek için çalışırken kesinlikle haklısın. Sizin PHP istemci oturumları cannot service a callback interface without blocking (sen pcntl_fork veya diğer bazı PHP threading band-aid kullanmaya çalışıyor hatta daha derin bir delik kazmak sürece.)
Bunun dışında basit ve IMHO en iyi yolu, uygulama birkaç yolu vardır, iki switch from an event-driven model (I want to be notified when the server is done) to a polling model (I will periodically inquire with the server whether or not it is done.) Olduğunu sunucu hem de örneğin, istemci tarafı, birden fazla uygulama seçenekleri olan bir yoklama modeli:
esnasında invocation phase,
- PHP istemci oturumu eşsiz
job_id
değeri ayırır; oturumu sonra uyumsuz hesaplama-yoğun Thrift sunucuya oneway
çağrı void compute(..., job_id)
, yapar
-- or -- strong>
- PHP istemci oturumu hesaplama-yoğun Thrift sunucuya bir synchronous çağrısı
job_id start_compute(...)
yapar; Sunucu benzersiz job_id
değeri, daha sonra hemen tahsis job_id
ile PHP istemci oturumu dönen, ayrı bir iş parçacığı / işlemde gerçek hesaplama-yoğun görev çoğaltılır ayırır
esnasında computation phase,
- periyodik bir synchronous
status get_status(job_id)
hesaplama-yoğun Thrift sunucuya çağrı üzerinden hesaplama-yoğun iş durumunu kontrol etmek PHP istemci oturumu gelirleri,
-- or -- strong>
- PHP istemci oturumu periyodik hesaplama-yoğun iş durumunu kontrol etmek için tarayıcı
job_id
geçen ve aynı zamanda tarayıcı talimat sonrasında, değerli kaynakları boşaltmak için hemen sonlandırır {[(0) }] (örn. META REFRESH
, or via an XHR (AJAX) request from Javascript, etc.); the browser check spawns a brief PHP client session which performs the synchronous status get_status(job_id)
üzerine bu olabilir hangisi durumunu () iletme hemen sonra sonlandırma, hesaplama-yoğun Thrift sunucuya çağrı tarayıcı