PHP WebSocket開発例:具体的な機能の実装例

WBOY
リリース: 2023-09-12 13:30:01
オリジナル
1348 人が閲覧しました

PHP WebSocket开发实例:如何实现特定功能的实践案例

PHP WebSocket 開発例: 特定の機能を実装する具体的な事例

近年、Web アプリケーションの複雑化に伴い、従来の HTTP プロトコルの利用が減少しています。リアルタイム通信に効果的 いくつかの欠点が示されました。リアルタイム通信のニーズを満たすために、WebSocket が登場しました。

WebSocket は、単一の TCP 接続を介した全二重通信用のプロトコルであり、クライアントがリクエストを送信しなくても、サーバーがアクティブにデータをクライアントにプッシュできるようになります。これにより、リアルタイム通信、オンライン ゲーム、リアルタイム監視、その他のアプリケーションがより便利かつ効率的になります。

この記事では、PHP をベースにした WebSocket の開発例を紹介し、具体的な機能を実装する具体的なプロセスを学びます。

オンライン チャット ルーム アプリケーションを開発するとします。ユーザーは Web ページ上でメッセージを送信でき、他のユーザーはすぐに受信して返信できます。この機能には次の重要なポイントが含まれます。

  1. WebSocket サーバーの構築
  2. クライアントとサーバー間の通信
  3. メッセージの送受信
  4. #ユーザー リストのメンテナンス
まず、WebSocket サーバーを構築する必要があります。 PHP では、Ratchet ライブラリを使用して WebSocket 関数を実装できます。 Composer を介して Ratchet をインストールします:

composer require cboden/ratchet
ログイン後にコピー

次に、server.php ファイルを作成し、次のコードを記述します:

<?php

require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class Chat implements MessageComponentInterface {
    protected $clients;
    
    public function __construct() {
        $this->clients = new SplObjectStorage;
    }
    
    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }
    
    public function onMessage(ConnectionInterface $from, $msg) {
        // 处理消息,比如将消息发送给其他在线用户
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }
    
    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }
    
    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "An error has occurred: {$e->getMessage()}
";
        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();
ログイン後にコピー

このコードは、Chat クラスを作成し、MessageComponentInterface インターフェイスを実装します。さまざまなイベントを定義できます。ハンドラー関数。次に、他のオンライン ユーザーにメッセージを送信する必要があります。ここでは、foreach ループを使用して、接続されているすべてのクライアントを走査し、それが送信元クライアント自体であるかどうかを判断します。

コマンドラインで

php server.php を実行すると、WebSocket サーバーが起動します。

次に、Web ページ上でサーバーとの通信を実装する必要があります。 Web ページでは、JavaScript を使用して WebSocket オブジェクトを作成し、バックエンドと通信できます。

<script>
var conn = new WebSocket('ws://localhost:8080');

conn.onopen = function() {
    console.log('Connected!');
}

conn.onmessage = function(e) {
    console.log('Received: ' + e.data);
}

function sendMessage() {
    var message = document.getElementById('input').value;
    conn.send(message);
}
</script>
ログイン後にコピー

上記のコードは、WebSocket オブジェクトを作成し、onopen および onmessage イベントのハンドラー関数を定義します。入力ボックスにメッセージを入力した後、送信ボタンをクリックして sendMessage 関数を呼び出し、メッセージをサーバーに送信します。

最後に、オンライン ユーザーを表示し、ユーザー リストを更新するためにユーザー リストを維持する必要があります。対応するロジックをサーバー側の onOpen および onClose イベントに追加できます。

public function onOpen(ConnectionInterface $conn) {
    $this->clients->attach($conn);
    echo "New connection! ({$conn->resourceId})
";
    
    // 将新用户加入用户列表,并广播给其他在线用户
    foreach ($this->clients as $client) {
        $client->send('New user has joined');
    }
}

public function onClose(ConnectionInterface $conn) {
    $this->clients->detach($conn);
    echo "Connection {$conn->resourceId} has disconnected
";
    
    // 将离线用户从用户列表中删除,并广播给其他在线用户
    foreach ($this->clients as $client) {
        $client->send('A user has left');
    }
}
ログイン後にコピー

上記のコードを通じて、新しいユーザーが参加し、ユーザーがオフラインになったときに、対応するメッセージを他のオンライン ユーザーにブロードキャストしてユーザーを更新します。リスト。

要約すると、オンライン チャット ルームの例を通じて、PHP WebSocket を使用して特定の機能の開発プロセスを実装する方法を学びました。もちろんWebSocketはプッシュ通知やオンラインゲーム、リアルタイム監視など幅広い分野で活用できます。この記事の実践例があなたの学習と能力開発に役立つことを願っています。

以上がPHP WebSocket開発例:具体的な機能の実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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