Maison  >  Article  >  cadre php  >  Guide de développement de salon de discussion ThinkPHP6 : implémentation de fonctions de communication en temps réel

Guide de développement de salon de discussion ThinkPHP6 : implémentation de fonctions de communication en temps réel

WBOY
WBOYoriginal
2023-08-12 14:31:471266parcourir

Guide de développement de salon de discussion ThinkPHP6 : implémentation de fonctions de communication en temps réel

Guide de développement de salles de discussion ThinkPHP6 : implémentation de fonctions de communication en temps réel

Introduction :
Avec le développement rapide d'Internet, la demande de communication en temps réel augmente également. En tant que méthode courante de communication en temps réel, les forums de discussion ont reçu une attention et une utilisation généralisées. Cet article vous fournira une méthode simple et rapide pour implémenter des fonctions de communication en temps réel en utilisant le framework ThinkPHP6.

1. Configuration de l'environnement :
Avant de commencer, nous devons configurer l'environnement de développement. Assurez-vous que les frameworks PHP et ThinkPHP6 sont installés. Dans le même temps, cet article utilisera la base de données MySQL, vous devez donc également vous assurer que vous avez installé et configuré MySQL correctement.

2. Créer une base de données et des tables :
Nous créons d'abord une base de données nommée chatroom. Créez ensuite une table nommée messages pour stocker les messages de discussion. La structure de la table est la suivante :

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. Écrivez les contrôleurs et les vues :
Ensuite, nous devons créer un contrôleur Chatroom pour gérer la logique liée au salon de discussion. Créez Chatroom.php dans le répertoire app/controller et ajoutez le code suivant :

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

Créez index.html dans le répertoire app/view et ajoutez le code suivant :

<!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. Démarrez le service WebSocket :
ThinkPHP6 n'est pas intégré par défaut du service WebSocket, nous devons utiliser l'extension GatewayWorker pour l'implémenter. Tout d'abord, nous devons installer l'extension GatewayWorker :

composer require workerman/gatewayworker

Ensuite, créez start.php dans le répertoire racine du projet et ajoutez le code suivant :

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

Exécutez ensuite la commande suivante dans la ligne de commande pour démarrer le service WebSocket :

php start.php start

5. Compléter :
Maintenant, nous pouvons utiliser le salon de discussion en visitant http://localhost/chatroom/index. Après avoir saisi le message et cliqué sur Envoyer, vous pouvez envoyer et recevoir des messages en temps réel.

Conclusion :
Grâce au guide de cet article, nous avons implémenté avec succès une salle de discussion simple en utilisant le framework ThinkPHP6 et l'extension GatewayWorker. J'espère que cet article pourra fournir aux lecteurs des références utiles pour aider à mettre en œuvre rapidement des fonctions de communication en temps réel. Cependant, il convient de noter que cet article ne fournit qu'un exemple simple. Dans les projets réels, il doit être étendu et optimisé en fonction des besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn