日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

基于PHP实现一个简单的在线聊天功能(轮询ajax )

發布時間:2023/12/20 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于PHP实现一个简单的在线聊天功能(轮询ajax ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于PHP實現一個簡單的在線聊天功能(輪詢ajax?)

一、總結

1、用的輪詢ajax?

?

?

二、基于PHP實現一個簡單的在線聊天功能

一直很想試著做一做這個有意思的功能,感覺復雜的不是數據交互和表結構,麻煩的是前端展..于是..

需求分析

要實現功能,首先要做前端,經過對比其他網站的在線聊天功能,發現除了基本的聊天功能以外,還要注意以下幾點.

1.一次只能和一個人聊天,但是可以隨意切換其他人. 2.如果用戶是從"發送消息" 入口進來的,那么當前馬上就切換到對應的聊天窗口,而且如果之前有過聊天記錄,應該把聊天記錄也展示出來. 3.如果是從"我的消息" 入口進來的,那么應該不顯示任何聊天記錄.等待選擇聊天對象. 4."我"發送的消息顯示在右邊,"對方"發送的消息顯示在左邊,也可以相反,總之要不一樣. 5.切換聊天的時候不能刷新整個頁面,否則體驗很差. 發送消息也同理,所以應該用ajax. 6.要保證在線聊天的及時性,應該每隔一段很短的時間,就要與服務端通信,也就是說要輪詢ajax.

前端頁面

經過簡單的需求分析,然后又找了找其他的網站,對比了一下功能在界面的展示,最終確定界面. 然后花了幾個小時做好了.

成品?

這是最終全部做完(包括后端) 的效果.

點擊左側可以切換,下方多行文本框,輸入聊天信息,然后點擊發送.

整個流程大概就是這樣.

數據庫

回頭來看需求, 很明顯,首先要有一張表格,存放雙方的對話,想了想決定這樣定義字段:?

主要是這兩個字段:?
user_id 表示消息發送的主體?
chat_user 表示消息接收的主題

這樣定義的好處是,可以輕易從一條消息中輕易辨別哪個是發送方,哪個是接收方,為前端的展示做準備.

但是這樣還不夠

有了這張表,就可以通過當前登錄的session中的用戶ID, 去進行查詢,可以得知在跟哪些人聊天. 但是這樣并不方便,而且要進行復雜的處理.

1.假設有一條消息是己方發送的,那么就插入數據 ‘己方’ ‘對方’ ‘內容’,同時可以知道當前聊天中的一個人是’對方’.?
2.但是假設有一條消息是對方發送的,對當前用戶來說,數據就是 ‘對方’ ‘己方’ ‘內容’.

也就是說,想要實現多人聊天,就要獲取當前正在跟 ‘我’ 聊天的用戶們.不論是對方發送的,還是 ‘我’ 發送的,都應該計算在內. 要對數據庫遍歷兩次,而且很多對當前來說是重復,無用的數據. 在”獲取聊天對方的主體” 這一步時, 只需要知道兩個人是否有聊天關系即可,具體內容不用關心.

所以還要一張聊天關系表. 我是這樣定義字段的:?

其中user_id 和 chat_user 為雙主鍵,不能同時相等. 這樣就只記錄了聊天關系,不記錄聊天內容,搜索起來也方便得多.?
‘我’ 是user_id ‘對方’ 是chat_user

舉個例子 第一個字段表示 我與ID為9的用戶 有一個聊天關系, 所以在’我’的界面上,就應該有這個用戶. 同理 第二條字段表示 對方與我有聊天關系,那么在對方的界面上,就要有我這個用戶.

一般來說聊天關系是相互的, 但是也可以刪除. 刪除聊天關系并不等于刪除聊天記錄.?
比如,在我的界面上,我把與9號用戶的聊天關系刪除了,那么我就看不到與9號用戶的聊天信息了, 但是對9號用戶來說,我還在他的界面上,隨時可以向我發送消息. 當他向我發送消息時,服務端又要生成一條數據 ‘我’ ‘對方’ ,這樣,我與對方的聊天關系又建立起來了,同時,聊天記錄一直都沒有被刪除過,所以,當重新建立聊天關系時,可以展示出聊天記錄.

而且,刪除聊天關系后, 我也可以重新發起聊天, 再次建立聊天關系.?
所以這張表建立之后提供很多方便, 上面分析的需求,展示聊天記錄,也可以很好的完成.

代碼就不放了,說一下實現思路

首先,主要功能有一個控制器,兩張表,兩個模型. 至于頭像,昵稱什么的,不計算在主要功能內.

控制器MessageController 一共有五個方法.

1.showPage() ,用來應對非ajax請求,用戶通過瀏覽器訪問時,比如第一次進入聊天界面,就是通過瀏覽器訪問的,這時候調用showPage方法,這時候,后臺只獲取聊天關系(第四個方法),展示在界面左側. 其他不作處理.

2.newChat(),用來應對非ajax請求, 比如我通過用戶個人資料頁面,點擊發送消息,這時候就調用這個方法. 先判斷聊天關系是否存在,如果存在就不處理,如果不存在,就插入一個聊天關系. 并且要獲取所有聊天關系(第四個方法),最新的排上面,把用戶ID轉到界面上.為后面做準備.

3.getChatText(), 用來應對ajax請求. 用來獲取聊天信息.?
‘我’ 這個用戶來到聊天界面上后, 前端就開始進行ajax輪詢.不停訪問getChatText()這個方法. 這時有兩種情況.

1 當前正在與某個用戶聊天,js就發送一個請求到getChatText方法,參數是對方的用戶ID. 因為'我'的ID 可以從服務端session獲取到.然后通過這兩個信息去數據庫獲取聊天消息.返回json格式,js進行數據處理,節點操作,等等,然后把消息展示出來.2.當前沒有正在與某個用戶聊天,那ajax暫不啟動,當選擇了聊天對象的時候再啟動輪詢.

4.getChatTemp()方法,獲取當前登錄用戶的聊天關系. 作為一個工具函數,供第一個和第二個函數使用.

5.pushChat(),用來應對ajax請求, 也就是發送消息請求. 把聊天消息插入數據庫而已.

差不多就這樣.

總體實現了在線聊天的基本功能,但是有缺陷, 獲取聊天消息的時候,我是無論有沒有新消息,都全部獲取到. 然后清空聊天框,再填充.?
這樣的結果是, 當聊天信息很多的時候,滾動條會有問題, 每次發送消息,滾動條都會先滾動到最上面,再滾動下來. 有個解決方案是,在聊天關系上加一個字段,存儲兩個人的消息數. 獲取完數據的時候,先統計一下,看看是不是比原來的多了,如果多了,就只獲取多的數據,然后更新消息數目. 如果沒多,那就舍棄數據,不做處理.

其實一開始就是這么想的,但是不知道后面為什么又做成了全部獲取.?
失算啊失算.

以上.

?

轉載于:https://www.cnblogs.com/Renyi-Fan/p/9034856.html

總結

以上是生活随笔為你收集整理的基于PHP实现一个简单的在线聊天功能(轮询ajax )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 制服诱惑一区二区三区 | 精品99久久 | 不卡一区二区在线视频 | 亚洲自拍激情 | 伊人黄色网 | 中文字幕激情视频 | 少妇性bbb搡bbb爽爽爽欧美 | 久久久久久一区二区 | www.狠狠插| 日本大奶少妇 | 久久久欧美精品sm网站 | 91av视频网 | ,亚洲人成毛片在线播放 | 污视频网站在线 | 可以直接看的毛片 | 欧美电影一区 | 庆余年三| 六月天综合网 | 亚洲热在线 | 亚洲欧美精品午睡沙发 | 日韩中文字幕视频 | 国产成人一级 | 动漫美女隐私无遮挡 | 顶级尤物极品女神福利视频 | 男女污污网站 | 免费在线观看黄色网址 | 黄视频国产 | 一本久久久 | 亚洲mv一区 | 成人免费区一区二区三区 | 无码国精品一区二区免费蜜桃 | 国产情侣久久久久aⅴ免费 caoporn成人 | 噼里啪啦国语高清 | 国产h片在线观看 | 欧美少妇网 | 二级毛片在线观看 | 亚洲黄在线| 日韩色网 | 日韩特黄毛片 | 黄色wwwww | 激情久久网 | 日韩视频播放 | 亚洲精品国产精品乱码不99 | 日本边添边摸边做边爱 | 欧洲女同同性吃奶 | 骚狐网站 | 成片免费观看视频大全 | 超碰在线观看99 | 欧日韩不卡在线视频 | 韩日午夜在线资源一区二区 | 国产精品黄| 国内精品嫩模av私拍在线观看 | 欧美一区二区三区粗大 | 欧美激情免费看 | 91香蕉视频在线观看免费 | 欧美色视| 欧美a级黄色片 | 涩涩视频网 | 黄网在线免费 | 日本激情在线 | free性欧美hd精品4k | 手机看片一区 | 久久久亚洲一区二区三区 | 天天综合干 | 亚洲美女性生活 | 亚洲综合精品一区 | 精品乱码久久久久久中文字幕 | 美女扒开大腿让男人桶 | 日韩在线一区视频 | 国产黄片一区二区三区 | 久久久久国产一区二区三区潘金莲 | 国产精品1234区 | 665566综合网| 337p粉嫩大胆噜噜噜亚瑟影院 | 亚洲欧美日韩另类在线 | 国产孕交| 欧美国产日韩在线观看 | 91高清免费 | 污污视频在线播放 | 欧美三级午夜理伦三级 | 小泽玛利亚一区二区三区视频 | 精品少妇人妻av一区二区 | 中文久久乱码一区二区 | 亚洲免费观看高清在线观看 | 中文字幕视频在线观看 | 亚洲第五页 | 狠狠操狠狠摸 | 色呦呦精品 | 韩国三级bd高清中字2021 | 五月婷激情 | 美女黄色一级片 | 亚洲综合黄色 | 国产伦精品一区二区 | 久久午夜影院 | av在线免费播放网站 | 91豆花视频 | 99久久久国产精品免费蜜臀 | av资源库| 黄色天堂网|