Position actuelle: Accueil> Derniers articles> Gestion de session multi-utilisateurs et notifications en temps réel pour le système de chat en direct PHP

Gestion de session multi-utilisateurs et notifications en temps réel pour le système de chat en direct PHP

gitbox 2025-06-06

1. Introduction

Aujourd'hui, les plateformes sociales telles que WeChat et QQ prennent généralement en charge les fonctions de messagerie instantanée, et les systèmes de chat en temps réel sont devenus une partie indispensable des sites Web modernes. Cet article présente un système de chat en direct basé sur PHP qui peut réaliser la connexion en temps réel et la transmission de messages entre plusieurs utilisateurs. Le système n'a pas besoin de rafraîchir la page, et il ne s'appuie pas sur un logiciel client supplémentaire pour améliorer l'expérience utilisateur.

2. Gestion de session multi-utilisateurs

La gestion de session multi-utilisateurs est au cœur du système de chat en direct. Le système utilise le protocole WebSocket pour établir des connexions et utilise PHP comme langage côté serveur. WebSocket est basé sur le protocole TCP et prend en charge la communication bidirectionnelle entre les clients et les serveurs, garantissant que les messages peuvent être livrés en temps réel et de manière fiable.

2.1. Protocole WebSocket

WebSocket est un protocole du duplex complet basé sur TCP qui permet aux clients et aux serveurs d'envoyer et de recevoir des données simultanément. Ses principales caractéristiques comprennent:

  • Établi sur le protocole TCP, le serveur peut activement pousser les données vers le client et le client peut également envoyer des données au serveur;
  • La poignée de main initiale adopte le protocole HTTP et les données ultérieures sont encapsulées dans le protocole de cadre (cadre);
  • Prend en charge la communication duplex complète et les deux parties peuvent transmettre des données simultanément.

2.2. Établir une connexion

Le client envoie d'abord une demande de poignée de main WebSocket, y compris l'en-tête de demande du protocole de mise à niveau. Une fois que le serveur a reçu la demande, il renvoie l'en-tête de réponse contenant le protocole de mise à niveau correspondant pour compléter l'établissement de connexion.

 
// Établissement côté serveurWebSocketconnecter
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);
while (true) {
  // 等待客户端connecter
  $clientSocket = socket_accept($socket);
  // Recevoir les données du client
  $data = socket_read($clientSocket, 1024);
  // Envoyer des données de réponse
  $response = "HTTP/1.1 101 Switching Protocols\r\n"
            . "Upgrade: websocket\r\n"
            . "Connection: Upgrade\r\n"
            . "Sec-WebSocket-Accept: " . base64_encode(sha1($key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true)) . "\r\n\r\n";
  socket_write($clientSocket, $response);
}

3. Notification en temps réel

Une fois la connexion établie, le système utilise Redis comme support backend et réalise la notification en temps réel par le biais de son mécanisme de publication / d'abonnement pour garantir que les messages peuvent être rapidement poussés à tous les abonnés.

3.1. Introduction à Redis

Redis est une base de données open source de valeur clé basée sur la mémoire, qui prend en charge une variété de structures de données telles que des chaînes, des listes, des collections, des tables de hachage et des collections ordonnées. Il est largement utilisé dans le cache, les files d'attente de messages et le traitement des données en temps réel.

3.2. Mécanisme de publication / abonnement

Dans ce système, les messages de chat envoyés par les utilisateurs seront publiés sur un canal spécifique via Redis. Les clients abonnés au canal peuvent recevoir des messages en temps réel, réalisant la fonction de notification instantanée.

 
// Publier des informations àRedisCanal
$redis->publish('chat:message', json_encode($message));
 
// abonnementRedisCanal,Recevoir des messages en temps réel et informer les utilisateurs
$redis->subscribe(['chat:message'], function ($redis, $channel, $message) use ($server) {
  foreach ($server->connections as $connection) {
    $connection->send($message);
  }
});

4. Résumé

Cet article présente des technologies clés du système de chat en temps réel basé sur PHP, y compris la communication bidirectionnelle du protocole WebSocket et du mécanisme Redis Publish / souscrit. Avec ces technologies, le système peut réaliser la gestion de session en temps réel et la poussée instantanée de messages pour plusieurs utilisateurs, améliorant considérablement l'expérience d'interaction utilisateur. J'espère que cette solution sera utile pour que les développeurs puissent créer des fonctions de communication en temps réel efficaces.