ホームページ > バックエンド開発 > PHPチュートリアル > PHP はリアルタイム チャット システムのブロードキャスト通知とメッセージ サブスクリプションを開発します

PHP はリアルタイム チャット システムのブロードキャスト通知とメッセージ サブスクリプションを開発します

WBOY
リリース: 2023-08-27 10:44:01
オリジナル
1396 人が閲覧しました

PHP はリアルタイム チャット システムのブロードキャスト通知とメッセージ サブスクリプションを開発します

PHP は、リアルタイム チャット システム用のブロードキャスト通知とメッセージ サブスクリプションを開発します

現代のソーシャル ネットワークやインスタント メッセージング アプリケーションにおいて、リアルタイム チャット システムは間違いなく非常に重要です。関数。ユーザーは、このシステムを通じて他のユーザーとリアルタイムで通信したり、メッセージの送信や受信を行ったり、対応するブロードキャスト通知やメッセージの購読を実行したりできます。この記事では、PHP を使用してリアルタイム チャット システムのブロードキャスト通知およびメッセージ サブスクリプション機能を開発する方法と、対応するコード例を紹介します。

まず、リアルタイムのコミュニケーション効果を確保するために、実現可能な実装方法を検討する必要があります。一般的な実装方法は、永続的な接続チャネルを提供する WebSocket プロトコルを使用することです。これにより、サーバーはメッセージをクライアントにアクティブにプッシュでき、クライアントもサーバーにメッセージを送信できます。 WebSocket プロトコルに基づいて、PHP を使用してリアルタイム チャット システムを開発できます。

次に、PHP を使用してブロードキャスト通知機能を実装する方法を学びましょう。ブロードキャスト通知とは、サーバーがすべてのクライアントにメッセージをブロードキャストまたはプッシュする機能を指します。 PHP では、Ratchet ライブラリを使用して WebSocket プロトコルを操作できます。 Ratchet は、WebSocket サーバーと簡単に対話できる PHP 実装の WebSocket ライブラリです。

まず、次のコマンドを使用して、composer を使用してインストールできる Ratchet ライブラリをインストールする必要があります:

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

次に、WebSocket サーバーとハンドルを実装するための 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 client connected: " . $conn->resourceId . PHP_EOL;
    }
    
    public function onMessage(ConnectionInterface $from, $msg)
    {
        foreach ($this->clients as $client) {
            $client->send($msg);
        }
    }
    
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Client disconnected: " . $conn->resourceId . PHP_EOL;
    }
    
    public function onError(ConnectionInterface $conn, Exception $e)
    {
        echo "An error has occurred: " . $e->getMessage() . PHP_EOL;
        $conn->close();
    }
}

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

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

上記のコードは、Chat クラスを作成し、MessageComponentInterface インターフェイスを実装し、関連メソッドを書き換えます。 onOpen メソッドはクライアントの接続時に呼び出され、onMessage メソッドはクライアント メッセージの受信時に呼び出され、onClose メソッドはクライアントの切断時に呼び出され、onError メソッドはエラーの発生時に呼び出されます。

onMessage メソッドでは、すべてのクライアントを走査し、受信したメッセージを各クライアントに送信することにより、ブロードキャスト通知機能を実装します。

上記のコードを実行することにより、ポート 8080 をリッスンして接続を待機できる WebSocket サーバーを作成します。新しいクライアントが接続すると、サーバーは対応する情報を出力し、クライアントが切断すると、対応する情報も出力します。

次に、PHP を使用してメッセージ サブスクリプション機能を実装する方法を見てみましょう。メッセージ サブスクリプションとは、クライアントが特定のチャネルまたはトピックにサブスクライブすることを指します。チャネルに新しいメッセージがある場合、クライアントはリアルタイムでメッセージを受信できます。メッセージ サブスクリプション機能を実装するには、Redis をメッセージ キューとして使用し、メッセージを保存およびプッシュします。

まず、Redis をインストールして構成する必要があります。インストールと構成については、Redis の公式ドキュメントを参照してください。

次に、メッセージ サブスクリプション機能を実装するには、Redis 接続ライブラリを使用する必要があります。一般的な PHP Redis クラス ライブラリである Predis ライブラリを使用できます。次のコマンドを使用して、Predis ライブラリをインストールします。

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

クライアント接続をリッスンし、メッセージ サブスクリプション機能を処理するには、WebSocket サーバーがまだ必要です。コード例は次のとおりです:

require 'vendor/autoload.php';

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

class Chat implements MessageComponentInterface
{
    protected $clients;
    protected $redis;
    
    public function __construct()
    {
        $this->clients = new SplObjectStorage();
        $this->redis = new Client();
    }
    
    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New client connected: " . $conn->resourceId . PHP_EOL;
    }
    
    public function onMessage(ConnectionInterface $from, $msg)
    {
        $this->redis->publish('chat', $msg);
    }
    
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Client disconnected: " . $conn->resourceId . PHP_EOL;
    }
    
    public function onError(ConnectionInterface $conn, Exception $e)
    {
        echo "An error has occurred: " . $e->getMessage() . PHP_EOL;
        $conn->close();
    }
}

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

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

上記のコードはブロードキャスト通知のコードに似ていますが、唯一の違いは、onMessage メソッドで、Predis ライブラリの Publishing メソッドを使用して受信したメッセージをプッシュすることです。 Redis の「チャット」チャネルに接続します。このようにして、メッセージ購読機能を実装します。

次に、プッシュされたメッセージを受信するクライアントが必要です。 JavaScript を使用して、単純なクライアント ページを作成できます。コード例は次のとおりです:

<!DOCTYPE html>
<html>
<head>
    <title>Chat Client</title>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script>
        var ws = new WebSocket("ws://localhost:8080");

        ws.onmessage = function(event) {
            var message = event.data;
            $("#messages").append("<p>" + message + "</p>");
        };
    </script>
</head>
<body>
    <div id="messages"></div>
</body>
</html>
ログイン後にコピー

上記のコードは、WebSocket オブジェクトを作成し、WebSocket サーバーに接続し、メッセージが送信されたときにページにメッセージを表示します。受け取った。 。

上記のコードを実行することで、ブロードキャスト通知とメッセージ購読機能を備えたシンプルなリアルタイム チャット システムを実装しました。サーバーは接続されているすべてのクライアントにリアルタイムでメッセージをプッシュでき、クライアントはリアルタイムでメッセージを受信できます。

要約すると、この記事では、PHP を使用してリアルタイム チャット システムのブロードキャスト通知およびメッセージ サブスクリプション機能を開発する方法を紹介します。 Ratchet ライブラリを使用して WebSocket サーバーを実装すると、ブロードキャスト通知とメッセージ サブスクリプション機能を簡単に処理できます。同時に、Redis をメッセージ キューとして使用することで、メッセージの保存とプッシュが可能になります。この方法は、ソーシャル ネットワーク、インスタント メッセージング、その他のシステムで広く使用され、ユーザーに優れたリアルタイム コミュニケーション エクスペリエンスを提供できます。

以上がPHP はリアルタイム チャット システムのブロードキャスト通知とメッセージ サブスクリプションを開発しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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