インターネットの急速な発展に伴い、Web アプリケーションの開発はますます一般的になりました。これらの Web アプリケーションでは、メッセージ プッシュ メカニズムが重要な部分になっています。メッセージ プッシュ メカニズムを使用すると、メッセージをバックエンドからフロントエンドにアクティブにプッシュできるため、Web アプリケーションの対話性がより豊かでリアルタイムかつ効率的になります。
PHP でメッセージ プッシュ メカニズムを実装するには、WebSocket テクノロジを使用する必要があります。 WebSocket は永続的な接続を確立できるため、サーバーはいつでもクライアントにメッセージを送信でき、クライアントもサーバーにメッセージを送信できます。 PHP には、優れた WebSocket ライブラリがいくつか用意されています。今回はPHPを使ってメッセージプッシュ機能を実装する方法を紹介します。
1. Workerman ライブラリを使用してメッセージ プッシュを実装する
Workerman は、PHP 環境で実行される高性能の非同期イベント駆動型フレームワークであり、有名なPHPフレームワークYII。このフレームワークは、PHP ソケット拡張機能を使用して WebSocket のサポートを実装し、これに基づいて TCP/UDP プロトコルを処理する機能を実装します。
次に、Workerman ライブラリを使用してメッセージ プッシュを実装する具体的な手順を示します。
コマンド ラインで使用する次のコマンドは Workerman ライブラリをインストールします。
composer require workerman/workerman
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 が使用されています) を設定します。その後、サーバーの数、名前、接続イベント、シャットダウン イベント、メッセージ イベントを設定します。
大量の接続に対応できるかどうか、リアルタイムメッセージ送受信処理の速度や数はプロセス数に関係するため、起動するワーカープロセスの数を指定する必要があります。 。
WebSocket サーバーを作成した後、コマンド ラインで次のコマンドを使用して WebSocket サーバーを起動する必要があります:
php websocket.php start
その後、WebSocketサーバーが起動します。
WebSocket サーバーが起動したら、メッセージをクライアントにプッシュする必要があります。メッセージをプッシュする方法は次のとおりです。
foreach($ws_worker->connections as $connection) { $connection->send('Welcome!'); }
上記のコードでは、サーバー上のすべての接続を横断し、それらの接続にメッセージを送信します (ここで送信されるメッセージは「ようこそ!」です)。
2. Ratchet ライブラリを使用してメッセージ プッシュを実装する
Ratchet は、PHP を使用して開発された WebSocket ライブラリであり、PHP がリアルタイムの双方向通信を実行できるようにします。 Ratchet は WebSocket サーバーと WebSocket クライアントの実装を提供し、その機能は非常に強力です。
Ratchet ライブラリを使用してメッセージ プッシュを実装する具体的な手順は次のとおりです。
次のコマンドを使用します。 Ratchet ライブラリをインストールするコマンド ライン:
composer require cboden/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() イベントにはエラーメッセージが出力されます。
php websocket.phpその後、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() メソッドを使用します。メッセージをプッシュする方法もライブラリごとに異なります。
以上がPHPを使用してメッセージプッシュ機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。