2014-02-11 41 views
1

所以我實現了一個聊天室。我將從我使用的模式開始。幾秒鐘後重新加載聊天的另一種方式

  • 我有一個room表,基本上存儲與像參與者的數量,話題等等等等
  • 我有一個users表,用於存儲用戶信息的聊天室的信息。
  • 我有一個posts表存儲帖子。這有一個來自用戶和房間表的外鍵。
  • 另外,我有一個決賽桌是用戶和房間之間的關係。所以它只是來自作爲房間一部分的用戶的房間和用戶標識。

現在,我在頁面上有三個div,一個用於chatarea,另一個用於顯示在線人羣,然後是用於發佈消息的文本區域。

我在做什麼目前,有一個JavaScript函數loadChats(),現在這個方法調用一個PHP文件,該文件只是獲取在那個特定的房間裏所有的職位至今。同樣的東西也倒入了我的div中,即「聊天室」。 此外,同樣,我有一個loadParticipants()每秒鐘加載用戶。

我正在使用jquery.post的目的和在該方法的結尾,我做了一個setTimeout在函數的結尾。現在這裏是我的問題

當然我可以做得更好。有什麼建議麼?我想到了幾個。

  1. 每次調用PHP中,我得到了整個chathistory併發送回瀏覽器着,當然我可以檢查郵件的數量是一樣的,因爲它是在客戶端,如果是的話,我不會發送消息。但是它會使它更好嗎?怎麼樣?
  2. 另外,每隔一秒呼叫一次服務器端似乎有點太過於矯枉過正。有沒有辦法做到這一點,如果一些新的聊天被添加到posts表中,那麼通知和更新該特定聊天室?即不是經常ping服務器來請求新的請求,只需要詢問一次,並等待是否有新的請求。當該請求完成時,它會再次ping服務器以進行下一次更新。
+0

一個建議:不要取得房間裏的所有帖子,只取得新的帖子(例如按照最後帖子的ID進行檢查)並將它們附加到聊天框中。 –

+0

只需爲每個帖子添加一個標誌字段即可讀/不可....如果讀取設置爲1,否則爲0 ....則只能獲取標誌爲1的帖子...... –

回答

1

你應該看看websockets(我從來沒有用過PHP,但這看起來很有希望:http://socketo.me/)。你可以做的是讓服務器在客戶端進入時將任何新消息推送到客戶端,並讓每個客戶端都推送到服務器等等。這樣你就不必每隔2秒,並加載噸數據進行比較。當有新消息時,服務器將其保存到某個數據庫,然後通過所有打開的套接字推送該消息。同樣的事情登錄/註銷。

編輯:剛剛瀏覽了更多的頁面,他們的教程甚至通過如何使用基本的chatroom-esque功能來設置它。

相關問題