ホームページ バックエンド開発 PHPチュートリアル PHPとWebSocketの連携でリアルタイムチャットルームの開発を実現

PHPとWebSocketの連携でリアルタイムチャットルームの開発を実現

Jun 25, 2023 pm 01:13 PM
php websocket チャットルーム

Web 開発の分野では、リアルタイム チャット機能がますます普及しています。これにより、ユーザーはリアルタイムで簡単に対話でき、コミュニケーションと理解を強化できます。リアルタイム チャットを実装するには、WebSocket プロトコルを使用する必要があり、WebSocket リクエストを処理できるプログラミング言語が必要です。この記事では、PHP と WebSocket の統合を使用したリアルタイム チャット ルームの開発を実装する方法を紹介します。

WebSocket は、ブラウザとサーバー間のリアルタイムのデータ送信を可能にする全二重通信プロトコルです。 HTTP リクエストとは異なり、サーバーは WebSocket 接続の確立後にデータをブラウザにプッシュできます。したがって、WebSocket を介してクライアントとサーバーの間で双方向のデータ通信を行うことができます。ユーザーがチャット ルームに参加または退出すると、メッセージはすぐに他のオンライン ユーザーにプッシュされます。これがリアルタイム チャットの基本原理です。

まず、WebSocket リクエストを処理するためにサーバー側で PHP スクリプトを作成する必要があります。 PHP の swoole 拡張機能は、WebSocket サーバーの開発に役立ちます。次に、チャット アプリケーションを段階的に実装していきます。

1. swoole 拡張機能をインストールする

swoole 拡張機能を使用するには、まずそれをインストールする必要があります。 Linux システムに swoole をインストールするには、次のコマンドを使用します。

pecl install swoole
ログイン後にコピー

Windows システムで PHP を使用する場合は、swoole の GitHub リポジトリから関連する DLL ファイルをダウンロードして手動でインストールできます。

2. WebSocket サーバーのセットアップ

swoole 拡張機能のインストールが完了したら、それを使用して WebSocket サーバーの作成を開始できます。以下は、WebSocket サーバーを作成する基本コードです。

//创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9501);

//监听WebSocket连接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}
";
});

//监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}
";
    $server->push($frame->fd, json_encode(["hello", "world"]));
});

//监听WebSocket连接关闭事件
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed
";
});

//启动WebSocket服务器
$server->start();
ログイン後にコピー

このコード スニペットでは、WebSocket サーバーを作成し、イベント ハンドラー関数を登録します。 「open」イベントでは、WebSocket 接続が開いているというメッセージを出力します。 「message」イベントでは、WebSocket セッションに関する情報を出力し、クライアントにメッセージを送信します。 「close」イベントでは、WebSocket 接続が閉じられたというメッセージを出力します。

3. チャット ルーム ロジックのセットアップ

これで、WebSocket サーバーが正常に作成され、イベント処理関数がセットアップされました。次に、チャット ルーム ロジックの実装を開始できます。

ユーザーがチャット ルームに参加または退出したときにすべてのオンライン ユーザーに通知するメッセージ ブロードキャスト機能を設定する必要があります。以下は、メッセージ ブロードキャスト関数のコードです。

//广播消息
function broadcast($server, $frame, $users) {
    $data = json_decode($frame->data, true);
    switch ($data['type']) {
        case 'enter':
            $users[$frame->fd] = $data['name'];
            $msg = $data['name'] . ' joined the room.';
            break;
        case 'leave':
            $name = $users[$frame->fd];
            unset($users[$frame->fd]);
            $msg = $name . ' left the room.';
            break;
        case 'msg':
            $name = $users[$frame->fd];
            $msg = $name . ': ' . $data['msg'];
            break;
    }
    foreach ($server->connections as $fd) {
        $server->push($fd, json_encode(['type' => 'msg', 'msg' => $msg]));
    }
}
ログイン後にコピー

このコード スニペットでは、switch ステートメントを使用してさまざまな種類のメッセージを処理します。ユーザーがチャット ルームに参加または退出すると、ユーザー リストが更新され、通知メッセージが送信されます。ユーザーがメッセージを送信すると、メッセージの前にユーザー名が付けられ、すべてのオンライン ユーザーにブロードキャストされます。

4. 完全なチャット ルーム コード

必要なコンポーネントがすべて準備できたので、完全なチャット ルーム コードの作成を開始できます。以下は完全なチャット ルーム コードです:

//创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9501);

//定义用户列表
$users = [];

//广播消息
function broadcast($server, $frame, $users) {
    $data = json_decode($frame->data, true);
    switch ($data['type']) {
        case 'enter':
            $users[$frame->fd] = $data['name'];
            $msg = $data['name'] . ' joined the room.';
            break;
        case 'leave':
            $name = $users[$frame->fd];
            unset($users[$frame->fd]);
            $msg = $name . ' left the room.';
            break;
        case 'msg':
            $name = $users[$frame->fd];
            $msg = $name . ': ' . $data['msg'];
            break;
    }
    foreach ($server->connections as $fd) {
        $server->push($fd, json_encode(['type' => 'msg', 'msg' => $msg]));
    }
}

//监听WebSocket连接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}
";
});

//监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) use ($users) {
    broadcast($server, $frame, $users);
});

//监听WebSocket连接关闭事件
$server->on('close', function ($ser, $fd) use ($users) {
    unset($users[$fd]);
    echo "client {$fd} closed
";
});

//启动WebSocket服务器
$server->start();
ログイン後にコピー

このコード スニペットでは、すべてのオンライン ユーザーの情報を $users 配列に保存します。ユーザーがチャット ルームに参加または退出したときに、この配列を更新します。 WebSocket メッセージ イベントでは、broadcast() 関数を使用してメッセージをブロードキャストします。 WebSocket 接続の終了イベントでは、切断されたユーザーを $users 配列から削除します。

5. チャット ルームをテストする

これで、チャット ルーム アプリケーションが正常に作成されました。 Google Chrome、Firefox、Safari など、WebSocket をサポートするすべてのブラウザでテストできます。チャット ルームをテストする手順は次のとおりです。

  1. PHP コマンドを使用して上記のコードを実行します
  2. index.html ファイルをブラウザで開きます
  3. ユーザー名を入力し、[チャット ルームに入る] ボタンをクリックします。
  4. チャット ボックスにメッセージを入力し、[送信] ボタンをクリックします。

メッセージが表示されるはずです。すべてのオンライン ユーザーのチャットでボックス内でブロードキャストします。

概要

この記事では、PHP と WebSocket の統合を使用してリアルタイム チャット ルームの開発を実装する方法を紹介しました。 swoole 拡張機能を使用して WebSocket サーバーを作成し、簡単なチャット ルーム アプリケーションを作成しました。この記事では、WebSocket プロトコルを使用してリアルタイム データ送信接続を確立する方法、PHP で WebSocket サーバーを実装する方法、およびそれを使用してチャット ルーム アプリケーションを実装する方法を学習できます。

以上がPHPとWebSocketの連携でリアルタイムチャットルームの開発を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles