這篇文章主要介紹了關於使用swoole來建立伺服器(下) ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
1.建立HttpServer伺服器
HttpServer是基於swoole_server,所以swoole_server下的方法HttpServer都可以使用
httpsevrer它只能被用戶端喚起
1.測試
<?php$http = new swoole_http_server("0.0.0.0", 8811);$http->on('request', function($request, $response) { echo 'nihao'; $response->end('hello swoole');});$http->start();
php執行一下,開啟瀏覽器
伺服器
這裡我們發現了一個怪象
1.echo(var_dump,print_rd)的內容在伺服器現實
2.而瀏覽器的內容只能通過end(內容)的方式
end只能調用一次,如果需要分多次向用戶端發送資料,請使用write方法
擴充:咦這個,很像我們平時訪問的 XXX.com:80 如果我們想要訪問下面的檔案那怎麼辦?
是不是想起我們之前tcp和udp都有用到的一個函數 set,這個函數我把它理解為配置,那麼我們就懟著它進行配置
$http->set([ 'enable_static_handler' => true, 'document_root' => "/www/wwwroot/server",//設定根目錄這雷根據你自己的路徑來寫 ]);
是不是很像配置虛擬位址?我們試著訪問server目錄下的test.html
有了!!
一般來說設定了document_root的http_server流程是這樣的:
1.先會去根據url去訪問document_root相對的路徑下的檔案,跟佈建網域名訪問檔案的原理差不多
2.如果這個檔案沒有,那麼我們http_server才會順著執行 $http->on('request'function($request, $response));做出相應的相應
2.建立WebSocket伺服器
1.特性:
(1)HTTP 協議有一個缺陷:通訊只能由用戶端發起,做不到伺服器主動向用戶端推送資訊。
而WebSocket它的最大特點就是,伺服器可以主動向用戶端推送資訊,用戶端也可以主動向伺服器發送資訊,是真正的雙向平等對話,屬於伺服器推送技術的一種。
(2)Web_Socket繼承http_server
由於web_server全雙工系統這個特性所以很適合做聊天室
2.說到這我們就來做一個簡單的測試!
(1)我們先寫一個web_server.php的檔案
$server = new swoole_websocket_server("0.0.0.0", 8811);//Web_Socket繼承http_server,所以它也可以擁有同樣的set方法//包括 $server->on('request', function($request, $response) {}也是可以有的$server->set( [ 'enable_static_handler' => true, 'document_root' => "/www/wwwroot/server", ]);//監聽websocket串連開啟事件$server->on('open', 'onOpen');function onOpen($server, $request) { echo "fd為:".$request->fd."已經上線\n";}// 監聽ws訊息事件$server->on('message', function ( $server, $frame) { var_dump($frame); $msg='fd為'.$frame->fd.'說:'.$frame->data;//$frame->data為用戶端傳遞過來的資訊 $server->push($frame->fd, $msg);});$server->on('close', function ($server, $fd) { echo "client {$fd} closed\n";});$server->start();
(2)然後再寫一個用戶端檔案
<script type="text/javascript"> var url='ws://你的ip地址:8811'; var ws =new WebSocket(url); ws.onopen=function (evt) { ws.send('用戶端:建立連結成功'); console.log(evt); } ws.onmessage=function(evt){ console.log(evt); console.log('伺服器回複:'+evt.data); } ws.onclose=function(evt){ console.log(evt); } ws.onerror=function(evt){ console.log(evt); }</script>
你可以根據這個來寫一個基於web_socket的聊天室,十分有趣
學習了tcp,udp,websocket,http的服務,我們可以做一波總結:
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!