您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用PHP怎么編寫一個在線聊天功能,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為php是開源的,從而使得php經久不衰。
數據庫
回頭來看需求, 很明顯,首先要有一張表格,存放雙方的對話,想了想決定這樣定義字段:
主要是這兩個字段:
user_id 表示消息發送的主體
chat_user 表示消息接收的主題
這樣定義的好處是,可以輕易從一條消息中輕易辨別哪個是發送方,哪個是接收方,為前端的展示做準備.
但是這樣還不夠
有了這張表,就可以通過當前登錄的session中的用戶ID, 去進行查詢,可以得知在跟哪些人聊天. 但是這樣并不方便,而且要進行復雜的處理.
假設有一條消息是己方發送的,那么就插入數據 ‘己方' ‘對方' ‘內容',同時可以知道當前聊天中的一個人是'對方'.
但是假設有一條消息是對方發送的,對當前用戶來說,數據就是 ‘對方' ‘己方' ‘內容'.
也就是說,想要實現多人聊天,就要獲取當前正在跟 ‘我' 聊天的用戶們.不論是對方發送的,還是 ‘我' 發送的,都應該計算在內. 要對數據庫遍歷兩次,而且很多對當前來說是重復,無用的數據. 在”獲取聊天對方的主體” 這一步時, 只需要知道兩個人是否有聊天關系即可,具體內容不用關心.
所以還要一張聊天關系表. 我是這樣定義字段的:
其中user_id 和 chat_user 為雙主鍵,不能同時相等. 這樣就只記錄了聊天關系,不記錄聊天內容,搜索起來也方便得多.
‘我' 是user_id ‘對方' 是chat_user
舉個例子 第一個字段表示 我與ID為9的用戶 有一個聊天關系, 所以在'我'的界面上,就應該有這個用戶. 同理 第二條字段表示 對方與我有聊天關系,那么在對方的界面上,就要有我這個用戶.
一般來說聊天關系是相互的, 但是也可以刪除. 刪除聊天關系并不等于刪除聊天記錄.
比如,在我的界面上,我把與9號用戶的聊天關系刪除了,那么我就看不到與9號用戶的聊天信息了, 但是對9號用戶來說,我還在他的界面上,隨時可以向我發送消息. 當他向我發送消息時,服務端又要生成一條數據 ‘我' ‘對方' ,這樣,我與對方的聊天關系又建立起來了,同時,聊天記錄一直都沒有被刪除過,所以,當重新建立聊天關系時,可以展示出聊天記錄.
而且,刪除聊天關系后, 我也可以重新發起聊天, 再次建立聊天關系.
所以這張表建立之后提供很多方便, 上面分析的需求,展示聊天記錄,也可以很好的完成.
首先,主要功能有一個控制器,兩張表,兩個模型. 至于頭像,昵稱什么的,不計算在主要功能內.
控制器MessageController 一共有五個方法.
用來應對非ajax請求,用戶通過瀏覽器訪問時,比如第一次進入聊天界面,就是通過瀏覽器訪問的,這時候調用showPage方法,這時候,后臺只獲取聊天關系(第四個方法),展示在界面左側. 其他不作處理.
用來應對非ajax請求, 比如我通過用戶個人資料頁面,點擊發送消息,這時候就調用這個方法. 先判斷聊天關系是否存在,如果存在就不處理,如果不存在,就插入一個聊天關系. 并且要獲取所有聊天關系(第四個方法),最新的排上面,把用戶ID轉到界面上.為后面做準備.
用來應對ajax請求. 用來獲取聊天信息.
‘我' 這個用戶來到聊天界面上后, 前端就開始進行ajax輪詢.不停訪問getChatText()這個方法. 這時有兩種情況.
當前正在與某個用戶聊天,js就發送一個請求到getChatText方法,參數是對方的用戶ID. 因為'我'的ID 可以從服務端session獲取到.然后通過這兩個信息去數據庫獲取聊天消息.返回json格式,js進行數據處理,節點操作,等等,然后把消息展示出來.
當前沒有正在與某個用戶聊天,那ajax暫不啟動,當選擇了聊天對象的時候再啟動輪詢.
獲取當前登錄用戶的聊天關系. 作為一個工具函數,供第一個和第二個函數使用.
用來應對ajax請求, 也就是發送消息請求. 把聊天消息插入數據庫而已.
上述就是小編為大家分享的使用PHP怎么編寫一個在線聊天功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。