Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggabungkan PHP dengan WebSocket untuk mencapai komunikasi masa nyata?

Bagaimana untuk menggabungkan PHP dengan WebSocket untuk mencapai komunikasi masa nyata?

王林
王林asal
2023-08-19 09:43:441010semak imbas

Bagaimana untuk menggabungkan PHP dengan WebSocket untuk mencapai komunikasi masa nyata?

Bagaimana untuk menggabungkan PHP dengan WebSocket untuk mencapai komunikasi masa nyata?

Dengan perkembangan pesat Internet, komunikasi masa nyata menjadi semakin penting dalam banyak aplikasi. WebSocket ialah protokol untuk komunikasi masa nyata yang mewujudkan sambungan berterusan berdasarkan TCP, membenarkan komunikasi dua hala antara pelayan dan klien.

Dalam artikel ini, kita akan membincangkan cara menggunakan PHP digabungkan dengan WebSocket untuk mencapai komunikasi masa nyata. Pertama, kita perlu memastikan bahawa kita telah memasang PHP dan pelayan yang didayakan WebSocket.

Langkah 1: Tetapan sisi pelayan

Untuk melaksanakan komunikasi WebSocket, kami perlu mendayakannya di bahagian pelayan. Ini boleh dicapai dengan menggunakan perpustakaan ratchet PHP. Mula-mula, pasang perpustakaan ratchet melalui Komposer:

composer require cboden/ratchet

Selepas pemasangan selesai, kita boleh mencipta fail pelayan WebSocket websocket.php dan menambah kod berikut di dalamnya:

require 'vendor/autoload.php';

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

class WebSocketServer 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 onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection closed: {$conn->resourceId}
";
    }

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

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

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

$server->run();

Dalam kod di atas, kami mencipta kelas yang dipanggil WebSocketServer , melaksanakan antara muka MessageComponentInterface Ratchet. Dalam kelas ini, kami mentakrifkan onOpen, onClose, onError, onMessage dan kaedah lain untuk mengendalikan pembukaan, penutupan, ralat dan penghantaran mesej sambungan WebSocket.

Buat contoh pelayan WebSocket melalui kaedah IoServer::factory() dan nyatakan kelas HttpServer, WsServer dan WebSocketServer. Akhirnya, kami mempunyai pelayan yang berjalan pada port 8080.

Langkah 2: Persediaan Pelanggan

Di sisi pelanggan, kami boleh menggunakan JavaScript untuk berkomunikasi dengan pelayan WebSocket PHP. Berikut ialah contoh fail klien index.html:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Example</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <input type="text" id="messageInput" placeholder="Enter your message">
    <button id="sendButton">Send</button>
    <ul id="messageList"></ul>

    <script>
        var conn = new WebSocket('ws://localhost:8080');

        conn.onopen = function() {
            console.log('Connected to the server');
        };

        conn.onclose = function() {
            console.log('Connection closed');
        };

        conn.onerror = function(error) {
            console.log('Error occurred: ' + error);
        };

        conn.onmessage = function(msg) {
            $('#messageList').append('<li>' + msg.data + '</li>');
        };

        $('#sendButton').click(function() {
            var message = $('#messageInput').val();
            conn.send(message);
        });
    </script>
</body>
</html>

Dalam kod di atas, kami menggunakan objek WebSocket JavaScript untuk membuat sambungan dengan pelayan. Fungsi panggil balik yang sepadan dilaksanakan apabila sambungan dibuka, ditutup, apabila ralat berlaku dan apabila mesej diterima.

Dalam halaman, kami menambahkan kotak teks dan butang untuk memasukkan dan menghantar mesej. Apabila mesej diterima, mesej itu ditambah ke senarai tidak tertib.

Langkah 3: Jalankan kod

Masukkan direktori di mana fail pelayan terletak pada baris arahan, dan laksanakan arahan berikut untuk memulakan pelayan:

php websocket.php

Kemudian, buka fail index.html dalam penyemak imbas, dan kita boleh memulakan komunikasi masa nyata. Masukkan mesej dalam kotak input dan klik butang Hantar, mesej akan dihantar ke pelayan melalui WebSocket dan dimajukan oleh pelayan kepada semua pelanggan yang bersambung.

Ringkasan

Dengan menggunakan PHP digabungkan dengan WebSocket, kami boleh mencapai fungsi komunikasi masa nyata yang ringkas dan berkuasa. Kod sampel dalam artikel ini menunjukkan cara menyediakan pelayan dan klien untuk komunikasi masa nyata asas. Berdasarkan keperluan sebenar, kami boleh melanjutkan dan menambah baik kod ini dan melaksanakan fungsi yang lebih kompleks.

Atas ialah kandungan terperinci Bagaimana untuk menggabungkan PHP dengan WebSocket untuk mencapai komunikasi masa nyata?. 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