WebSockets dalam PHP

PHPz
PHPzasal
2023-05-29 08:10:351938semak imbas

WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP Ia melaksanakan komunikasi dua hala dan boleh mencapai interaksi data masa nyata antara pelanggan dan pelayan. Dalam aplikasi Web, melalui teknologi WebSocket, pengguna boleh memperoleh pengalaman masa nyata yang lebih pantas dan lebih daripada protokol HTTP tradisional. Dalam bahasa PHP, pelaksanaan WebSocket juga sangat mudah.

Terdapat dua cara utama untuk melaksanakan WebSocket dalam PHP: satu adalah melalui sambungan swoole, dan satu lagi melalui perpustakaan Ratchet.

Pelanjutan Swoole ialah rangka kerja komunikasi rangkaian sumber terbuka yang boleh melaksanakan ciri tak segerak, coroutine, berbilang proses dan ciri lain. Menggunakan sambungan swoole untuk melaksanakan WebSocket boleh meningkatkan kecekapan dan kestabilan komunikasi rangkaian. Berikut ialah contoh kod yang menggunakan sambungan swoole untuk melaksanakan WebSocket:

<?php

$server = new SwooleWebsocketServer("127.0.0.1", 9502);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "client {$request->fd} connected
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();

Dalam kod di atas, objek pelayan WebSocket pertama kali dibuat melalui kelas SwooleWebsocketServer, dan kemudian sambungan diwujudkan dalam open, mesej dan fungsi panggilan balik acara tutup masing-masing Operasi seperti membaca dan menulis mesej dan menutup sambungan. Perlu diingatkan bahawa pelayan WebSocket yang disediakan oleh sambungan swoole adalah tak segerak dan tidak menyekat, jadi ia boleh menyokong aplikasi komunikasi rangkaian konkurensi tinggi.

Cara lain untuk melaksanakan WebSocket ialah menggunakan perpustakaan Ratchet. Ratchet ialah perpustakaan pelaksanaan pelayan WebSocket yang dilaksanakan dalam PHP Ia mempunyai pelbagai fungsi panggilan balik acara terbina dalam, yang boleh merealisasikan interaksi antara klien dan pelayan dengan mudah. Berikut ialah kod sampel yang menggunakan perpustakaan Ratchet untuk melaksanakan WebSocket:

<?php

require dirname(__DIR__) . '/vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetWebSocketWsServer;
use RatchetHttpHttpServer;
use RatchetServerIoServer;

class EchoServer implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($from !== $client) {
                $client->send($msg);
            }
        }
    }

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

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "An error has occurred: {$e->getMessage()}
";
        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new EchoServer()
        )
    ),
    8080
);

$server->run();

Dalam kod di atas, perpustakaan Ratchet pertama kali diperkenalkan, dan kemudian kelas EchoServer ditakrifkan, yang melaksanakan antara muka MessageComponentInterface, antaranya onOpen, onMessage, onClose dan Fungsi onError mengendalikan acara seperti penetapan sambungan, membaca dan menulis mesej, penutupan sambungan dan pengendalian ralat masing-masing. Akhirnya, objek pelayan WebSocket dicipta dan dijalankan melalui fungsi IoServer::factory.

Ringkasnya, sama ada anda menggunakan sambungan swoole atau perpustakaan Ratchet, adalah sangat mudah untuk melaksanakan WebSocket dalam PHP. Pembangun boleh memilih penyelesaian yang sesuai berdasarkan keperluan sebenar untuk melaksanakan fungsi komunikasi masa nyata dengan cepat dan cekap dalam aplikasi web.

Atas ialah kandungan terperinci WebSockets 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