Workerman を使用してリアルタイム メッセージ プッシュとチャット記録ストレージを実装する方法
インターネットの急速な発展に伴い、リアルタイム メッセージ プッシュとチャット機能が普及しました。多くのアプリケーションの基本要件 機能。 Workerman は、高性能 PHP ソケット サービス フレームワークとして、リアルタイム メッセージ プッシュとチャット レコード ストレージを実装するためのシンプルかつ効果的な方法を提供します。この記事では、workerman を介してこれらの機能を実装する方法を紹介します。
まず第一に、私たちの目標はリアルタイム メッセージ プッシュ システムとチャット記録ストレージ システムを実装することであることを明確にする必要があります。リアルタイム メッセージ プッシュ システムの目標は、ユーザーがメッセージを送信した後、特定のユーザーにリアルタイムでメッセージをプッシュすることですが、チャット レコード ストレージ システムの目標は、将来の参照のためにユーザーのチャット レコードを永続的に保存することです。
次に、ワーカー環境をセットアップする必要があります。まず、workerman の依存関係をインストールする必要があります。これは、composer を通じて実行できます。コマンド ラインで次のコマンドを実行します。
composer require workerman/workerman
インストールが完了したら、たとえば start.php
という名前の Workerman 起動ファイルを作成できます。このファイルでは、Workerman の Autoloader クラスと Worker クラスを導入し、Worker オブジェクトを作成する必要があります。サンプル コードは次のとおりです。
<?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; $worker = new Worker(); // 设置监听的端口 $worker->listen('websocket://0.0.0.0:2346'); Worker::runAll();
この例では、Worker オブジェクトを作成し、リスニング ポートを 2346
に設定します。 WebSocket プロトコルは双方向のリアルタイム通信を実現できるため、ここでは通信に WebSocket プロトコルを使用します。もちろん、HTTP 長時間接続や TCP ソケットなどの他のプロトコルを選択することもできます。
次に、特定のビジネス ロジック コードを記述する必要があります。まず、ユーザーの接続と切断を処理する必要があります。これは、Worker オブジェクトの onConnect メソッドと onClose メソッドを使用して実現できます。サンプル コードは次のとおりです:
$worker->onConnect = function($connection) { // 当用户连接时执行的逻辑,比如记录用户信息等 }; $worker->onClose = function($connection) { // 当用户断开时执行的逻辑,比如更新用户在线状态等 };
この例では、ユーザーが接続すると onConnect メソッドが呼び出され、ユーザーが切断すると onClose メソッドが呼び出されます。ここで、ユーザー情報の記録やユーザーのオンライン ステータスの更新などのロジックを実行できます。
次に、ユーザー メッセージのプッシュを処理する必要があります。これは、Worker オブジェクトの onMessage メソッドを使用して実現できます。サンプル コードは次のとおりです。
$worker->onMessage = function($connection, $data) { // 当收到用户的消息时执行的逻辑,比如向特定用户推送消息等 };
この例では、ユーザーからのメッセージを受信すると、onMessage メソッドが呼び出されます。ここで、特定のユーザーにメッセージをプッシュするなどのロジックを実行できます。
同時に、チャット記録の保存機能を実現するには、データベースを使用してユーザーのチャット記録を保存する必要があります。 MySQL またはその他のデータベースを選択できます。ユーザーからメッセージを受信した後、メッセージをデータベースに保存します。サンプル コードは次のとおりです。
$worker->onMessage = function($connection, $data) { // 解析用户的消息 $message = json_decode($data, true); // 将消息存储到数据库中 // ... // 向特定用户推送消息 // ... };
この例では、json_decode 関数を使用してユーザーのメッセージを配列に解析し、そのメッセージをデータベースに保存します。ここでの特定の実装は、選択したデータベースに応じてコーディングする必要があります。
特定のユーザーにメッセージをプッシュする場合、workerman のゲートウェイ実装を使用できます。ゲートウェイは、特定の接続またはグループにメッセージをプッシュできます。サンプル コードは次のとおりです。
$worker->onMessage = function($connection, $data) { // 解析用户的消息 $message = json_decode($data, true); // 向特定用户推送消息 $uid = $message['uid']; Gateway::sendToUid($uid, $data); };
この例では、Gateway::sendToUid メソッドを使用して、特定のユーザーにメッセージをプッシュします。ここでの $uid はユーザーの一意の識別子であり、ユーザーが接続するときに必要に応じて生成できます。
最後に、フロントエンドがサーバーと通信できるようにするには、フロントエンド コードを記述する必要があります。 WebSocket API を使用してサーバーと通信できます。サンプル コードは次のとおりです。
var socket = new WebSocket('ws://localhost:2346'); socket.onopen = function() { // 连接成功时执行的逻辑 }; socket.onmessage = function(event) { var data = JSON.parse(event.data); // 收到消息时执行的逻辑 }; socket.onclose = function() { // 连接断开时执行的逻辑 }; // 发送消息 function sendMsg(message) { socket.send(JSON.stringify(message)); }
この例では、WebSocket API を使用して WebSocket オブジェクトを作成し、接続アドレスとポートを指定します。その後、onopen、onmessage、および onclose イベントを使用して、接続の成功、メッセージの受信、および接続の切断を処理できます。同時に、socket.send メソッドを通じてメッセージをサーバーに送信できます。
要約すると、Workerman を通じて、リアルタイム メッセージ プッシュとチャット記録ストレージの機能を簡単に実装できます。これは単なる単純な例であり、実際の実装では、ユーザー ID 認証、グループ管理、メッセージ プッシュ戦略など、より詳細な検討が必要になる場合があることに注意してください。しかし、Workerman が提供する高パフォーマンスな Socket サービス フレームワークを使用することで、これらの機能を簡単に実装し、ニーズに応じて柔軟に拡張および最適化することができます。
以上がWorkerman を介してリアルタイムのメッセージ プッシュとチャット レコード ストレージを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。