您好,登錄后才能下訂單哦!
這篇文章主要介紹swoole中websocket連接的案例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
首先我先介紹我的運行環境是直接放在外網服務器的,程序運行環境我就不多說了大家可以參考swoole官網,我是直接通過ip 進行訪問的,在這其中小編遇到一個坑,那就是我們讓htpp服務器或者websocket監聽的端口 必須要到服務器上開放,小編的阿里云服務器要到安全組里面去設置放行端口,出入方向都要設置。否則你會發現你通過ip:端口 是無法訪問服務器的
在這里我介紹下兩種連接websocket服務器的方法
1、通過訪問http服務器然后訪問我們的html頁面連接我們的websouket服務器,這樣我們就需要3個文件。1 http.php 2 ws.php 3 ws.html 簡單貼下我的圖,也是參考官方文檔寫的
http.php
<?php /** * Created by PhpStorm. * User: xyj * Date: 18-9-9 * Time: 下午4:31 */ //實例化 $http_server = new swoole_http_server('0.0.0.0',9501); //服務器配置 $http_server->set( [ 'enable_static_handler' => true, 'document_root' => '/www/wwwroot/test_project/swoole', ] ); $http_server->on('request',function($request ,$response){ //print_r($request->get); //設置響應頭信息 $response->cookie('xyj','hello',86400); //服務器返回信息 $response->end('http_server' . json_encode($request->get)); }); $http_server->start();
ws.php
<?php /** * Created by PhpStorm. * User: xyj * Date: 18-9-9 * Time: 下午5:02 */ //創建websocket服務器對象,監聽0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); $ws->set( [ 'enable_static_handler' => true, 'document_root' => '/www/wwwroot/test_project/swoole', ] ); //監聽WebSocket連接打開事件 $ws->on('open', function ($ws, $request) { var_dump($request->fd, $request->get, $request->server); $ws->push($request->fd, "hello, welcome\n"); }); //監聽WebSocket消息事件 $ws->on('message', function ($ws, $frame) { echo "Message: {$frame->data}\n"; $ws->push($frame->fd, "server: {$frame->data}"); }); //監聽WebSocket連接關閉事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; }); $ws->start();
ws.html
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <h2>hello swoole 測試</h2> </body> </html> <script> var wsServer = 'ws://:9502'; var websocket = new WebSocket(wsServer); websocket.onopen = function (evt) { websocket.send('hello swoole!!!'); console.log("Connected to WebSocket server."); }; websocket.onclose = function (evt) { console.log("Disconnected"); }; websocket.onmessage = function (evt) { console.log('Retrieved data from server: ' + evt.data); }; websocket.onerror = function (evt, e) { console.log('Error occured: ' + evt.data); }; </script>
如果是在本地測試環境運行那么wsServer = 'ws://127.0.0.1:9502',如果是外網 那么127.0.0.1 就要改成你瀏覽器上所訪問的地址,這里的端口必須要和你websocket 服務器端口一致否則無法訪問的
準備工作做好了那么我們就開始訪問下websocket,首先在終端 運行http.php 和 ws.php, 正常情況下是這樣如果遇到錯誤一般常見的就是端口被占用,如果是swoole擴展沒裝好或者是語法錯誤,那么請在仔細的讀啃下官方文檔。
如果是端口被占用我們可以使用 lsof -i:9501 命令查看 端口信息, 在kill之前請先認真的看下 該端口是否是重要端口,不要盲目的kill 。
還有一種就是我們開啟過http.php 在關閉后 可能被占用的端口沒有及時的釋放,當我們再次php http.php的時候他也會拋出端口被占用的錯誤,這里我們可以用 這個命令 netstat -ntlp 來查看tcp監聽的端口,其父進程 kill 然后在運行就ok了,繼續使用這個命令來查看tcp端口。
走到這里我們的兩個服務器都已經開啟了 。我們就可以通過瀏覽器訪問了,在瀏覽器上輸入地址:9501 , 此時這里的端口是要個http服務器的端口一致而不是websocket的端口。
關于第二種訪問就是 我們只開啟ws.php 在瀏覽器上訪問和第一種是一樣的,但是此時的端口就要變成websocket的端口了,展示頁面和第一種是一樣的。
以上是“swoole中websocket連接的案例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。