インターネットの発展に伴い、リアルタイム コミュニケーションは私たちにとって切り離せない部分になりました。 HTTP アップグレード プロトコルの 1 つである WebSocket は、TCP プロトコルに基づいてより効率的で安定しています。 PHP 開発において、WebSocket を使用してリアルタイム通信を実現するにはどうすればよいでしょうか?本稿では以下の観点から紹介していきます。
WebSocket は、TCP プロトコルに基づいて通信するネットワーク プロトコルで、通常はリアルタイム通信に使用されます。 WebSocket は HTTP プロトコルと異なり、サーバーとクライアント間の接続を長時間維持でき、全二重通信を実現し、データ転送効率が高くなります。従来の HTTP プロトコルでは、クライアントはリクエストによってサーバーからデータを取得し、サーバーはリクエストに応答してデータをクライアントに返しますが、データ送信がない場合でも TCP 接続を維持する必要があります。 WebSocket では、接続を確立する必要があるのはハンドシェイク中に 1 回だけであり、その後のデータ送信は毎回接続を確立する必要がなく、この接続に基づいて行うことができます。
Swoole は、PHP 用に開発された高性能ネットワーク通信フレームワークで、コルーチンと非同期 IO 操作をサポートし、WebSocket プロトコルもサポートしています。 Swoole 拡張機能を使用して WebSocket リアルタイム通信を実装するプロセスでは、Swoole ライブラリによって提供される WebSocket サーバー クラスを使用する必要があります。
# CentOS 6 系统下安装 sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm sudo yum install php56w php56w-opcache php56w-devel php56w-pear gcc automake autoconf make sudo pecl install swoole
<?php // 创建 WebSocket 服务器对象,监听 127.0.0.1:9502 端口 $server = new SwooleWebSocketServer("127.0.0.1", 9502); // 监听 WebSocket 连接打开事件 $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "client {$request->fd} opened "; }); // 监听 WebSocket 消息事件 $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; $server->push($frame->fd, "received message: {$frame->data}"); }); // 监听 WebSocket 连接关闭事件 $server->on('close', function ($ser, $fd) { echo "client {$fd} closed "; }); // 启动服务器 $server->start();
上記のコードでは、まず監視する WebSocket サーバー オブジェクトを作成します。次に、$server->on()
メソッドを使用して、WebSocket 接続の開始、メッセージ、接続の終了、その他のイベントをそれぞれリッスンします。クライアントから送信されたメッセージを受信した後、サーバーはメッセージの内容をコンソールに出力し、$server->push()
メソッドを通じてメッセージをクライアントに送り返します。
WebSocket サーバーを作成した後、フロントエンド ページに JavaScript コードを記述し、WebSocket オブジェクトを作成し、イベントの監視とメッセージ送信を実行する必要があります。具体的なコードは次のとおりです。
// 创建 WebSocket 对象 var ws = new WebSocket("ws://127.0.0.1:9502"); // 监听 WebSocket 连接打开事件 ws.onopen = function() { console.log("WebSocket connection established"); }; // 监听 WebSocket 消息事件 ws.onmessage = function(event) { console.log("received message: " + event.data); }; // 监听 WebSocket 连接关闭事件 ws.onclose = function() { console.log("WebSocket connection closed"); }; // 发送消息 ws.send("hello world");
上記のコードでは、new WebSocket("ws://127.0.0.1:9502")
を使用して WebSocket オブジェクトを作成し、 # を渡します。 ##ws はそれぞれ、イベント監視用の .onopen()、
ws.onmessage()、および
ws.onclose() メソッドです。ページでメッセージを送信するときは、
ws.send() メソッドを通じてサーバーにメッセージを送信できます。
以上がPHP開発でWebSocketを使用してリアルタイム通信を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。