Heim > Artikel > Backend-Entwicklung > Funktion zum Zurückziehen und Widerrufen von Nachrichten eines auf PHP basierenden Echtzeit-Chat-Systems
Funktion zum Zurückziehen und Widerrufen von Nachrichten eines auf PHP basierenden Echtzeit-Chat-Systems
Einführung:
Mit der rasanten Entwicklung und Beliebtheit des Internets ist das Echtzeit-Chat-System zu einem wichtigen Kommunikationsmittel für Menschen im täglichen Leben geworden . Bei der Entwicklung eines Chat-Systems ist die Implementierung von Funktionen zum Abrufen und Widerrufen von Nachrichten eine häufige Anforderung. In diesem Artikel wird erläutert, wie Sie mit PHP ein auf WebSocket basierendes Echtzeit-Chat-System schreiben und Funktionen zum Zurückziehen und Widerrufen von Nachrichten implementieren.
Das Folgende ist ein einfaches Beispiel unter Verwendung der Ratchet-Bibliothek:
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();
Ändern Sie die onMessage-Funktion und fügen Sie die Einstellungen des Statusfelds hinzu, bevor Sie die Nachricht speichern die Datenbank. :
$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();
implementiert die Auszahlungsfunktion, die die Auszahlungsanweisung an den Server auf der Clientseite senden kann, und setzt den entsprechenden Nachrichtenstatus auf zurückgezogen:
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; } } }
implementiert die Auszahlungsfunktion, die die Auszahlungsanweisung weiterleiten kann Die Clientseite wird an den Server gesendet und der entsprechende Nachrichtenstatus wird auf „Zurückgezogen“ gesetzt:
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; } } }
Zusammenfassung:
In diesem Artikel wird erläutert, wie Sie mit PHP ein Echtzeit-Chat-System basierend auf WebSocket erstellen und Funktionen zum Zurückziehen und Widerrufen von Nachrichten implementieren. Diese Funktionen können einfach implementiert werden, indem die Ratchet-Bibliothek und -Datenbank zum Speichern und Verarbeiten von Nachrichten verwendet wird. In konkreten Projekten können entsprechende Erweiterungen und Optimierungen je nach Bedarf durchgeführt werden.
Das obige ist der detaillierte Inhalt vonFunktion zum Zurückziehen und Widerrufen von Nachrichten eines auf PHP basierenden Echtzeit-Chat-Systems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!