ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 チャット ルーム開発ガイド: リアルタイム通信機能の実装

ThinkPHP6 チャット ルーム開発ガイド: リアルタイム通信機能の実装

WBOY
WBOYオリジナル
2023-08-12 14:31:471306ブラウズ

ThinkPHP6 チャット ルーム開発ガイド: リアルタイム通信機能の実装

ThinkPHP6 チャット ルーム開発ガイド: リアルタイム コミュニケーション機能の実装

はじめに:
インターネットの急速な発展に伴い、リアルタイム コミュニケーションの需要が高まっています。も増えています。リアルタイム コミュニケーションの一般的な方法として、チャット ルームは広く注目され、使用されています。この記事では、ThinkPHP6 フレームワークを使用してリアルタイム通信機能を実装する簡単かつ迅速な方法を説明します。

1. 環境構成:
始める前に、開発環境を構成する必要があります。 PHP および ThinkPHP6 フレームワークがインストールされていることを確認してください。同時に、この記事では MySQL データベースを使用するため、MySQL が正しくインストールされ、構成されていることも確認する必要があります。

2. データベースとテーブルの作成:
まず、chatroom という名前のデータベースを作成します。次に、チャット メッセージを保存するためのmessages という名前のテーブルを作成します。テーブル構造は次のとおりです:

CREATE TABLE `messages` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `content` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

3. コントローラーとビューを作成します:
次に、チャット ルーム関連のロジックを処理するチャットルーム コントローラーを作成する必要があります。 app/controller ディレクトリに Chatroom.php を作成し、次のコードを追加します。

<?php
namespace appcontroller;

use thinkacadeView;
use GatewayWorkerLibGateway;

class Chatroom
{
    public function index()
    {
        return View::fetch('index');
    }

    public function sendMessage()
    {
        $content = input('post.content');
        $data = [
            'content' => $content,
            'created_at' => date('Y-m-d H:i:s')
        ];
            hinkacadeDb::name('messages')->insert($data);
        Gateway::sendToAll(json_encode($data));
    }
}

app/view ディレクトリにindex.html を作成し、次のコードを追加します。

<!DOCTYPE html>
<html>
<head>
    <title>聊天室</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
    <div>
        <textarea id="message" style="width: 300px; height: 100px;"></textarea>
        <button onclick="sendMessage()">发送</button>
    </div>
    <div id="chatContent"></div>
</body>
<script>
    var websocket = new WebSocket('ws://localhost:8282');
    websocket.onopen = function () {
        console.log('连接成功');
    };
    websocket.onmessage = function (evt) {
        var message = JSON.parse(evt.data);
        $('#chatContent').append('<p>' + message.content + ' - ' + message.created_at + '</p>');
    };
    websocket.onerror = function () {
        console.log('连接失败');
    };
    websocket.onclose = function () {
        console.log('断开连接');
    };

    function sendMessage() {
        var content = $('#message').val();
        $.ajax({
            type: 'POST',
            url: '<?php echo url("Chatroom/sendMessage"); ?>',
            data: {content: content},
            success: function () {
                $('#message').val('');
            },
            error: function () {
                alert('发送失败');
            }
        });
    }
</script>
</html>

4. WebSocket を開始します。サービス:
ThinkPHP6 はデフォルトでは WebSocket サービスを統合しません。これを実現するには、GatewayWorker 拡張機能を使用する必要があります。まず、GatewayWorker 拡張機能をインストールする必要があります:

composer require workerman/gatewayworker

次に、プロジェクトのルート ディレクトリに start.php を作成し、次のコードを追加します:

<?php
use thinkacadeDb;
use WorkermanWorker;
use GatewayWorkerGateway;

require __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:8282');
$worker->name = 'ChatroomGateway';
$worker->count = 1;

$worker->onWorkerStart = function () {
    Gateway::$registerAddress = '127.0.0.1:1238';
    Gateway::onConnect(function ($connection) {
        $messages = Db::name('messages')->select();
        Gateway::sendToCurrentClient(json_encode($messages));
    });
    Gateway::onMessage(function ($connection, $data) {
        Gateway::sendToAll($data);
    });
};

Worker::runAll();

次に、コマンド ラインで次のコマンドを実行します。 WebSocket サービスを開始するには:

php start.php start

5. 完了:
これで、http://localhost/chatroom/index にアクセスしてチャット ルームを使用できるようになります。メッセージを入力して「送信」をクリックすると、リアルタイムでメッセージを送受信できます。

結論:
この記事のガイダンスにより、ThinkPHP6 フレームワークと GatewayWorker 拡張機能を使用して単純なチャット ルームを実装することに成功しました。この記事が、リアルタイム通信機能を迅速に実装するのに役立つ参考資料として読者に提供できれば幸いです。ただし、この記事は簡単な例を示しているだけであり、実際のプロジェクトでは、特定のニーズに応じて拡張および最適化する必要があることに注意してください。

以上がThinkPHP6 チャット ルーム開発ガイド: リアルタイム通信機能の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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