Maison  >  Article  >  développement back-end  >  Fonctions de discussion de groupe et de discussion privée du système de discussion en temps réel basé sur PHP

Fonctions de discussion de groupe et de discussion privée du système de discussion en temps réel basé sur PHP

王林
王林original
2023-08-27 14:43:47915parcourir

Fonctions de discussion de groupe et de discussion privée du système de discussion en temps réel basé sur PHP

Fonctions de discussion de groupe et de discussion privée du système de discussion en temps réel basé sur PHP

Avec le développement d'Internet, les systèmes de discussion en temps réel deviennent de plus en plus importants dans notre vie quotidienne. Que vous discutiez avec des amis sur les réseaux sociaux ou que vous communiquiez avec des collègues de travail, les systèmes de chat en direct jouent un rôle important. Cet article explique comment utiliser PHP pour développer un système basé sur le chat en temps réel prenant en charge les fonctions de chat de groupe et de chat privé.

Tout d'abord, nous devons configurer un serveur pour gérer les demandes de chat en temps réel. Nous utilisons PHP et WebSocket pour implémenter cette fonctionnalité. WebSocket est un protocole basé sur TCP qui permet une communication en duplex intégral entre le navigateur et le serveur. En PHP, on peut utiliser la bibliothèque Ratchet pour créer un serveur WebSocket.

Tout d'abord, nous devons installer la bibliothèque Ratchet. Exécutez la commande suivante dans le terminal :

composer require cboden/ratchet

Une fois l'installation terminée, nous pouvons créer un fichier appelé server.php et y écrire le code suivant : server.php的文件,并在其中编写以下代码:

<?php
require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetWebSocketWsServer;
use RatchetHttpHttpServer;
use RatchetServerIoServer;
use RatchetWampWampServerProtocol;

class Chat implements MessageComponentInterface
{
    protected $clients;

    public function __construct()
    {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 处理客户端发送的消息
        $data = json_decode($msg);
        $type = $data->type;

        switch ($type) {
            case 'register':
                $from->username = $data->username;
                echo "User registered: " . $from->username . "
";
                break;
            case 'group':
                $message = $data->message;
                $this->broadcastMessage($from, $message);
                break;
            case 'private':
                $recipient = $data->recipient;
                $message = $data->message;
                $this->sendPrivateMessage($from, $recipient, $message);
                break;
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}
";
        $conn->close();
    }

    public function broadcastMessage($from, $message)
    {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($message);
            }
        }
    }

    public function sendPrivateMessage($from, $recipient, $message)
    {
        foreach ($this->clients as $client) {
            if ($client->username == $recipient) {
                $client->send($message);
                $from->send($message);
                break;
            }
        }
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();

在上述代码中,我们创建了一个名为Chat的类来处理连接、发送消息和关闭连接等操作。在onMessage方法中,我们根据消息类型来执行不同的操作。如果类型是register,表示有用户注册连接;如果类型是group,表示有用户发送群组消息;如果类型是private,表示有用户发送私聊消息。我们使用broadcastMessage方法来广播群组消息,使用sendPrivateMessage方法来发送私聊消息。

接下来,我们可以创建一个名为index.html的文件,并在其中编写以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Chat</title>
</head>
<body>
    <input type="text" id="username" placeholder="Username"><br>
    <input type="text" id="message" placeholder="Message"><br>
    <button onclick="register()">Register</button>
    <button onclick="sendGroupMessage()">Send Group Message</button>
    <button onclick="sendPrivateMessage()">Send Private Message</button>

    <script>
        var conn = new WebSocket('ws://localhost:8080');

        conn.onopen = function(e) {
            console.log("Connection established!");
        };

        conn.onmessage = function(e) {
            var chatbox = document.getElementById("chatbox");
            chatbox.innerHTML += e.data + "<br>";
        };

        function register() {
            var username = document.getElementById("username").value;
            var data = {
                type: 'register',
                username: username
            };
            conn.send(JSON.stringify(data));
        }

        function sendGroupMessage() {
            var message = document.getElementById("message").value;
            var data = {
                type: 'group',
                message: message
            };
            conn.send(JSON.stringify(data));
        }

        function sendPrivateMessage() {
            var recipient = document.getElementById("username").value;
            var message = document.getElementById("message").value;
            var data = {
                type: 'private',
                recipient: recipient,
                message: message
            };
            conn.send(JSON.stringify(data));
        }
    </script>
</body>
</html>

在上述代码中,我们创建了一个WebSocket连接并注册了连接的回调函数。在register函数中,我们将用户名发送到服务器以进行注册。在sendGroupMessage函数中,我们将群组消息发送到服务器,服务器会将消息广播给所有用户。在sendPrivateMessage函数中,我们将私聊消息发送给指定用户。

现在,我们可以在终端中运行php server.php命令来启动服务器。然后,我们可以在浏览器中打开index.htmlrrreee

Dans le code ci-dessus, nous create Une classe nommée Chat est créée pour gérer des opérations telles que la connexion, l'envoi de messages et la fermeture des connexions. Dans la méthode onMessage, nous effectuons différentes opérations en fonction du type de message. Si le type est register, cela signifie qu'un utilisateur a enregistré une connexion ; si le type est group, cela signifie qu'un utilisateur a envoyé un message de groupe si le type est ; est privé, indique qu'un utilisateur a envoyé un message privé. Nous utilisons la méthode broadcastMessage pour diffuser des messages de groupe et la méthode sendPrivateMessage pour envoyer des messages privés.


Ensuite, nous pouvons créer un fichier appelé index.html et y écrire le code suivant :

rrreee🎜Dans le code ci-dessus, nous créons une connexion WebSocket et enregistrons la fonction de rappel de la connexion. Dans la fonction register, nous envoyons le nom d'utilisateur au serveur pour enregistrement. Dans la fonction sendGroupMessage, nous envoyons le message de groupe au serveur, et le serveur diffusera le message à tous les utilisateurs. Dans la fonction sendPrivateMessage, nous envoyons le message privé à l'utilisateur spécifié. 🎜🎜Maintenant, nous pouvons exécuter la commande php server.php dans le terminal pour démarrer le serveur. Ensuite, nous pouvons ouvrir le fichier index.html dans le navigateur, saisir le nom d'utilisateur et cliquer sur le bouton d'enregistrement. Ensuite, nous pouvons saisir un message et cliquer sur le bouton Envoyer pour avoir une discussion de groupe ou une discussion privée. Le serveur diffuse le message correspondant aux autres utilisateurs ou l'envoie à un utilisateur spécifié. 🎜🎜Résumé : 🎜Cet article explique comment utiliser PHP et WebSocket pour développer un système de discussion en temps réel et implémenter des fonctions de discussion de groupe et de discussion privée. En créant et en communiquant avec un serveur WebSocket, nous sommes en mesure d'obtenir et d'envoyer des messages d'autres utilisateurs en temps réel. Avec un simple exemple de code, nous avons implémenté un système de discussion de base en temps réel. En étendant le code, nous pouvons implémenter davantage de fonctions, telles que l'ajout de la vérification des utilisateurs, le stockage des enregistrements de discussion, etc. 🎜

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