基礎(chǔ)介紹
(1) Swoole是一款面向生產(chǎn)環(huán)境的PHP異步網(wǎng)絡(luò)通信引擎,可用于開(kāi)發(fā)高性能的異步并發(fā)TCP、UDP、Unix Socket、HTTP和WebSocket服務(wù)。Swoole在互聯(lián)網(wǎng)、移動(dòng)通信、企業(yè)軟件、云計(jì)算、網(wǎng)絡(luò)游戲、物聯(lián)網(wǎng)(IOT)、車(chē)聯(lián)網(wǎng)和智能家居等領(lǐng)域得到廣泛應(yīng)用。使用PHP + Swoole作為網(wǎng)絡(luò)通信框架可以極大提升企業(yè)IT研發(fā)團(tuán)隊(duì)的效率。
(2) WebSocket是一種通過(guò)單個(gè)TCP連接進(jìn)行全雙工通信的協(xié)議。它于2011年由IETF定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936進(jìn)行補(bǔ)充規(guī)范。同時(shí),WebSocket API也被W3C定為標(biāo)準(zhǔn)。
借助WebSocket,客戶(hù)端和服務(wù)器之間的數(shù)據(jù)交換更加簡(jiǎn)便,允許服務(wù)端主動(dòng)向客戶(hù)端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需進(jìn)行一次握手,便可建立持久性連接并進(jìn)行雙向數(shù)據(jù)傳輸。
(3) 本文將介紹如何利用Swoole和WebSocket實(shí)現(xiàn)一個(gè)簡(jiǎn)易的聊天室。對(duì)于熟悉網(wǎng)絡(luò)通信協(xié)議的讀者來(lái)說(shuō),這不會(huì)是一個(gè)陌生的話(huà)題。
功能需求及問(wèn)題處理
web端:
(1) 每次刷新都會(huì)生成一個(gè)唯一的ID(id值從1開(kāi)始).
(2) 第一次進(jìn)入網(wǎng)站時(shí)會(huì)要求用戶(hù)設(shè)置昵稱(chēng)并會(huì)與ID進(jìn)行綁定。
問(wèn)題點(diǎn):
(1) 刷新頁(yè)面后用戶(hù)標(biāo)志(ID)會(huì)重新生成,之前生成ID被棄用。
(2) WebSocket生成了新的用戶(hù)ID,但是跟現(xiàn)在的無(wú)法形成關(guān)聯(lián)關(guān)系。
server端:
(1) 當(dāng)用戶(hù)進(jìn)入聊天室后,發(fā)送廣播給所有人并加入聊天群組(使用redis存儲(chǔ))。
(2) 當(dāng)用戶(hù)退出直播間后,發(fā)送廣播給所有人并清除該用戶(hù)的記錄。
(3) 用戶(hù)每發(fā)送一次消息都要形成新的記錄廣播給所有人。
(4) 用戶(hù)生成新的昵稱(chēng)后把昵稱(chēng)推送給他。
web端問(wèn)題處理方法:
(1) 瀏覽器刷新時(shí)提醒用戶(hù)刷新即將重新獲得新的身份。
(2) 用戶(hù)連接成功后記錄用戶(hù)name,每次連接把這個(gè)name帶上,清除之前該name的綁定關(guān)系,形成新的關(guān)系。
聊天室演示
代碼實(shí)現(xiàn)
總結(jié)
這篇文章只是簡(jiǎn)單的介紹前后端如何實(shí)現(xiàn)通信,很多的細(xì)節(jié)問(wèn)題沒(méi)有進(jìn)行處理。 UI比較low,這里大家只看代碼就好了…