ホームページ  >  記事  >  PHPフレームワーク  >  Advanced Workerman ネットワーク プログラミング: 同時実行性の高いインスタント メッセージング システムの実装

Advanced Workerman ネットワーク プログラミング: 同時実行性の高いインスタント メッセージング システムの実装

WBOY
WBOYオリジナル
2023-08-05 16:09:071055ブラウズ

Workerman Network Programming Advanced: 高同時実行インスタント メッセージング システムの実装

モバイル インターネットの普及に伴い、インスタント メッセージング システムは私たちの生活の中でますます重要な役割を果たしています。同時実行性の高いインスタント メッセージング システムの実装は、ネットワーク プログラミングを学習するための重要なマイルストーンです。この記事では、Workerman フレームワークを使用して同時実行性の高いインスタント メッセージング システムを実装し、コード例を通じて実装プロセスを詳しく紹介します。

まず、Workerman フレームワークをインストールする必要があります。 Workerman は軽量の PHP 非同期ネットワーク プログラミング フレームワークであり、豊富なネットワーク プログラミング機能を提供し、同時実行性の高いインスタント メッセージング システムの実装のニーズを満たすことができます。 Workerman は、composer を通じてインストールし、次のコマンドを実行できます。

composer require workerman/workerman

インストールが完了したら、同時実行性の高いインスタント メッセージング システムを実装するコードの作成を開始できます。

  1. サーバー クラスの作成

まず、クライアント接続とメッセージ送信を処理するサーバー クラスを作成します。コード例は次のとおりです。

use WorkermanWorker;

class ChatServer
{
    protected $clients;
    
    public function __construct()
    {
        $this->clients = new SplObjectStorage;
        
        $ws_worker = new Worker('websocket://0.0.0.0:8000');
        
        $ws_worker->onConnect = function($connection) {
            $this->clients->attach($connection);
            echo "New client connected
";
        };
        
        $ws_worker->onMessage = function($connection, $data) {
            // 处理接收到的消息
            foreach ($this->clients as $client) {
                $client->send($data);
            }
        };
        
        $ws_worker->onClose = function($connection) {
            $this->clients->detach($connection);
            echo "Client disconnected
";
        };
        
        Worker::runAll();
    }
}

new ChatServer();

上記のコードでは、まず Workerman Worker オブジェクトを作成し、そのリスニング アドレスとポートを websocket://0.0.0.0:8000 に設定します。次に、クライアントの接続、受信メッセージ、切断をそれぞれ処理する 3 つのコールバック関数が定義されます。 onConnect コールバック関数では、SplObjectStorage を使用してすべてのクライアント接続オブジェクトを保存します。 onMessage コールバック関数では、すべてのクライアント接続オブジェクトを反復処理し、受信したメッセージを各クライアントに送信します。 onClose コールバック関数では、切断されたクライアント オブジェクトを SplObjectStorage から削除します。

  1. クライアント ページの作成

次に、サーバーに接続してメッセージを送受信するためのクライアント ページを作成します。コード例は次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <title>Chat App</title>
    <style>
        #messages {
            height: 300px;
            overflow-y: scroll;
        }
    </style>
</head>
<body>
    <div id="messages"></div>
    <form id="form">
        <input type="text" id="message" autocomplete="off">
        <button>Send</button>
    </form>

    <script>
        const messages = document.getElementById('messages');
        const form = document.getElementById('form');
        const input = document.getElementById('message');
        
        const ws = new WebSocket('ws://localhost:8000');
        
        ws.onopen = function() {
            console.log('Connected to the server');
        };
        
        ws.onmessage = function(event) {
            const message = document.createElement('div');
            message.textContent = event.data;
            messages.appendChild(message);
        };
        
        form.addEventListener('submit', function(event) {
            event.preventDefault();
            
            const message = input.value;
            input.value = '';
            
            ws.send(message);
        });
    </script>
</body>
</html>

上記のコードでは、WebSocket 接続オブジェクトを作成し、サーバーのアドレス ws://localhost:8000 に接続します。次に、onopen、onmessage、および submit イベントのハンドラー関数が定義されます。 onmessage コールバック関数では、div 要素を作成し、受信したメッセージを div 要素に追加してから、その div 要素をページ上のmessages 要素に追加します。 submit イベントのハンドラー関数で、入力ボックス内のテキストを取得し、サーバーに送信します。

  1. コードの実行

上記の 2 つのコードをそれぞれ、server.php および client.html ファイルとして保存します。コマンド ラインで次のコマンドを実行します。

php server.php start

次に、ブラウザで client.html ファイルを開きます。 WebSocket を通じて実装されたインスタント メッセージング システム ページにアクセスできます。複数のクライアントがサーバーに接続した後、メッセージをリアルタイムで送信し、メッセージ リストに表示できます。

概要:

上記のコード例を通じて、サーバー クラスの作成からクライアント ページの作成まで、Workerman フレームワークに基づいた同時実行性の高いインスタント メッセージング システムを実装しました。この例を学習することで、ネットワーク プログラミングにおける同時実行性の高い処理についてより深く理解できます。同時に、強力なネットワーク アプリケーションをより迅速に開発できる Workerman フレームワークのパワーとシンプルさについても学びました。この記事がネットワーク プログラミングの学習と Workerman フレームワークの使用に役立つことを願っています。

以上がAdvanced Workerman ネットワーク プログラミング: 同時実行性の高いインスタント メッセージング システムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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