ホームページ >バックエンド開発 >PHPの問題 >PHPを使用してメッセージプッシュ機能を実装する方法

PHPを使用してメッセージプッシュ機能を実装する方法

PHPz
PHPzオリジナル
2023-04-04 10:43:062268ブラウズ

インターネットの急速な発展に伴い、Web アプリケーションの開発はますます一般的になりました。これらの Web アプリケーションでは、メッセージ プッシュ メカニズムが重要な部分になっています。メッセージ プッシュ メカニズムを使用すると、メッセージをバックエンドからフロントエンドにアクティブにプッシュできるため、Web アプリケーションの対話性がより豊かでリアルタイムかつ効率的になります。

PHP でメッセージ プッシュ メカニズムを実装するには、WebSocket テクノロジを使用する必要があります。 WebSocket は永続的な接続を確立できるため、サーバーはいつでもクライアントにメッセージを送信でき、クライアントもサーバーにメッセージを送信できます。 PHP には、優れた WebSocket ライブラリがいくつか用意されています。今回はPHPを使ってメッセージプッシュ機能を実装する方法を紹介します。

1. Workerman ライブラリを使用してメッセージ プッシュを実装する

Workerman は、PHP 環境で実行される高性能の非同期イベント駆動型フレームワークであり、有名なPHPフレームワークYII。このフレームワークは、PHP ソケット拡張機能を使用して WebSocket のサポートを実装し、これに基づいて TCP/UDP プロトコルを処理する機能を実装します。

次に、Workerman ライブラリを使用してメッセージ プッシュを実装する具体的な手順を示します。

  1. Workerman ライブラリをインストールする

コマンド ラインで使用する次のコマンドは Workerman ライブラリをインストールします。

composer require workerman/workerman
  1. WebSocket サーバーの作成

WebSocket サーバーを作成する前に、Workerman 実行環境に自動読み込み機能を導入する必要があります。 。自動ローディング機能の導入方法は以下のとおりです。

require_once __DIR__ . '/vendor/autoload.php';

自動ローディング機能の導入後、WebSocketサーバーをインスタンス化できます。コードは次のとおりです。

use Workerman\Worker;
use Workerman\Lib\Timer;

$ws_worker = new Worker("websocket://0.0.0.0:2346");

//配置参数
$ws_worker->count = 4;
$ws_worker->name = 'WebSocket';

//连接事件
$ws_worker->onConnect = function($connection)
{
   echo "New connection\n";
};

//关闭事件
$ws_worker->onClose = function($connection)
{
   echo "Connection closed\n";
};

//消息事件
$ws_worker->onMessage = function($connection, $data)
{
    echo "Received: ".$data."\n";
};

Worker::runAll();

上記のコードでは、WebSocket サーバーをインスタンス化し、リスニング アドレスとポート (ここではポート 2346 が使用されています) を設定します。その後、サーバーの数、名前、接続イベント、シャットダウン イベント、メッセージ イベントを設定します。

大量の接続に対応できるかどうか、リアルタイムメッセージ送受信処理の速度や数はプロセス数に関係するため、起動するワーカープロセスの数を指定する必要があります。 。

  1. WebSocket サーバーの起動

WebSocket サーバーを作成した後、コマンド ラインで次のコマンドを使用して WebSocket サーバーを起動する必要があります:

php websocket.php start

その後、WebSocketサーバーが起動します。

  1. クライアントにメッセージをプッシュする

WebSocket サーバーが起動したら、メッセージをクライアントにプッシュする必要があります。メッセージをプッシュする方法は次のとおりです。

foreach($ws_worker->connections as $connection)
{
    $connection->send('Welcome!');
}

上記のコードでは、サーバー上のすべての接続を横断し、それらの接続にメッセージを送信します (ここで送信されるメッセージは「ようこそ!」です)。

2. Ratchet ライブラリを使用してメッセージ プッシュを実装する

Ratchet は、PHP を使用して開発された WebSocket ライブラリであり、PHP がリアルタイムの双方向通信を実行できるようにします。 Ratchet は WebSocket サーバーと WebSocket クライアントの実装を提供し、その機能は非常に強力です。

Ratchet ライブラリを使用してメッセージ プッシュを実装する具体的な手順は次のとおりです。

  1. Ratchet ライブラリのインストール

次のコマンドを使用します。 Ratchet ライブラリをインストールするコマンド ライン:

composer require cboden/ratchet
  1. WebSocket サーバーの作成
#Workerman ライブラリを使用してメッセージ プッシュを実装するのと同様に、WebSocket サーバーも作成する必要があります。まず、Ratchet ライブラリを使用する場合。コードは次のとおりです。

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

require dirname(__DIR__) . '/vendor/autoload.php';

class Pusher implements MessageComponentInterface
{
    private $clients;
 
    public function __construct()
    {
        $this->clients = new \SplObjectStorage;
    }
 
    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})\n";
    }
 
    public function onMessage(ConnectionInterface $from, $msg)
    {
        echo "New message received! ({$from->resourceId})\n";
        $numRecv = count($this->clients) - 1;
        foreach ($this->clients as $client) 
        {
            if ($from !== $client)
            {
                $client->send($msg);
            }
        }
    }
 
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected\n";
    }
 
    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}
 
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Pusher()
        )
    ),
    19920//端口号
);
$server->run();
上記のコードでは、WebSocket サーバーを実装し、onOpen() イベントでクライアントに接続ステータスを出力し、onMessage() イベントでメッセージ プッシュを処理し、onClose を処理します。 () イベント onError() イベントにはコネクション切断ステータスが出力され、onError() イベントにはエラーメッセージが出力されます。

    WebSocket サーバーの起動
WebSocket サーバーを作成した後、コマンド ラインで次のコマンドを使用して WebSocket サーバーを起動する必要があります:

php websocket.php
その後、WebSocketサーバーが起動します。

    クライアントにメッセージをプッシュする
WebSocket サーバーが起動したら、メッセージをクライアントにプッシュする必要があります。メッセージをプッシュする方法は次のとおりです。

$this->clients->remove($conn);
foreach ($this->clients as $client) 
{
    if ($from !== $client)
    {
        $msg = $from->resourceId.":".$msg;
        $client->send($msg);
    }
}
上記のコードでは、サーバー上のすべての接続を横断し、それらの接続にメッセージを送信します (ここで送信されるメッセージは「ようこそ!」です)。

Ratchet ライブラリのプッシュ メッセージは Workerman ライブラリのプッシュ メッセージとは異なることに注意してください。具体的には、Workerman ライブラリは

$connection->send() メソッドを使用し、Ratchet ライブラリは $client->send() メソッドを使用します。メッセージをプッシュする方法もライブラリごとに異なります。

3. 概要

上記は、PHP を使用してメッセージ プッシュ メカニズムを実装する具体的な方法です。これらの方法を通じて、メッセージをバックエンドからフロントエンドにプロアクティブにプッシュできるため、Web アプリケーションとのリアルタイムで効率的かつ充実した対話が実現します。これらのメソッドを使用する場合は、各 WebSocket ライブラリの違いや特性に注意し、柔軟に適用してより良いプッシュ メッセージを送信する必要があります。

以上がPHPを使用してメッセージプッシュ機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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