PHP實現基於Swoole簡單的HTTP伺服器

來源:互聯網
上載者:User

引用Swoole官方定義:

PHP語言的非同步、並行、高效能網路通訊架構,使用純C語言編寫,提供了PHP語言的非同步多線程伺服器,非同步TCP/UDP網路用戶端,非同步MySQL,資料庫連接池,AsyncTask,訊息佇列,毫秒定時器,非同步檔案讀寫,非同步DNS查詢。Swoole可以廣泛應用於互連網、移動通訊、企業軟體、雲端運算、網路遊戲、物聯網、車連網、智能家居等領域。使用PHP+Swoole作為網路通訊架構,可以使企業IT研發團隊的效率大大提升,更加專註於開發創新產品。

在這裡簡述swoole兩種API編寫簡單HTTP伺服器。

swoole_server

使用swoole_server API,構建HTTP伺服器,4個步驟:

  1. 構建Server對象
  2. 設定運行時參數
  3. 註冊事件回呼函數
  4. 啟動伺服器

直接代碼體現,建立 server.php

set(array(    'worker_num' => 8,    'daemonize' => 0,    'max_request' => 10000,    'dispatch_mode' => 2,    'debug_mode'=> 1,));//3.註冊事件回呼函數$serv->on('Receive', function($serv, $fd, $from_id, $data){    $respData='

Hello Swoole.

'; response($serv,$fd,$respData);//封裝並發送HTTP響應報文});//4.啟動伺服器$serv->start();

如何封裝HTTP響應報文?首先你得知道HTTP響應報文的組成結構,如

知道了響應報文的組成結構,那我的響應報文應該是這樣的:

HTTP/1.1 200Server:SwooleServerContent-Type:text/html;charset=utf8Content-Length:13

Hello Swoole.

代碼實現。

/*** 發送內容* @param \swoole_server $serv* @param int $fd* @param string $respData* @return void*/function response($serv,$fd,$respData){    //響應行    $response = array(        'HTTP/1.1 200',    );    //回應標頭    $headers = array(        'Server'=>'SwooleServer',        'Content-Type'=>'text/html;charset=utf8',        'Content-Length'=>strlen($respData),    );    foreach($headers as $key=>$val){        $response[] = $key.':'.$val;    }    //空行    $response[] = '';    //響應體    $response[] = $respData;    $send_data = join("\r\n",$response);    $serv->send($fd, $send_data);}

到此,一個簡單響應 Hello Swoole. 的HTTP伺服器就完成了。完整代碼: 這裡

(訪問不了gist?配置本地hosts檔案: 192.30.252.141 gist.github.com )

運行 php server.php ,瀏覽器訪問http://127.0.0.1:9501/,當然我們常常使用Nginx作為前端代理,設一個www.server.com,本地設定hosts映射,就能通過網域名稱來訪問了。Nginx配置: 這裡

注意:當響應報文格式不正確時,瀏覽器頁面會一直轉菊花,等待請求返回...

再後來,有了swoole_http_server,HTTP伺服器代碼就變得更加簡單了!

swoole_http_server

on('request', function ($request, $response) {    $html = "

Hello Swoole.

"; $response->end($html);});

沒錯,就這幾行代碼就實現了。不再需要封裝響應報文。swoole_http_server 繼承於 swoole_server,是swoole內建Http伺服器的支援,通過幾行代碼即可寫出一個非同步非阻塞多進程的Http伺服器。

Notice:swoole_http_server對Http協議的支援並不完整,建議僅作為應用伺服器。並且在前端增加Nginx作為代理

參考

  • http://www.swoole.com/
  • https://github.com/LinkedDestiny/swoole-doc
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.