簡體   English   中英

Heroku上的PHP應用程序體系結構

[英]PHP Application Architecture on Heroku

我在Heroku上有一個PHP應用程序,該應用程序與外部API進行了大量通信,這些API依次觸發了數據庫上的作業,然后將結果顯示在Facebook應用程序中...

目前,我有2個工作進程和一個Web進程。 Web進程會觸發工作進程並監視數據庫標志,以了解每個工作進程何時完成...我知道...此設置不是很好,理想情況下,我希望在每個工作進程完成時在Web進程中收到通知完成,但似乎不可能...

使用PHP在Heroku中有更好的方法來解決此問題嗎?

也許Heroku上的PHP應用程序不是最好的解決方案,但是我寫了很多我不想重寫的PHP。...

提前致謝...

我可以想到無需放棄PHP就可以做的兩個相對簡單的事情(盡管我不得不提到PHP並沒有太多推薦的地方,並且使用Python / Django,Python / Flask或Ruby / Rails可能會更好。 ):

一種是您可以切換到Redis來管理您的工作人員,而不是使用數據庫。 這樣做的好處是Redis具有發布/訂閱系統,您可以在保持連接打開的同時訂閱信號。 這意味着,如果連接是打開的(例如從Web進程),則將立即通知您更改,而無需輪詢。

二是您可以切換到使用Ajax,以便在等待時不會阻止頁面的加載。 立即加載頁面,然后使用javascript來訪問單獨的PHP頁面以定期檢查作業狀態的更新,然后在結果可用時使用javascript在頁面上呈現結果。

更好的是,使用ajax長輪詢。 立即呈現您的頁面,然后使用javascript發送回請求。 然后,當您的php頁面收到第二個請求時,向Redis注冊一個訂閱,然后手動檢查更新(如果您不使用Redis,則只需檢查更新)。 如果沒有更新,則只需等待訂閱收到消息,或等待30秒,以較早者為准。 (說實話,我從未在PHP中完成Redis訂閱,所以我不確定如何實現它-如果您不能輕松實現,則每隔幾秒鍾輪詢一次。)如果30秒計時器到期,返回表示沒有結果的json,並立即讓javascript重試。 如果您確實在這段時間內收到結果,請返回結果並讓javascript呈現它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM