ホームページ > 記事 > PHPフレームワーク > Workerman ネットワーク プログラミングの実践: 高性能インスタント メッセージング システムを作成する
Workerman ネットワーク プログラミングの実践: 高性能インスタント メッセージング システムの作成
はじめに:
インターネットの急速な発展に伴い、インスタント メッセージング システムはユーザーの注目をますます集めています。 QQ、WeChat などの従来のインスタント メッセージング システムは、ユーザーの数が多く、メッセージの同時並行性が高い場合、パフォーマンスのボトルネックに直面することがよくあります。この問題を解決するために、オープンソース プロジェクト Workerman が誕生しました。この記事では、Workerman を使用して高性能インスタント メッセージング システムを構築する方法を紹介します。
composer require workerman/workerman
インストールが完了すると、Workerman のすべての機能を使用できるようになります。
use WorkermanWorker; // 创建一个Worker监听端口 $tcp_worker = new Worker("tcp://0.0.0.0:1234"); // 当客户端连接时的回调函数 $tcp_worker->onConnect = function ($connection) { $connection->send("Welcome to the chat room! "); }; // 当接收到客户端消息时的回调函数 $tcp_worker->onMessage = function ($connection, $data) { // 处理接收到的消息 echo "Received message: " . $data . " "; $connection->send("You said: " . $data . " "); }; // 启动Worker Worker::runAll();
上記のコードを使用して、ポート 1234 でリッスンする TCP ワーカーを作成します。クライアントがサーバーに接続すると、サーバーはウェルカム メッセージを送信します。クライアントがメッセージを送信すると、サーバーはメッセージを変更せずに返します。 Telnet などのツールを使用して、テストのためにサーバーに接続できます。
use WorkermanWorker; use WorkermanProtocolsWebsocket; // 创建一个WebSocket Worker监听端口 $websocket_worker = new Worker("websocket://0.0.0.0:1234"); // 设置协议处理类 $websocket_worker->onWebSocketConnect = function ($connection, $http_header) { // 处理握手请求 Websocket::dealHandshake($connection, $http_header); // 发送欢迎消息 $connection->send("Welcome to the chat room! "); }; // 当接收到客户端消息时的回调函数 $websocket_worker->onMessage = function ($connection, $data) { // 处理接收到的消息 echo "Received message: " . $data . " "; $connection->send("You said: " . $data . " "); }; // 启动Worker Worker::runAll();
上記のコードを使用して、ポート 1234 でリッスンする WebSocket ワーカーを作成します。クライアントがサーバーに接続すると、サーバーはウェルカム メッセージを送信します。クライアントがメッセージを送信すると、サーバーはメッセージを変更せずに返します。
まず、指定されたポートでリッスンする WebSocket サーバーを作成します。ユーザーがサーバーに接続すると、サーバーはその接続をユーザー リストに追加し、ユーザーがチャット ルームに入ったことを示すメッセージをブロードキャストします。ユーザーがメッセージを送信すると、サーバーはすべてのオンライン ユーザーにメッセージをブロードキャストします。ユーザーが切断すると、サーバーはユーザーをユーザー リストから削除し、ユーザーがチャット ルームから退出したというメッセージをブロードキャストします。
以下は簡単なコード例です:
use WorkermanWorker; use WorkermanProtocolsWebsocket; // 创建一个WebSocket Worker监听端口 $websocket_worker = new Worker("websocket://0.0.0.0:1234"); // 设置协议处理类 $websocket_worker->onWebSocketConnect = function ($connection, $http_header) { // 处理握手请求 Websocket::dealHandshake($connection, $http_header); // 将连接添加到用户列表中 global $user_list; $user_list[$connection->id] = $connection; // 广播用户进入聊天室的消息 broadcastMessage("User #$connection->id entered the chat room. "); }; // 当接收到客户端消息时的回调函数 $websocket_worker->onMessage = function ($connection, $data) { // 处理接收到的消息 broadcastMessage("User #$connection->id: $data"); }; // 当用户断开连接时的回调函数 $websocket_worker->onClose = function ($connection) { // 将连接从用户列表中移除 global $user_list; unset($user_list[$connection->id]); // 广播用户离开聊天室的消息 broadcastMessage("User #$connection->id left the chat room."); }; // 启动Worker Worker::runAll(); // 广播消息给所有在线用户 function broadcastMessage($message) { global $user_list; foreach ($user_list as $connection) { $connection->send($message); } }
上記のコードを通じて、簡単なインスタント メッセージング システムを実装しました。新しいユーザーがチャット ルームに入室するか、メッセージを送信するか、チャット ルームから退出するたびに、サーバーは対応するメッセージをすべてのオンライン ユーザーにブロードキャストします。
結論:
この記事では、Workerman フレームワークを使用し、簡単なサンプル コードを通じて高性能インスタント メッセージング システムを構築する方法を示します。 Workerman の非同期ノンブロッキング操作モードと高い同時実行性のサポートにより、多数のユーザーのプレッシャーに簡単に対処できます。この記事の紹介を通じて、読者の皆様が Workerman について理解を深め、実際のプロジェクトに適用できるようになれば幸いです。
以上がWorkerman ネットワーク プログラミングの実践: 高性能インスタント メッセージング システムを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。