Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk menggunakan WebSocket dalam PHP

Bagaimana untuk menggunakan WebSocket dalam PHP

WBOY
WBOYasal
2023-06-11 18:09:142602semak imbas

Dengan perkembangan teknologi rangkaian, WebSocket (Web Socket) telah menjadi protokol popular, yang boleh mewujudkan saluran komunikasi masa nyata antara penyemak imbas dan pelayan untuk mengekalkan sambungan. Protokol ini memainkan peranan yang besar dalam membolehkan keupayaan komunikasi masa nyata dalam aplikasi web.

Dalam bidang pembangunan PHP, WebSocket semakin digunakan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan WebSocket dalam PHP.

  1. Pasang perpustakaan WebSocket

Pertama, kita perlu menggunakan perpustakaan WebSocket PHP untuk melaksanakan fungsi WebSocket dalam PHP dengan mudah. Pada masa ini perpustakaan PHP WebSocket yang paling popular ialah Ratchet dan PHP WebSocket.

Di sini kami menggunakan Ratchet, yang menggunakan perpustakaan ReactPHP untuk melaksanakan PHP dipacu peristiwa tak segerak, dan serasi sempurna dengan rangka kerja lain serta mempunyai fleksibiliti dan kebolehskalaan.

Sebelum kita mula, kita perlu memasang Komposer terlebih dahulu, kerana Ratchet dipasang dan diurus menggunakan Komposer.

Komposer boleh dimuat turun di sini: https://getcomposer.org/

Pasang Ratchet menggunakan Komposer:

composer require cboden/ratchet
  1. Tulis pelayan WebSocket PHP

Dalam contoh ini, kami akan melaksanakan ruang sembang ringkas dan menggunakan Ratchet untuk menulis pelayan WebSocket. Berikut ialah langkah-langkah untuk melaksanakan:

a. Cipta pelayan WebSocket

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

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

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

$server->run();

Di sini, perpustakaan Ratchet mula-mula diperkenalkan, dan kemudian pelayan WebSocket dicipta, menggunakan HttpServer dan WsServer untuk menentukan Sokongan protokol HTTP dan WebSocket masing-masing dan hantarkannya ke kelas Sembang (akan ditunjukkan kemudian bahawa kelas Sembang digunakan untuk mengendalikan permintaan sambungan pelanggan).

Di sini kita mendengar port 8080.

b. Cipta bilik sembang

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface
{
    public $clients;

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

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
    }

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

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        $conn->close();
    }
}

Di sini, kami mencipta kelas bernama Chat, yang melaksanakan antara muka MessageComponentInterface. Antara muka ini mentakrifkan operasi yang dilakukan oleh pelayan WebSocket dalam keadaan sambungan yang berbeza.

Secara khusus, kami mengisytiharkan pembolehubah klien dalam pembina, iaitu objek SplObjectStorage yang menyimpan klien yang disambungkan. Dalam kaedah onOpen, objek sambungan diberikan kepada pembolehubah ini.

Apabila terdapat mesej daripada mana-mana pelanggan, kami menyiarkan mesej tersebut melalui kaedah onMessage, yang akan diterima untuk setiap sambungan.

Dalam kaedah onClose, objek sambungan akan dialih keluar daripada pembolehubah. Jika ralat berlaku dan sambungan klien tidak dapat dikendalikan, maka fungsi onError kami akan dipanggil.

  1. Tulis kod JavaScript sisi klien

Seterusnya, kami memerlukan kod JavaScript sisi klien untuk menyambung ke pelayan WebSocket.

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};

Di sini kami terus menggunakan API objek WebSocket untuk menyambung dan menghantar serta menerima mesej ke pelayan.

  1. Jalankan Pelayan WebSocket

Apabila anda melengkapkan langkah di atas, anda telah berjaya menulis pelayan WebSocket. Sekarang jalankan pelayan anda, sama ada melalui baris arahan:

php server.php

Apabila baris arahan memulakan pelayan, anda akan melihat sesuatu yang serupa dengan yang berikut:

2019-03-22 11:46:55 WebSocketServer: Listening on 0.0.0.0:8080
2019-03-22 11:52:50 WebSocketServer: Opened connection to http://localhost:54616

bermakna perkhidmatan WebSocket telah bermula dengan jayanya Dan dengar pada port 8080.

  1. Uji sambungan WebSocket

Akhir sekali, buka penyemak imbas dan lawati http://localhost/chat.html Anda boleh melihat bahawa penyemak imbas bersambung dan menyertai WebSocket pelayan.

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
  socket.send('欢迎加入聊天室');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};

Di sini, kami menghantar mesej kepada pelayan dan log masuk ke konsol apabila mesej pelayan diterima.

Apabila anda menjalankan halaman web ujian, anda akan melihat output yang serupa dengan yang berikut dalam konsol:

WebSocket已连接
WebSocket收到消息:欢迎加入聊天室

Kini, anda telah berjaya menggunakan WebSocket dalam PHP dan mencipta ruang sembang ringkas. Semoga tutorial ini dapat membantu anda.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan WebSocket 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