Pengeluaran mesej dan fungsi pembatalan sistem sembang masa nyata berdasarkan PHP

王林
Lepaskan: 2023-08-26 09:18:01
asal
1160 orang telah melayarinya

Pengeluaran mesej dan fungsi pembatalan sistem sembang masa nyata berdasarkan PHP

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.

  1. Bina persekitaran
    Pertama, kita perlu menyediakan persekitaran PHP dan perkhidmatan WebSocket. Anda boleh memilih untuk menggunakan rangka kerja PHP seperti Laravel atau Symfony, atau terus menggunakan perpustakaan WebSocket asli PHP. Dalam rangka kerja, anda boleh menggunakan Komposer untuk mengurus kebergantungan.
  2. Buat Pangkalan Data
    Kami memerlukan pangkalan data untuk menyimpan mesej sembang. MySQL atau pangkalan data hubungan lain boleh digunakan. Buat jadual bernama chat_messages, yang mengandungi medan berikut:
  3. id: pengecam unik mesej
  4. sender_id: ID pengguna pengirim
  5. receiver_id: ID pengguna penerima
  6. mesej: kandungan mesej
  7. : kandungan mesej
  8. sebenar -fungsi sembang masa
    Gunakan protokol WebSocket untuk merealisasikan komunikasi masa nyata. Dalam PHP, pelayan WebSocket boleh dilaksanakan menggunakan perpustakaan seperti Ratchet atau Swoole. Dengan mendengar mesej pelanggan dan peristiwa sambungan, mesej disimpan ke pangkalan data dan dihantar kepada penerima dalam masa nyata.

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();
Salin selepas log masuk
  1. Melaksanakan fungsi penarikan dan pembatalan mesej
    Untuk melaksanakan fungsi penarikan dan pembatalan mesej, kita perlu menambah lajur pada jadual pangkalan data untuk mengenal pasti status mesej itu. Anda boleh menambah medan bernama status untuk menunjukkan status mesej:
  2. 1: Biasa
  3. 2: Tarik balik
  4. 3: Batal

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();
Salin selepas log masuk

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;
        }
    }
}
Salin selepas log masuk

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;
        }
    }
}
Salin selepas log masuk
  1. Pemprosesan pihak pelanggan
    Di sisi klien, paparkan dengan sewajarnya sama ada mesej telah ditarik balik atau dibatalkan, berdasarkan status mesej yang dikembalikan.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan