Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan API WebSockets untuk komunikasi masa nyata dalam PHP

Cara menggunakan API WebSockets untuk komunikasi masa nyata dalam PHP

PHPz
PHPzasal
2023-06-17 14:42:302046semak imbas

WebSockets API ialah protokol baharu untuk interaksi masa nyata pada halaman web Kelebihan terbesarnya ialah ia boleh mencapai komunikasi dua hala, membolehkan komunikasi masa nyata antara pelayan dan pelanggan. Dalam PHP, kita boleh menggunakan perpustakaan Ratchet untuk melaksanakan fungsi WebSockets. Artikel ini akan memperkenalkan secara terperinci cara menggunakan API WebSockets dalam PHP untuk mencapai komunikasi masa nyata.

1. Pasang perpustakaan Ratchet

Sebelum mula melaksanakan fungsi WebSockets, kita perlu memasang perpustakaan Ratchet. Pustaka Ratchet ialah pelayan WebSockets yang dilaksanakan PHP yang boleh membantu kami melaksanakan fungsi WebSockets dengan cepat. Sangat mudah untuk memasang perpustakaan Ratchet melalui Komposer Kita hanya perlu menjalankan arahan berikut dalam direktori projek:

composer require cboden/ratchet

2. Buat pelayan WebSockets

Selepas memasang perpustakaan Ratchet, kita boleh mencipta pelayan WebSockets. Dalam PHP, laksanakan pelayan WebSockets dengan mencipta kelas yang mewarisi daripada RatchetServerIoServer. Mula-mula kita perlu memperkenalkan perpustakaan Ratchet, kemudian mencipta kelas bernama WebSocketServer dan menjana contoh pelayan WebSocket.

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class WebSocketServer {
    public function __construct() {
        $server = IoServer::factory(
            new HttpServer(
                new WsServer(
                    new Chat()
                )
            ),
            8080
        );
        $server->run();
    }
}

Dalam kod di atas, kami mencipta contoh pelayan WebSocket dan menjalankannya pada port 8080. Sebelum pelayan WebSockets berjalan, kita perlu mencipta kelas bernama Chat untuk melaksanakan logik perniagaan pelayan. Kelas Sembang akan digunakan untuk mengendalikan operasi seperti sambungan pelanggan, pemutusan sambungan dan menerima mesej.

3. Mengendalikan sambungan dan pemutusan sambungan pelanggan

Seterusnya, kami perlu melaksanakan operasi sambungan pelanggan, pemutusan sambungan dan penerimaan mesej dalam kelas Sembang. Apabila pelanggan menyambung, kami perlu log masuk dan menghantar mesej alu-aluan. Apabila pelanggan memutuskan sambungan, kami perlu mengeluarkannya daripada rekod. Berikut ialah kod untuk mengendalikan sambungan dan pemutusan sambungan klien:

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);
        echo "New client connected: {$conn->resourceId}
";
        $conn->send("Welcome!
");
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Client disconnected: {$conn->resourceId}
";
    }
}

Dalam kod di atas, dalam pembina kelas Chat, kami mencipta objek SplObjectStorage bernama klien untuk menyimpan semua sambungan klien. Dalam kaedah onOpen, apabila pelanggan menyambung, kami menyimpannya dalam pelanggan dan menghantar mesej alu-aluan kepada pelanggan. Dalam kaedah onClose, apabila pelanggan memutuskan sambungan, kami mengeluarkannya daripada pelanggan.

4. Memproses penghantaran dan penyiaran mesej

Selepas pemprosesan logik sambungan dan pemutusan sambungan pelanggan selesai, kami perlu melaksanakan logik menerima mesej, menghantar mesej dan mesej penyiaran. Dalam kelas Sembang, kita perlu melaksanakan kaedah onMessage untuk mengendalikan mesej yang diterima dan menghantar mesej berbeza kepada pengirim dan pelanggan lain.

public function onMessage(ConnectionInterface $from, $msg) {
    $data = json_decode($msg);
    $numRecv = count($this->clients) - 1;
    if ($data->type === 'message') {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                // The sender is not the receiver, send to each client connected
                $client->send(json_encode([
                    'type' => 'message',
                    'user' => $data->user,
                    'message' => $data->message
                ]));
            } else {
                $from->send(json_encode([
                    'type' => 'message',
                    'user' => 'You',
                    'message' => $data->message
                ]));
            }
        }
    }
}

Dalam kod di atas, kami mula-mula menghuraikan mesej yang diterima dan melakukan pemprosesan yang berbeza mengikut jenis mesej yang berbeza. Apabila jenis mesej ialah mesej, kita perlu menyiarkan mesej kepada semua pelanggan. Jika pengirim bukan penerima, mesej berasingan dihantar kepada penerima dan pengirim.

Akhir sekali, kami perlu membuat instantiate kelas Chat dalam kelas WebSocketServer dan memulakan pelayan WebSockets:

new WebSocketServer();

Melalui langkah di atas, kami telah berjaya menggunakan perpustakaan Ratchet untuk melaksanakan komunikasi masa nyata dengan fungsi WebSockets Pelanggan boleh menyambung ke pelayan WebSockets dan menghantar serta menerima mesej melalui JavaScript, dan JavaScript pada klien boleh dilaksanakan dengan bantuan API WebSockets. Ini tidak akan dijelaskan secara terperinci di sini.

Atas ialah kandungan terperinci Cara menggunakan API WebSockets untuk komunikasi masa nyata dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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