簡體   English   中英

PHP + AJAX與MySQL-每2秒查詢一次,在TIME_WAIT中查詢太多

[英]PHP+AJAX with MySQL - Query every 2 seconds, too many in TIME_WAIT

我有一個使用jQuery的ajax的基本HTML文件,該文件每2秒連接到我的polling.php腳本。

polling.php只需連接到mysql,檢查ID是否比隱藏的存儲的當前ID更新,然后回顯是否有新內容。 由於javascript每2秒連接一次,因此在TIME_WAIT中,僅針對我的客戶端,我就獲得了數千個連接。 這是因為我的腳本一次又一次地重新連接到MySQL。 我已經嘗試過mysql_pconnect,但是沒有任何幫助。

有什么辦法可以使PHP打開1個連接,並繼續使用它進行查詢? 不必每次都重新連接並進行所有這些TIME_WAIT連接。 不確定如何執行此操作才能正常工作。

我實際上結束了基本的長輪詢。 我將一個簡單的PHP腳本制作為一個無限的while循環,它每2秒查詢一次。 如果發現新內容,它將回顯並中斷循環。 我的jquery只是將ajax連接到它,並等待響應。 響應后,它將更新我的頁面,並重新開始輪詢。 很簡單!

PS,長輪詢方法還減少了瀏覽器內存問題,並大大減少了服務器上的TIME_WAIT連接。

沒有簡單的方法可以執行此操作,因為pconnect在多個網頁調用中均不起作用。 但是,一些使數據庫吞吐量最小化的方法是:

  1. 縮短輪詢時間。 (2秒可能有點多余嗎?)

  2. 擁有一個“主” PHP腳本,該腳本每隔'n'秒運行一次,從數據庫中提取數據並將其以適當的格式(序列化的PHP數組,XML,HTML數據等)保存在文件系統中。 (我建議先寫入一個臨時文件,然后重命名現有文件,以最大程度地減少部分文件收集問題。)然后,Ajax請求的PHP頁面將僅使用此數據文件中的信息。

在執行主PHP腳本方面,您可以使用cron或僅在文件內容被認為過時時讓首先請求頁面的用戶使用。 (您可以通過filemtime函數為此目的使用數據文件的時間戳。)我個人會使用后一種方法,因為cron在此目的上是過頭的。

如果需要,您可以更進一步,並使用memcached代替平面文件等。 (也就是說,在此階段,這可能是一個過於復雜的解決方案。)

暫無
暫無

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

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