2011-01-05 67 views
3

我想學習如何從頭開始製作其中一個系統,並且我在Google上發現了很多垃圾鏈接。我真的只想爲最基本的PHP和MySQL聊天提供一個簡單的教程,以便在開始處理jQuery/AJAX之前,我可以理解這個概念。如何構建PHP/MySQL實時聊天?

+2

我認爲這個問題是有點含糊 - 也許,如果你集中多一點具體的你關心它的方面會有所幫助。你不會說你在PHP,數據庫設計等方面的專業水平是什麼,那麼你在尋找什麼級別的教程? – Polsonby 2011-01-05 09:34:57

+1

frames +'meta-refresh'是AJAX時代之前的方式 – 2011-01-05 09:35:39

+0

這是一個模糊的問題。如果你在項目的某個特定部分尋求幫助,而不是僅僅要求整體教學,那麼你可能會有更多的運氣。 – 2011-01-05 09:43:10

回答

2

一個非常簡單的起點

有一個數據庫表的消息

id | user | timestamp | message 

而且具有發送一個AJAX請求讀取任何新的消息的PHP頁面。

這將涉及檢查數據庫以查看自收到請求以來是否有任何消息。如果沒有消息,然後循環,等待並再次嘗試100毫秒(或任何你認爲可接受的滯後)。

當Ajax請求返回消息(JSON響應最好)時,使用JQuery將用戶,時間和消息輸出到頁面。

+0

我剛剛寫了我的第一個ajax應用程序,所以對此仍然很新。從瀏覽器進行輪詢可以接受嗎?它不會導致高CPU利用率等? – zaidwaqi 2011-01-05 10:49:20

+0

您可以從瀏覽器進行輪詢,並讓服務器進行循環,直到找到新消息,然後返回響應。這是所謂的長輪詢,並且是解決網絡編程中需要套接字的幾種方法之一 – Codemwnci 2011-01-05 10:51:07

+0

有趣......特別感謝關鍵字 – zaidwaqi 2011-01-06 05:57:44

3

你的聊天活動部分是棘手的部分,如果你剛剛開始,我會跳過這一點。 首先創建一個簡單的留言板,然後添加更多功能。

有許多關於如何構建留言板的教程,甚至還有一些可以從中學習的免費腳本。

在您的留言簿正常工作後,您可以使用AJAX輪詢來添加諸如自動加載新消息的功能,以使其顯示爲實時。你基本上做的是定期向服務器發出AJAX調用,以獲取所有消息並將其顯示在頁面上。

+0

但是運算符部分呢?必須有一個操作員(管理員)處理傳入的客戶消息並對其作出響應,對嗎?所以,如果我理解正確,管理員端的腳本將不斷檢查數據庫中的最新條目(每隔10秒定期使用ajax),並向管理員顯示消息的詳細信息和相應的客戶。因此,管理員可以選擇客戶並向他發送回覆。然後在客戶端,我們必須顯示針對該客戶的消息(再次定期)。 – 2011-08-16 12:24:12

6

PHP/MySQL的聊天101:

1)用戶打開browser
2)用戶輸入address在布勞爾
3)瀏覽器發送HTTP請求
4)server臨危HTTP請求
5)服務器告訴PHP解釋器運行PHP script
6)PHP腳本connectsMySQL database
7)PHP腳本retrieves list of messages
8)PHP生成與消息製成的HTML代碼的HTTP響應和form
9)服務器發送給瀏覽器
10的HTTP響應)瀏覽器從HTTP響應繪製HTML
11)用戶類型新的消息並提交表單
12)瀏覽器發送HTTP POST請求
13)...

3
+1

雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供供參考的鏈接。 – 2013-12-17 10:36:12

0

如果您必須使用php和mySQL進行聊天,至少有一個未讀消息的單獨表。如果您進行調查,您很可能需要每隔100ms左右檢查數據庫中是否有新消息。如果您的總郵件表爲1000行,則每隔100毫秒檢查一次會終止您的服務器(特別是在連接了很多用戶的情況下)。我會爲我的mySQL數據庫構造一個只有未讀消息的表格,並將它們移動到一個更大的表格中,以便讀取舊消息。這樣你就不會一直在檢查一張大桌子。

更好的辦法是使用緩存數據庫來讀取像redis(facebook使用的memcacheD)這樣的未讀消息。

甚至更​​好的是隻不使用PHP一起,並使用事件驅動的語言,像node.js的回調