一、 Swoole介紹
swoole是一個面向生產環境的 PHP 異步網絡通信引擎,使 PHP 開發人員可以編寫高性能的異步并發 TCP、UDP、Unix Socket、HTTP,WebSocket 服務。Swoole 可以廣泛應用于互聯網、移動通信、企業軟件、云計算、網絡游戲、物聯網(IOT)、車聯網、智能家居等領域。 使用 PHP + Swoole 作為網絡通信框架,可以使企業 IT 研發團隊的效率大大提升。
swoole支持用于搭建多種server,包括http server、websocket server、tcp server、redis server等等。這里我們使用到的是其中的websocket server。
二、WebSocket介紹
WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket通信協議于2011年被IETF定為標準RFC 6455,并由RFC7936補充規范。WebSocket API也被W3C定為標準。 WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。
簡單地來說,websocket協議實現了瀏覽器和服務器之間的雙向通信。而html5原生支持websocket協議。
三、swoole websocket 服務端demo
1.安裝swoole
swoole以php擴展的形式進行加載,首先需要為你的php安裝swoole擴展,安裝命令如下:
pecl install swoole
安裝成功后在php.ini文件加上extension=swoole.so加載擴展
2.啟動服務端
新建一個php文件,文件名為server.php,文件內容如下:
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501); $server->on('open', function (Swoole\WebSocket\Server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; }); $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) { global $server;//調用外部的server // $server->connections 遍歷所有websocket連接用戶的fd,給所有用戶推送 foreach ($server->connections as $fd) { // 需要先判斷是否是正確的websocket連接,否則有可能會push失敗 if ($server->isEstablished($fd)) { $server->push($fd, $request->get['message']); } } }); $server->start();
此服務監聽本機的9501端口,運行命令 php server.php 啟動服務。
四、HTML5 WebSocket 客戶端demo
1.客戶端代碼
新建一個testServer.html文件,寫入以下內容:
<!doctype html> <html> <head> <title>測試WebSocket</title> </head> <body> <script> var ws = new WebSocket("ws://【服務端IP】:9501"); ws.onopen = function(event){ console.log("connected!"); ws.send("hello server,this is client!"); }; ws.onmessage= function(event){ console.log("server message:"+event.data); } ws.onclose = function(event){ console.log("closed!"); }; </script> </body> </html>
將【服務端IP】替換成swoole服務端ip,保存文件。
五、測試demo
(1) 訪問步驟四的客戶端demo頁面,首先與服務端建立連接,查看瀏覽器console log,可以看到顯示:
connected!
(2) 查看linux控制臺,可以看到顯示:
server: handshake success with fd1
(3) 接著客戶端向服務端發了一條消息,服務端控制臺顯示:
receive from fd1:hello server,this is client!
(4) 服務端收到消息后,向客戶端回復了一條消息,客戶端控制臺顯示:
server message:this is server
以上就是基于swoole+websocket開發雙向通信應用的簡單演示,在線聊天、網頁游戲等實時通信的應用也可基于此方式進行開發。想要獲取更多swoole教程歡迎關注編程學習網
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://www.wangchenghua.com/post/8386/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料