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