PHP ベースのリアルタイム チャット システムのメッセージの撤回および取り消し機能
はじめに:
インターネットの急速な発展と普及により、リアルタイムチャット システムは日常の重要なコミュニケーション手段となっています。チャット システムを開発する場合、メッセージの取り消しおよび取り消し機能の実装は一般的な要件です。この記事では、PHP を使用して WebSocket ベースのリアルタイム チャット システムを作成し、メッセージの取り消しと取り消し機能を実装する方法を紹介します。
次に、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();
$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();
引き出し機能を実装するには、クライアントはサーバーに引き出し指示を送信し、対応するメッセージ ステータスを設定します。取り消しへ:
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; } } }
取り消し機能を実装するには、クライアント側のサーバーに取り消し指示を送信し、対応するメッセージ ステータスを取り消しに設定します:
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; } } }
以上がPHPベースのリアルタイムチャットシステムのメッセージ取消・取消し機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。