我想實現一個在Symfony框架中使用長輪詢概念的API。用Symfony實現長輪詢API
假設我有一個只能增長的表'feeds'(假設用戶可以從其他界面插入他們的feed)。 我想創建一個客戶端實時更新頁面。我們的想法是以下內容:
- 客戶端發送AJAX請求與上次修改的時間戳(第一次發送0)
- 服務器客戶端的時間戳進行比較,以時間戳,以檢索與一個比發送更大的時間戳的所有消息由用戶
- 如果有更新的消息,立即將它們返回給客戶端,並帶有最新的消息的時間戳 另一方面,如果沒有新消息,則進入2分鐘忙等待循環,檢查每1-3秒(隨機)是否有新消息。
- 當客戶端接收到服務器應答時,瀏覽器更新視圖並立即發送一個新的ajax請求。
換句話說,服務器不是每隔x秒發送一次AJAX呼叫,而是保存請求直到它爲我們提供新信息。
對Symfony有很好的使用經驗我試着實現這個api的簡單演示,而且效果很好。我有會話阻塞的問題(Ajax調用被保持對服務器的訪問是不可能的),所以我只是增加了以下的動作:
public function executeIndex(sfWebRequest $request)
{
session_write_close();
:
:
(見this link)
然後我測試了對API的大量訪問。 100個用戶工作正常,1000個一切崩潰。 我意識到,我有兩個問題:
- 對於每一個新的數據庫連接打開
- 對於每個訪問服務器執行一個新的進程
因爲我試圖把第一個問題訪問persistent: true
在我的database.yml主義connetor。當我監視服務器連接時,我看到每個對API的訪問都會打開一個新的連接。所以基本上我仍然受到同樣的兩個問題的阻礙。
有沒有人有任何想法或經驗與此問題?或者,也許我應該放棄使用Symfony實現我的api的想法?