如何使用swoole來建立伺服器(下)

來源:互聯網
上載者:User
這篇文章主要介紹了關於使用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!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.