Rumah >pembangunan bahagian belakang >tutorial php >PHP dan WebSocket: Amalan terbaik untuk pemindahan data masa nyata

PHP dan WebSocket: Amalan terbaik untuk pemindahan data masa nyata

WBOY
WBOYasal
2023-12-17 21:21:33663semak imbas

PHP和WebSocket: 实现实时数据传输的最佳实践

Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet, permintaan untuk komunikasi masa nyata telah menjadi lebih kuat dan lebih kukuh, dan kemunculan WebSocket menyediakan penyelesaian yang lebih elegan untuk penghantaran data masa nyata. Dalam pembangunan web, bahasa PHP juga menduduki tempat di kalangan bahasa back-end arus perdana. Jadi, bagaimana untuk menggunakan PHP dan WebSocket untuk mencapai penghantaran data masa nyata?

1. Apakah itu WebSocket

WebSocket ialah protokol komunikasi dupleks penuh yang berkomunikasi melalui port 80 atau 443 protokol HTTP/HTTPS. Apabila WebSocket mewujudkan sambungan, kedua-dua pelanggan dan pelayan boleh menghantar mesej antara satu sama lain tanpa memerlukan mod "tindak balas permintaan" Oleh itu, ia mempunyai kelebihan prestasi masa nyata yang kuat, komunikasi dua hala dan rendah overhead, dan sesuai untuk sembang masa nyata , permainan dalam talian dan senario lain yang memerlukan interaksi pantas.

2. Menggunakan WebSocket dalam PHP

Rangka kerja PHP yang biasa digunakan dalam pembangunan web termasuk Laravel, CodeIgniter, dsb. Berikut akan mengambil Laravel sebagai contoh untuk memperkenalkan cara menggunakan PHP dan WebSocket untuk mencapai penghantaran data masa nyata.

  1. Pasang Ratchet

Ratchet ialah perpustakaan WebSocket untuk PHP yang boleh digunakan untuk melaksanakan pelayan WebSocket. Dalam projek Laravel, ia boleh dipasang melalui komposer Perintahnya adalah seperti berikut:

$ composer require cboden/ratchet
  1. Buat pengawal WebSocket

Buat pengawal WebSocket dalam direktori app/Http/Controllers bagi projek Laravel dan namakannya ChatController. Pengawal ini mewarisi antara muka MessageComponentInterface Ratchet dan menulis semula kaedah onOpen, onMessage, onClose dan onError seperti yang ditunjukkan di bawah:

<?php

namespace AppHttpControllers;

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class ChatController 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();
    }
}

Dalam pengawal ini, $clients ialah koleksi objek sambungan klien, dan kaedah onOpen mewakili Terdapat kaedah panggil balik apabila klien baru menyambung. Kaedah onMessage mewakili kaedah panggilan balik apabila mesej klien diterima. Kaedah onClose mewakili kaedah panggilan balik apabila klien memutuskan sambungan.

  1. Buat perkhidmatan WebSocket

Tambahkan kod berikut dalam fail penghalaan route/web.php projek Laravel:

use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use AppHttpControllersChatController;

Route::get('/chat', function () {
    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new ChatController()
            )
        ),
        8080
    );
    $server->run();
});

Kod ini menunjukkan bahawa perkhidmatan WebSocket dicipta, mendengar pada port 8080 tempatan dan pengawal yang sepadan dengan perkhidmatan ialah ChatController.

  1. Kod pelanggan

Di halaman hujung hadapan, anda boleh mewujudkan sambungan dengan perkhidmatan WebSocket melalui kod JavaScript, seperti yang ditunjukkan di bawah:

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

conn.onopen = function (e) {
    console.log("Connection established!");
};

conn.onmessage = function (e) {
    console.log("Received: " + e.data);
};

conn.onclose = function (e) {
    console.log("Connection closed!");
};

conn.onerror = function (e) {
    console.log("Error occurred: " + e.data);
};

function sendMessage() {
    var input = document.getElementById("messageInput");
    conn.send(input.value);
    input.value = "";
}

Kod ini menunjukkan bahawa sambungan antara WebSocket dan pelayan telah diwujudkan, dan ia dikeluarkan apabila mesej daripada pelayan diterima Pergi ke konsol dan panggil kaedah hantar semasa menghantar mesej.

  1. Uji

Selepas memulakan projek Laravel, lawati http://localhost/chat dalam penyemak imbas untuk mewujudkan sambungan dengan pelayan melalui WebSocket untuk mencapai penghantaran data masa nyata.

Di atas adalah contoh kod untuk menggunakan PHP dan WebSocket untuk mencapai penghantaran data masa nyata Ia boleh dibangunkan dengan lebih terperinci mengikut keperluan sebenar untuk meningkatkan prestasi masa nyata dan prestasi aplikasi.

Atas ialah kandungan terperinci PHP dan WebSocket: Amalan terbaik untuk pemindahan data 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