ホームページ  >  記事  >  PHPフレームワーク  >  Workerman 開発: HTTP2 プロトコルに基づいた Web サーバーを実装する方法

Workerman 開発: HTTP2 プロトコルに基づいた Web サーバーを実装する方法

王林
王林オリジナル
2023-11-07 11:25:57981ブラウズ

Workerman 開発: HTTP2 プロトコルに基づいた Web サーバーを実装する方法

Workerman 開発: HTTP2 プロトコルに基づいて Web サーバーを実装する方法

HTTP2 は、パフォーマンスとパフォーマンスが大幅に向上した HTTP プロトコルの新世代バージョンです。セキュリティの向上。 Workerman は、一般的に使用されている PHP リアルタイム通信フレームワークであり、高性能、拡張が容易、使いやすいという利点があります。 HTTP2 プロトコルに基づいて Web サーバーを実装するにはどうすればよいですか?この記事では、次の点について説明します。

  1. HTTP2 プロトコルの特性を理解する
  2. Workerman が HTTP2 プロトコルをサポートする方法
  3. 特定の HTTP2 プロトコルを実装する Web サーバー
  4. コード例

1. HTTP2 プロトコルの特性を理解する

HTTP2 プロトコルは、HTTP プロトコルの新世代バージョンです。パフォーマンスとセキュリティの向上。 HTTP1.x プロトコルと比較すると、次のような特徴があります。

  1. バイナリ プロトコル: HTTP2 はバイナリ プロトコルを使用しますが、HTTP1.x はテキスト プロトコルを使用します。バイナリ プロトコルはデータの解析と転送を高速化します。
  2. 多重化: HTTP2 は、同じ接続上で複数のリクエストと応答を並行して送信できます。これにより、接続の確立と待ち時間が短縮され、Web サイト全体の応答性が向上します。
  3. ヘッダー圧縮: HTTP2 は、HPACK アルゴリズムを使用してリクエストと応答のヘッダーを圧縮し、データ送信のサイズを削減し、パフォーマンスを向上させます。
  4. サーバー プッシュ: HTTP2 は、Web ページ関連のリソース ファイルをクライアントにアクティブにプッシュできるため、クライアント リクエストの数が減り、Web ページを開く速度が向上します。

2. Workerman による HTTP2 プロトコルのサポート方法

Workerman は、一般的に使用される PHP リアルタイム通信フレームワークであり、元々は TCP プロトコルに基づいた高性能通信を実装するために設計されました。 、ただし、HTTP プロトコルもサポートします。 Workerman はデフォルトで HTTP1.x プロトコルを使用しますが、HTTP2 プロトコルもサポートします。

HTTP2 プロトコルは暗号化モードでの使用のみをサポートしているため、HTTP2 プロトコルを実装するための基本条件は SSL 証明書を持っていることです。したがって、HTTP2 プロトコルをサポートするように Workerman で SSL 証明書を構成する必要があります。具体的な設定方法は次のとおりです:

$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";

3. 特定の HTTP2 プロトコル Web サーバーの実装

Workerman が HTTP2 プロトコルをサポートしたら、HTTP2 プロトコル Web サーバーを実装できます。具体的な実装方法は数多くありますが、ここでは基本的な HTTP2 プロトコルの Web サーバーの実装を例に挙げます。

  1. http2_server.php という名前の PHP ファイルを作成し、次のコードを入力します:
<?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();
  1. Web サーバーを開始します

実行 次のコマンドにより Web サーバーが起動します:

php http2_server.php start -d

この時点で、ブラウザを使用して https://localhost にアクセスすると、「Hello, HTTP2!」という内容のページが表示されるはずです。

4. コード例

コードは 3 番目のパートで示されており、完全なコードはここで再度示されます。 /your/path/to/server.crt と /your/path/to/server.key を独自の SSL 証明書パスに置き換えるだけです。

<?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();

概要

HTTP2 プロトコルは HTTP プロトコルの新世代バージョンで、HTTP1.x プロトコルと比較してパフォーマンスとセキュリティの面で大幅に向上しています。 Workerman は、HTTP2 プロトコルをサポートする、一般的に使用される PHP リアルタイム通信フレームワークです。この記事では、Workerman を使用して、SSL 証明書の構成や特定の Web サーバーの実装など、HTTP2 プロトコルに基づく Web サーバーを実装する方法について説明します。

以上がWorkerman 開発: HTTP2 プロトコルに基づいた Web サーバーを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。