Maison > Article > développement back-end > Recherche sur la technologie de transmission de messages pour développer un système de chat en temps réel utilisant PHP
Recherche sur la technologie de transmission de messages pour le développement PHP d'un système de chat en temps réel
Avec le développement fulgurant d'Internet, la communication en temps réel est devenue un moyen important pour les gens de communiquer. Afin de répondre aux besoins des utilisateurs en matière de fonctions de chat en temps réel, les développeurs continuent d'explorer l'utilisation de diverses technologies pour atteindre une efficacité élevée et une forte stabilité de la technologie de transmission de messages. Cet article se concentrera sur la technologie de transmission de messages pour développer des systèmes de discussion en temps réel en PHP et fournira des exemples de code correspondants.
1. WebSocket Protocol
WebSocket est un protocole qui fournit des connexions persistantes pour la communication en duplex intégral entre les navigateurs Web et les serveurs Web. Comparé au protocole HTTP traditionnel, le protocole WebSocket peut fournir une latence plus faible et une efficacité push plus élevée une fois la connexion établie.
Les développeurs PHP peuvent utiliser le package Ratchet pour implémenter un système de discussion en temps réel basé sur WebSocket. Ce qui suit est un exemple de code simple qui montre comment utiliser Ratchet pour créer un serveur WebSocket :
<?php require 'vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; 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) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } 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(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
Le code ci-dessus définit une classe appelée Chat pour gérer les connexions WebSocket et l'envoi de messages. Dans la méthode onOpen
, le serveur stockera la connexion nouvellement établie. Dans la méthode onMessage
, le serveur transmettra le message reçu à tous les clients. Dans la méthode onClose
, le serveur supprimera la connexion déconnectée. La classe Chat est regroupée dans un serveur WebSocket via IoServer et HttpServer fournis par Ratchet et écoute le port 8080. onOpen
方法中,服务器会将新建立的连接存储起来,在onMessage
方法中,服务器会将接收到的消息推送给所有客户端。在onClose
方法中,服务器会将断开的连接移除。通过Ratchet提供的IoServer和HttpServer将Chat类包装成WebSocket服务器,并监听8080端口。
二、Long Polling技术
Long Polling是一种将HTTP请求保持在服务器端的技术,通过保持连接的方式实现实时消息推送。当有新消息到达时,服务器会立即响应并返回给客户端。相较于传统的短轮询(Polling)方式,Long Polling可以减少不必要的网络请求,提高推送的效率。
以下是一个使用PHP实现Long Polling的示例代码:
<?php function checkNewMessage() { // 检查是否有新消息,如果有则返回,并结束函数 if ($hasNewMessage) { $response = array('message' => $message, 'timestamp' => $timestamp); echo json_encode($response); return; } // 如果没有新消息,等待一段时间后再重新检查 sleep(1); checkNewMessage(); } checkNewMessage();
上述代码中,checkNewMessage
函数会检查是否有新消息。如果有新消息,则将消息返回给客户端并结束函数。如果没有新消息,则等待一段时间后再重新检查。通过递归调用checkNewMessage
<?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); header('Connection: keep-alive'); while (true) { // 检查是否有新消息,如果有则发送给客户端 if ($hasNewMessage) { $response = "data: " . json_encode($message) . " "; echo $response; flush(); } // 休眠一段时间后再次检查 sleep(1); }Dans le code ci-dessus, la fonction
checkNewMessage
vérifie s'il y a un nouveau message. S'il y a un nouveau message, renvoyez le message au client et terminez la fonction. S'il n'y a pas de nouveaux messages, attendez un moment, puis vérifiez à nouveau. En appelant la fonction checkNewMessage
de manière récursive, vous pouvez surveiller et renvoyer en permanence de nouveaux messages. 3. Technologie des événements envoyés par le serveur
Les événements envoyés par le serveur sont une technologie qui utilise des connexions HTTP pour transmettre des événements du serveur au client. Par rapport à WebSocket et Long Polling, les événements envoyés par le serveur sont plus adaptés à l'envoi de messages unidirectionnels du serveur au client.
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!