swoole學習手記(三)建立服務器(下)

目錄javascript

持續更新中。。。php

1.建立HttpServer服務器

HttpServer是基於swoole_server,因此swoole_server下的方法HttpServer均可以使用
httpsevrer它只能被客戶端喚起html

clipboard.png

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執行一下,打開瀏覽器
clipboard.pngweb

服務器
clipboard.pngsegmentfault

這裏咱們發現了一個怪象
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

clipboard.png

有了!!
通常來講設置了document_root的http_server流程是這樣的:
1.先會去根據url去訪問document_root相對的路徑下的文件,跟配置域名訪問文件的原理差很少
2.若是這個文件沒有,那麼咱們http_server纔會順着執行 $http->on('request'function($request, $response));作出相應的相應swoole


2.建立WebSocket服務器

1.特性:
(1)HTTP 協議有一個缺陷:通訊只能由客戶端發起,作不到服務器主動向客戶端推送信息。
而WebSocket它的最大特色就是,服務器能夠主動向客戶端推送信息,客戶端也能夠主動向服務器發送信息,是真正的雙向平等對話,屬於服務器推送技術的一種。
(2)Web_Socket繼承http_server
clipboard.png

因爲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>

clipboard.png

你能夠根據這個來寫一個基於web_socket的聊天室,十分有趣

學習了tcp,udp,websocket,http的服務,咱們能夠作一波總結:

clipboard.png

若是這篇文章對你有用,能夠點個贊或者是收藏,算是對做者的鼓勵~

文檔地址傳送門:https://wiki.swoole.com/wiki/...
推薦singwa老師的視頻教程:https://coding.imooc.com/clas...

另附上小弟網站。。。www.entercode.cn 推廣一波...

相關文章
相關標籤/搜索