2014-12-03 62 views
0

對於學校,我必須創建一個基於AJAX/PHP的聊天室,其中有人可以通過輸入用戶名並加入點擊加入。 我已經掌握了所有的工作,但是我做了一些問題,不管我做這件事的方式是否是正確的做法。關於數據庫性能和更多的問題

通過示例的一個問題是,我正在使用javascript的setInterval來每秒從數據庫中取出最新的5條記錄。但是如果有人在網站上更改了這段時間呢?並讓它每秒鐘都在查詢數據庫?我正在考慮存儲上次執行的查詢日期,並檢查它是否實際上是我設置的1秒鐘。但我在哪裏存儲這個?我不想將它存儲在我的數據庫中,因爲我將不得不查詢數據庫。

另一個問題是,專業聊天框實際上是用x時間間隔來檢查數據庫中的新記錄嗎?如果不是,他們如何去做呢?

自動櫃員機我是在一個點,我不完全知道我應該如何去做這件事,是否有一個經驗豐富的PHP開發人員可以給這些答案?

+2

AJAX輪詢很舊。在Socket.io中使用Node.js。即時的! – 2014-12-03 14:42:06

+0

謝謝@AliGajani我會看看!雖然這個項目必須使用AJAX製作。我仍然會看看它。 – Jordy 2014-12-03 14:46:20

+0

他們不能改變網站本身的時間間隔,這意味着他們正在訪問你的服務器來擺弄你的代碼。但他們可以輕鬆使用客戶端JS調試器來擺弄瀏覽器中加載的代碼。 – 2014-12-03 14:47:20

回答

1

每5秒鐘請求服務器一次(有或沒有數據庫查詢)是昂貴的並且不會擴展。而不是讓客戶端請求每個固定的時間間隔,讓服務器在有新消息時通知客戶端。爲此,您需要更持久的連接。有兩種常見的測量方法:

  • 的Ajax長輪詢:通常情況下,Web服務器將關閉其連接一旦成功服務於內容。長時間投票背後的想法是保持長時間連接,並通過簡單的方式提供內容。一旦有新消息,它就會提供給客戶端。一旦連接超時,它重新打開一個新的連接。 WebSocket允許Web瀏覽器和服務器通過其WebSocket協議(類似於HTTP協議)進行持久連接。WebSocket允許Web瀏覽器和服務器通過其WebSocket協議(類似於HTTP協議)進行持久連接。有些瀏覽器還不支持此功能。