ホームページ > 記事 > PHPフレームワーク > 労働者育成の実践: 効率的なインスタント メッセージング システムの構築
労働者育成の実践: 効率的なインスタント メッセージング システムの構築
はじめに:
インターネットの急速な発展と、リアルタイム通信に対するユーザーの需要の増大に伴い、インスタント メッセージング システムは一般的な開発となっています。分野。さまざまなリアルタイム通信のニーズを満たすために、PHP オープンソース フレームワーク Workerman を使用して、効率的で安定したインスタント メッセージング システムを構築できます。この記事では、Workerman フレームワークを使用して強力なインスタント メッセージング システムを開発する方法を紹介し、コード例を添付します。
Workerman のインストール:
まず、Workerman フレームワークをインストールする必要があります。ターミナルで次のコマンドを実行して Workerman をインストールします:
composer require workerman/workerman
インストールが完了したら、インスタント メッセージング システムの構築を開始できます。
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听2345端口,使用websocket协议通信 $ws_worker = new Worker("websocket://0.0.0.0:2345"); // 设置进程数 $ws_worker->count = 4; // 当客户端连接时 $ws_worker->onConnect = function($connection){ echo "New connection "; }; // 当客户端发送消息时 $ws_worker->onMessage = function($connection, $data){ foreach($connection->worker->connections as $clientConnection){ $clientConnection->send($data); } }; // 当客户端断开连接时 $ws_worker->onClose = function($connection){ echo "Connection closed "; }; // 运行worker Worker::runAll();
上記のコードは、Worker オブジェクトを作成し、ポート 2345 をリッスンし、WebSocket プロトコルを使用して通信します。クライアントが接続されている場合は「新しい接続」が出力され、クライアントがメッセージを送信すると、接続されているすべてのクライアントにメッセージが送信され、クライアントが切断された場合は「接続が閉じられました」が出力されます。最後に、Worker::runAll() メソッドを使用してワーカーを実行します。
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; use WorkermanAutoloader; use WorkermanConnectionAsyncTcpConnection; $connect_list = array(); // 当用户输入消息时 function onMessage($connect) { // 从终端读取用户输入的消息 $message = trim(fgets(STDIN)); // 发送消息到服务端 $connect->send($message); } // 创建一个异步TCP连接到服务端 $connect = new AsyncTcpConnection('ws://127.0.0.1:2345'); $connect->onConnect = function($connection){ echo "Connected to server "; }; $connect->onMessage = function($connection, $data){ echo "Received message: ".$data." "; }; $connect->onClose = function($connection){ echo "Disconnected from server "; }; // 运行连接 $connect->connect(); // 将连接对象保存到连接列表中 $connect_list[] = $connect; // 监听用户输入消息 Worker::addWorker(function(){ readline_callback_handler_install('', function(){}); while (true) { if (count($GLOBALS['connect_list']) > 0) { $read = array_values($GLOBALS['connect_list']); $write = null; $except = null; if (false === ($num_changed_streams = stream_select($read, $write, $except, 1))) { continue; } elseif ($num_changed_streams > 0) { foreach($read as $connect) { onMessage($connect); } } } } }); Worker::runAll();
上記のコードは、AsyncTcpConnection オブジェクトを作成し、サーバーの 2345 ポートに接続します。接続に成功した場合は「サーバーに接続しました」、サーバーから送信されたメッセージを受信した場合は「受信メッセージ: 」と具体的なメッセージ内容が出力され、サーバーとの接続が切断された場合は「サーバーから切断されました」と表示されます。 」と出力されます。同時に、ユーザーが入力したメッセージが監視され、接続オブジェクトを通じてサーバーに送信されます。
インスタント メッセージング システムを実行します:
ターミナルで次のコマンドを実行してサーバーとクライアントを起動します:
php server.php php client.php
サーバーとクライアントが実行されます。つまり、リスニング状態になり、相互にメッセージを送信できるようになります。サーバーは、クライアントから送信されたメッセージを受信すると、接続されているすべてのクライアントにメッセージをブロードキャストします。
概要:
この記事では、Workerman を使用して効率的なインスタント メッセージング システムを開発する方法を紹介しました。サーバーとクライアントを構築し、対応するコードを記述することで、リアルタイム通信機能を実現できます。 Workerman は API と関数の完全なセットを提供しており、強力なインスタント メッセージング システムを簡単に構築できます。この記事があなたのお役に立てれば幸いです、読んでいただきありがとうございます!
以上が労働者育成の実践: 効率的なインスタント メッセージング システムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。