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

2022-07-15 04:27:10 字數 2292 閱讀 8731

引用swoole官方定義:

php語言的非同步、並行、高效能網路通訊框架,使用純c語言編寫,提供了php語言的非同步多執行緒伺服器,非同步tcp/udp網路客戶端,非同步mysql,資料庫連線池,asynctask,訊息佇列,毫秒定時器,非同步檔案讀寫,非同步dns查詢。swoole可以廣泛應用於網際網路、移動通訊、企業軟體、雲計算、網路遊戲、物聯網、車聯網、智慧型家居等領域。使用php+swoole作為網路通訊框架,可以使企業it研發團隊的效率大大提公升,更加專注於開發創新產品。

在這裡簡述swoole兩種api編寫簡單http伺服器。

使用swoole_server api,構建http伺服器,4個步驟:

構建server物件

設定執行時引數

註冊事件**函式

啟動伺服器

直接**體現,新建server.php

<?php 

//1.構建server物件

$serv = new swoole_server("0.0.0.0", 9501);

//2.設定執行時引數

$serv->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));

//4.啟動伺服器

$serv->start();

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

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

**實現。

/**

* 傳送內容

* @param \swoole_server $serv

* @param int $fd

* @param string $respdata

* @return void

*/function response($serv,$fd,$respdata)

//空行

$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,瀏覽器訪問當然我們常常使用nginx作為前端**,設乙個測試網域名稱www.server.com,本地設定hosts對映,就能通過網域名稱來訪問了。nginx配置:這裡

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

再後來,有了swoole_http_server,http伺服器**就變得更加簡單了!

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

notice:swoole_http_server對http協議的支援並不完整,建議僅作為應用伺服器。並且在前端增加nginx作為**

基於PHP簡單實現BTree

這幾天看mysql索引的知識,了解到btree資料結構,無聊想挑戰一下去實現一下,btree的資料結構特點我就不介紹,具體的 請檢視這個鏈結我比較笨,不會使用畫圖軟體?存放每乙個資料的容器 class ceil class unit 新增ceil public function add ceil c...

PHP使用swoole編寫簡單的echo伺服器示例

server.php 如下 public function start serv 有客戶端連線時 public function connect serv,fd public function close serv,fd public function receive serv,fd,from id...

php 安裝swoole擴充套件

2 解壓unzip swoole src master.zip 3 編譯發現沒有configure 使用phpize 生成 configure 進入到swoole 解壓後的目錄 cd usr local src swoole src master 執行phpize usr local php7 bi...