ホームページ  >  記事  >  PHPフレームワーク  >  Workerman ネットワーク プログラミングの実践: 高性能インスタント メッセージング システムを作成する

Workerman ネットワーク プログラミングの実践: 高性能インスタント メッセージング システムを作成する

王林
王林オリジナル
2023-08-05 13:29:28725ブラウズ

Workerman ネットワーク プログラミングの実践: 高性能インスタント メッセージング システムの作成

はじめに:
インターネットの急速な発展に伴い、インスタント メッセージング システムはユーザーの注目をますます集めています。 QQ、WeChat などの従来のインスタント メッセージング システムは、ユーザーの数が多く、メッセージの同時並行性が高い場合、パフォーマンスのボトルネックに直面することがよくあります。この問題を解決するために、オープンソース プロジェクト Workerman が誕生しました。この記事では、Workerman を使用して高性能インスタント メッセージング システムを構築する方法を紹介します。

  1. Workerman の紹介
    Workerman は、PHP に基づいて開発された高性能ネットワーク通信フレームワークです。 Apache、Nginx などの従来の PHP 動作モードと比較して、Workerman は完全に非同期でノンブロッキングの動作モードを採用しており、ネットワーク通信の効率が大幅に向上します。同時に、Workerman は TCP、UDP などの複数のプロトコルをサポートしているため、さまざまなニーズに応じて柔軟に選択できます。さらに、Workerman は高い同時実行性の優れたサポートも備えており、多数のユーザーのプレッシャーに簡単に対処できます。
  2. 準備
    インスタント メッセージング システムの開発を開始するには、まず Workerman をインストールする必要があります。次のコマンドでインストールできます:
composer require workerman/workerman

インストールが完了すると、Workerman のすべての機能を使用できるようになります。

  1. TCP サーバーの作成
    最初に、指定されたポートでリッスンする単純な TCP サーバーを作成します。ユーザーがサーバーに接続すると、サーバーはウェルカム メッセージを返し、ユーザーが送信したメッセージを受信します。以下は簡単なコード例です:
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 などのツールを使用して、テストのためにサーバーに接続できます。

  1. WebSocket サーバーの作成
    WebSocket は、クライアントとサーバーの間に永続的な接続を確立できる全二重通信プロトコルです。 Workerman は WebSocket プロトコルをサポートしており、Workerman を使用して 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);
    // 发送欢迎消息
    $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 ワーカーを作成します。クライアントがサーバーに接続すると、サーバーはウェルカム メッセージを送信します。クライアントがメッセージを送信すると、サーバーはメッセージを変更せずに返します。

  1. インスタント メッセージング システムの実装
    上記の基盤を使用して、より完全なインスタント メッセージング システムを実装し続けることができます。ここでは開発に 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 サイトの他の関連記事を参照してください。

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