ホームページ > バックエンド開発 > PHPチュートリアル > `socket_*` 関数を使用して PHP で WebSocket サーバーを構築する方法

`socket_*` 関数を使用して PHP で WebSocket サーバーを構築する方法

Susan Sarandon
リリース: 2024-12-28 05:28:10
オリジナル
290 人が閲覧しました

How to Build a WebSocket Server in PHP Using `socket_*` Functions?

PHP で WebSocket サーバーを作成する方法

WebSocket は、Web クライアントと Web サーバー間の全二重通信を可能にするテクノロジーです。これによりリアルタイムのデータ転送が可能になり、オンライン ゲーム、インスタント メッセージング、金融データ ストリーミングなどのアプリケーションに最適です。

古いコード

質問で言及されている phpwebsockets ライブラリは確かに古いため、最新の WebSocket プロトコルをサポートしていません。さらに、更新が意図したとおりに動作しない可能性があります。

WebSocket サーバーの作成

  1. ソケットの作成:socket_create() 関数を使用してマスター ソケットを作成します。
  2. ソケット バインディング: ソケットを特定の IP アドレスとポートを使用して、socket_bind().
  3. ソケット リスニング:socket_listen() を使用して受信接続をリッスンするようにソケットを設定します。
  4. 接続の受け入れ:socket_accept() を使用して受信接続を受け入れ、新しいクライアントを作成しますソケット.

ハンドシェイク手順

  1. リクエストの受信:socket_recv().
  2. ヘッダーの解析: ハンドシェイク要求を解析します。 Sec-WebSocket-Key などの必要なヘッダーを取得します。
  3. 受け入れキーの生成: 提供された Sec-WebSocket-Key に基づいて受け入れキーを計算します。
  4. 応答の送信: 計算された承認を含むハンドシェイク応答をクライアントに送信します。 key.
メッセージの処理

  1. データの受信: クライアントからメッセージを受信するには、socket_recv() を使用します。
  2. データのデコード: 受信したメッセージが、 WebSocket フレーミング プロトコル。
  3. リクエストの処理: クライアントのリクエストを処理し、適切な応答を送信します。
クライアント/サーバー インタラクション

  1. クライアント接続: クライアント側では、次を使用します。 WebSocket サーバーへの接続を確立するための JavaScript の WebSocket オブジェクト。
  2. データの送信: send() を使用して、クライアントからサーバーにデータを送信します。
  3. データの受信: から受信したメッセージを処理するために、オープン、エラー、メッセージのイベント リスナーを設定します。
実装例

次に、単純な WebSocket サーバーの PHP コード スニペットの例を示します。

<?php
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($master, 'localhost', 12345);
socket_listen($master, 20);

$sockets = array($master);
$users = array();
$debug = false;

while (true) {
    $changed = $sockets;
    socket_select($changed, $write = NULL, $except = NULL, NULL);

    foreach ($changed as $socket) {
        if ($socket == $master) {
            $client = socket_accept($master);
            if ($client < 0) {
                console("socket_accept() failed");
                continue;
            } else {
                connect($client);
            }
        } else {
            $bytes = @socket_recv($socket, $buffer, 2048, 0);
            if ($bytes == 0) {
                disconnect($socket);
            } else {
                $user = getuserbysocket($socket);
                if (!$user->handshake) {
                    dohandshake($user, $buffer);
                } else {
                    process($user, $buffer);
                }
            }
        }
    }
}
ログイン後にコピー
このコード スケルトンは、上で説明した手順を示しています。これには、マスター ソケットの作成とリッスン、受信接続の受け入れ、WebSocket ハンドシェイクの実行、クライアント メッセージの処理が含まれます。完全なスクリプトには、connect()、disconnect()、process() など、前に説明した残りの関数を追加する必要があります。

以上が`socket_*` 関数を使用して PHP で WebSocket サーバーを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート