目錄javascript
持續更新中。。。php
HttpServer是基於swoole_server,因此swoole_server下的方法HttpServer均可以使用
httpsevrer它只能被客戶端喚起html
1.測試java
<?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執行一下,打開瀏覽器
web
服務器
segmentfault
這裏咱們發現了一個怪象
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.htmlwebsocket
有了!!
通常來講設置了document_root的http_server流程是這樣的:
1.先會去根據url去訪問document_root相對的路徑下的文件,跟配置域名訪問文件的原理差很少
2.若是這個文件沒有,那麼咱們http_server纔會順着執行 $http->on('request'function($request, $response));作出相應的相應swoole
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的服務,咱們能夠作一波總結:
若是這篇文章對你有用,能夠點個贊或者是收藏,算是對做者的鼓勵~
文檔地址傳送門:https://wiki.swoole.com/wiki/...
推薦singwa老師的視頻教程:https://coding.imooc.com/clas...
另附上小弟網站。。。www.entercode.cn 推廣一波...