Fonction de retrait et de révocation des messages du système de chat en temps réel basé sur PHP
Introduction :
Avec le développement rapide et la popularité d'Internet, le système de chat en temps réel est devenu un moyen important pour les gens de communiquer quotidiennement. Lors du développement d’un système de chat, la mise en œuvre de fonctions de rappel et de révocation de messages est une exigence courante. Cet article expliquera comment utiliser PHP pour écrire un système de discussion en temps réel basé sur WebSocket et implémenter des fonctions de retrait et de révocation de messages.
Ce qui suit est un exemple simple utilisant la bibliothèque Ratchet :
require 'vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); } public function onMessage(ConnectionInterface $from, $msg) { // 解析接收到的消息 $data = json_decode($msg, true); // 将消息保存到数据库 $message = new ChatMessage(); $message->sender_id = $data['sender_id']; $message->receiver_id = $data['receiver_id']; $message->message = $data['message']; $message->timestamp = time(); $message->save(); // 将消息发送给接收者 foreach ($this->clients as $client) { if ($client !== $from && $client->resourceId == $data['receiver_id']) { $client->send($data['message']); break; } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); } public function onError(ConnectionInterface $conn, Exception $e) { $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
Modifiez la fonction onMessage et ajoutez les paramètres du champ d'état avant d'enregistrer le message dans la base de données. :
$message = new ChatMessage(); $message->sender_id = $data['sender_id']; $message->receiver_id = $data['receiver_id']; $message->message = $data['message']; $message->timestamp = time(); $message->status = 1; // 设置消息状态为正常 $message->save();
implémente la fonction de retrait, qui peut envoyer l'instruction de retrait au serveur côté client, et définit le statut du message correspondant sur retiré :
public function onMessage(ConnectionInterface $from, $msg) { // 解析接收到的消息 $data = json_decode($msg, true); // 根据消息ID更新状态为撤回 ChatMessage::where('id', $data['message_id']) ->update(['status' => 2]); // 广播撤回消息给接收者 $this->broadcastMessage($data['message_id'], $from, $data['receiver_id']); } public function broadcastMessage($messageId, ConnectionInterface $from, $receiverId) { foreach ($this->clients as $client) { if ($client !== $from && $client->resourceId == $receiverId) { $client->send(json_encode(['action' => 'revoke', 'message_id' => $messageId])); break; } } }
implémente la fonction de retrait, qui peut envoyer l'instruction de retrait sur du côté client au serveur et définit le statut du message correspondant Statut défini sur retiré :
public function onMessage(ConnectionInterface $from, $msg) { // 解析接收到的消息 $data = json_decode($msg, true); // 根据消息ID更新状态为撤销 ChatMessage::where('id', $data['message_id']) ->update(['status' => 3]); // 广播撤销消息给接收者 $this->broadcastMessage($data['message_id'], $from, $data['receiver_id']); } public function broadcastMessage($messageId, ConnectionInterface $from, $receiverId) { foreach ($this->clients as $client) { if ($client !== $from && $client->resourceId == $receiverId) { $client->send(json_encode(['action' => 'revoke', 'message_id' => $messageId])); break; } } }
Résumé :
Cet article explique comment utiliser PHP pour créer un système de discussion en temps réel basé sur WebSocket et implémenter des fonctions de retrait et de révocation de messages. Ces fonctionnalités peuvent être facilement mises en œuvre en utilisant la bibliothèque et la base de données Ratchet pour stocker et traiter les messages. Dans les projets réels, l'expansion et l'optimisation correspondantes peuvent être réalisées en fonction des besoins.
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!