Pengeluaran mesej dan fungsi pembatalan sistem sembang masa nyata berdasarkan PHP
Pengenalan:
Dengan perkembangan pesat dan populariti Internet, sistem sembang masa nyata telah menjadi cara penting untuk orang ramai berkomunikasi setiap hari. Apabila membangunkan sistem sembang, melaksanakan fungsi ingat semula dan pembatalan mesej adalah keperluan biasa. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menulis sistem sembang masa nyata berdasarkan WebSocket dan melaksanakan fungsi pengeluaran dan pembatalan mesej.
Berikut ialah contoh mudah menggunakan perpustakaan 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();
Ubah suai fungsi onMessage dan tambah tetapan medan status sebelum menyimpan mesej ke pangkalan data. :
$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();
melaksanakan fungsi pengeluaran, yang boleh menghantar arahan pengeluaran ke pelayan di sisi pelanggan, dan menetapkan status mesej yang sepadan untuk ditarik balik:
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; } } }
melaksanakan fungsi pengeluaran, yang boleh menghantar arahan pengeluaran pada bahagian klien ke pelayan, dan tetapkan status mesej yang sepadan Status ditetapkan untuk ditarik balik:
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; } } }
Ringkasan:
Artikel ini memperkenalkan cara menggunakan PHP untuk membina sistem sembang masa nyata berdasarkan WebSocket dan melaksanakan fungsi pengeluaran dan pembatalan mesej. Ciri-ciri ini boleh dilaksanakan dengan mudah dengan menggunakan perpustakaan dan pangkalan data Ratchet untuk menyimpan dan memproses mesej. Dalam projek sebenar, pengembangan dan pengoptimuman yang sepadan boleh dijalankan mengikut keperluan.
Atas ialah kandungan terperinci Pengeluaran mesej dan fungsi pembatalan sistem sembang masa nyata berdasarkan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!