Workerman開發:如何實作基於HTTP2協定的網路伺服器
HTTP2是HTTP協定的新一代版本,它在效能和安全性方面都有了很大的提升。 Workerman是常用的PHP即時通訊框架,它具有高效能、易擴充和易用等優點。如何實現基於HTTP2協定的Web伺服器呢?本文將從以下幾個面向介紹:
一、理解HTTP2協定的特點
HTTP2協定是HTTP協定的新一代版本,它在效能和安全性方面都有了很大的提升。相對於HTTP1.x協議,它有以下特點:
二、Workerman如何支援HTTP2協定
Workerman是常用的PHP即時通訊框架,它最初設計用於實現基於TCP協定的高效能通信,但是它也支援HTTP協定。 Workerman預設採用HTTP1.x協議,但它也支援HTTP2協定。
實作HTTP2協定的基本條件是要有SSL證書,因為HTTP2協定只支援在加密模式下使用。所以,我們需要在Workerman中設定SSL證書,以支援HTTP2協定。具體設定方法如下:
$context = array( // 这是key, 一般和crt放在一起 'ssl' => array( // 请使用绝对路径 'local_cert' => '/your/path/to/server.crt', // 服务端证书 'local_pk' => '/your/path/to/server.key', // 服务端证书的私钥 'verify_peer' => false, // 是否需要验证客户端证书 ) ); // 初始化一个Worker监听http://0.0.0.0:443 $worker = new Worker("http://0.0.0.0:443", $context); // 开启对HTTP2.0的支持 $worker->transport = 'ssl'; $worker->protocol = "Http2";
三、實作具體的HTTP2協定的Web伺服器
Workerman支援HTTP2協定後,我們就可以實作HTTP2協定的Web伺服器了。具體實作方法很多,這裡我們以實作一個基本的HTTP2協定的Web伺服器為例。
<?php require_once __DIR__ . '/../vendor/autoload.php'; $context = array( 'ssl' => array( 'local_cert' => '/your/path/to/server.crt', 'local_pk' => '/your/path/to/server.key', 'verify_peer' => false, ) ); $worker = new WorkermanWorker('http://0.0.0.0:443', $context); $worker->transport = 'ssl'; $worker->protocol = "Http2"; $worker->onConnect = function($connection) { echo "new connection from ip " . $connection->getRemoteIp() . " "; }; $worker->onMessage = function($connection, $data) { $request_uri = $_SERVER['REQUEST_URI']; $response = "Hello, HTTP2! "; $connection->send($response); }; Worker::runAll();
php http2_server.php start -d
<?php require_once __DIR__ . '/../vendor/autoload.php'; $context = array( 'ssl' => array( 'local_cert' => '/your/path/to/server.crt', 'local_pk' => '/your/path/to/server.key', 'verify_peer' => false, ) ); $worker = new WorkermanWorker('http://0.0.0.0:443', $context); $worker->transport = 'ssl'; $worker->protocol = "Http2"; $worker->onConnect = function($connection) { echo "new connection from ip " . $connection->getRemoteIp() . " "; }; $worker->onMessage = function($connection, $data) { $request_uri = $_SERVER['REQUEST_URI']; $response = "Hello, HTTP2! "; $connection->send($response); }; Worker::runAll();
以上是Workerman開發:如何實作基於HTTP2協定的Web伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!