Rumah  >  Artikel  >  rangka kerja php  >  Panduan Pembangunan Bilik Sembang ThinkPHP6: Melaksanakan Fungsi Komunikasi Masa Nyata

Panduan Pembangunan Bilik Sembang ThinkPHP6: Melaksanakan Fungsi Komunikasi Masa Nyata

WBOY
WBOYasal
2023-08-12 14:31:471211semak imbas

Panduan Pembangunan Bilik Sembang ThinkPHP6: Melaksanakan Fungsi Komunikasi Masa Nyata

Panduan Pembangunan Bilik Sembang ThinkPHP6: Melaksanakan Fungsi Komunikasi Masa Nyata

Pengenalan:
Dengan perkembangan pesat Internet, permintaan untuk komunikasi masa nyata juga semakin meningkat. Sebagai kaedah biasa komunikasi masa nyata, bilik sembang telah mendapat perhatian dan penggunaan yang meluas. Artikel ini akan memberikan anda kaedah yang mudah dan pantas untuk melaksanakan fungsi komunikasi masa nyata dengan menggunakan rangka kerja ThinkPHP6.

1. Konfigurasi persekitaran:
Sebelum kita mula, kita perlu mengkonfigurasi persekitaran pembangunan. Pastikan anda telah memasang rangka kerja PHP dan ThinkPHP6. Pada masa yang sama, artikel ini akan menggunakan pangkalan data MySQL, jadi anda juga perlu memastikan bahawa anda telah memasang dan mengkonfigurasi MySQL dengan betul.

2 Buat pangkalan data dan jadual:
Kami mula-mula mencipta pangkalan data bernama bilik sembang. Kemudian buat jadual bernama mesej untuk menyimpan mesej sembang. Struktur jadual adalah seperti berikut:

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. Tulis pengawal dan pandangan:
Seterusnya, kita perlu mencipta pengawal Bilik Sembang untuk mengendalikan logik berkaitan bilik sembang. Cipta Chatroom.php dalam direktori aplikasi/pengawal dan tambah kod berikut:

<?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));
    }
}

Buat index.html dalam direktori app/view dan tambah kod berikut:

<!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. Mulakan perkhidmatan WebSocket:
ThinkPHP6 tidak disepadukan secara lalai perkhidmatan WebSocket, kita perlu menggunakan sambungan GatewayWorker untuk melaksanakannya. Mula-mula, kita perlu memasang sambungan GatewayWorker:

composer require workerman/gatewayworker

Seterusnya, buat start.php dalam direktori akar projek dan tambah kod berikut:

<?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();

Kemudian laksanakan arahan berikut dalam baris arahan untuk memulakan perkhidmatan WebSocket:

php start.php start

5. Lengkap :
Kini, kita boleh menggunakan ruang sembang dengan melayari http://localhost/chatroom/index. Selepas memasukkan mesej, klik Hantar untuk menghantar dan menerima mesej dalam masa nyata.

Kesimpulan:
Melalui panduan artikel ini, kami berjaya melaksanakan ruang sembang mudah menggunakan rangka kerja ThinkPHP6 dan sambungan GatewayWorker. Saya harap artikel ini dapat memberikan pembaca beberapa rujukan berguna untuk membantu melaksanakan fungsi komunikasi masa nyata dengan cepat. Walau bagaimanapun, perlu diingatkan bahawa artikel ini hanya memberikan contoh mudah Dalam projek sebenar, ia perlu dikembangkan dan dioptimumkan mengikut keperluan tertentu.

Atas ialah kandungan terperinci Panduan Pembangunan Bilik Sembang ThinkPHP6: Melaksanakan Fungsi Komunikasi Masa Nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn