ホームページ > 記事 > PHPフレームワーク > Swoole の動作: WebSocket に基づいてチャット ルームをすばやく作成します
インターネット時代において、チャット ルームは人々がコミュニケーションし交流するための重要な場所になりました。 WebSocket テクノロジーの登場により、リアルタイム通信がよりスムーズかつ安定しました。今回は、Swoole フレームワークを使用して WebSocket ベースのチャット ルームをすばやく構築する方法を紹介します。
Swoole は、C 言語で書かれた高性能 PHP コルーチン ネットワーク通信フレームワークで、非同期 IO、コルーチン、ネットワーク通信、その他の機能を統合し、PHP コードを Node.js イベント駆動型と同じくらい効率的に処理できるようにします。非同期同時プログラミング。 Swoole は、同時実行性の高いネットワーク アプリケーションを開発するための重要なツールであると言えます。
以下では、Swoole を使用して WebSocket に基づいたチャット ルームを実装し、複数人のオンライン チャットをサポートする方法を段階的に紹介します。
開始する前に、Swoole 拡張機能がインストールされ、WebSocket サポートが有効になっていることを確認する必要があります。
インストール方法は次のとおりです:
pecl install swoole
またはコンパイルしてインストールします:
wget https://pecl.php.net/get/swoole-{version}.tgz tar xzvf swoole-{version}.tgz cd swoole-{version} phpize ./configure --enable-async-redis --enable-coroutine --enable-openssl --enable-http2 --enable-sockets make && make install
Docker を使用する場合は、Dockerfile に次のステートメントを追加できます。
RUN pecl install swoole && docker-php-ext-enable swoole && docker-php-ext-install pcntl
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>WebSocket ChatRoom Demo</title> <style> * { margin: 0; padding: 0; } .container { margin: 30px auto; width: 800px; height: 600px; border: 1px solid #aaa; border-radius: 5px; overflow: hidden; } .message-box { width: 800px; height: 500px; border-bottom: 1px solid #aaa; overflow-y: scroll; } .input-box { width: 800px; height: 100px; border-top: 1px solid #aaa; } .input-text { width: 600px; height: 80px; margin: 10px; padding: 10px; font-size: 20px; border-radius: 5px; border: 1px solid #aaa; outline: none; } .send-btn { width: 100px; height: 100%; margin: 0 10px; background-color: #4CAF50; border: none; color: white; font-size: 18px; border-radius: 5px; cursor: pointer; } </style> </head> <body> <div class="container"> <div class="message-box"></div> <div class="input-box"> <textarea class="input-text"></textarea> <button class="send-btn">Send</button> </div> </div> <script> // 初始化WebSocket let socket = new WebSocket('ws://localhost:9502'); // 监听连接成功事件 socket.onopen = function (event) { console.log('WebSocket connection established.'); } // 监听服务端发送的消息 socket.onmessage = function (event) { let message_box = document.querySelector('.message-box'); message_box.innerHTML += `<p>${event.data}</p>`; message_box.scrollTop = message_box.scrollHeight; } // 监听连接关闭事件 socket.onclose = function (event) { console.log('WebSocket connection closed.'); } // 发送消息 let send_btn = document.querySelector('.send-btn'); let input_text = document.querySelector('.input-text'); send_btn.addEventListener('click', function (event) { if (input_text.value.trim() == '') return; socket.send(input_text.value); input_text.value = ''; }); </script> </body> </html>このコードでは、チャット ルーム ページをメッセージ表示ボックスとメッセージ入力ボックスの 2 つの部分に分割します。同時に、WebSocket 接続とメッセージ送信の関連ロジックも定義します。 ローカル環境にデプロイする場合、
WebSocket のアドレスを
localhost ではなくローカル IP アドレスに変更する必要があることに注意してください。オンライン環境を使用する場合は、
WebSocket アドレスをサーバーのパブリック IP に変更する必要があります。
<?php // 创建WebSocket服务器 $server = new SwooleWebsocketServer("0.0.0.0", 9502); // 监听WebSocket连接打开事件 $server->on('open', function (SwooleWebsocketServer $server, $request) { echo "connection open: {$request->fd} "; }); // 监听WebSocket消息事件 $server->on('message', function (SwooleWebsocketServer $server, $frame) { echo "received message: {$frame->data} "; // 广播消息 foreach ($server->connections as $fd) { $server->push($fd, $frame->data); } }); // 监听WebSocket连接关闭事件 $server->on('close', function (SwooleWebsocketServer $server, $fd) { echo "connection close: {$fd} "; }); // 启动WebSocket服务器 $server->start();まず、WebSocket サーバーを作成し、アドレス
0.0.0.0:9502 にバインドして、クライアントの接続を待機します。 WebSocket の接続開始、メッセージ、接続終了の 3 つのイベントは
on メソッドを通じて監視され、これら 3 つのイベントの処理ロジックが実装されています。
open イベントでは、Swoole によって記録されたクライアント fd を使用してコンソールに出力します。
message イベントでは、クライアントから情報を取得し、
echo を使用してそれをコンソールに出力し、
foreach Traverse を渡します。接続を確立し、すべてのクライアントにメッセージをブロードキャストするクライアント。
close イベントでは、Swoole によって記録されたクライアント fd を再度使用し、コンソールに出力します。
start メソッドを使用して WebSocket サーバーを起動します。
以上がSwoole の動作: WebSocket に基づいてチャット ルームをすばやく作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。