Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Komunikasi masa nyata menggunakan PHP dan WebSocket

Komunikasi masa nyata menggunakan PHP dan WebSocket

王林
王林asal
2023-06-28 11:22:371164semak imbas

Dengan perkembangan teknologi Internet, semakin banyak laman web dan aplikasi telah mula menumpukan pada merealisasikan komunikasi masa nyata. Protokol WebSocket dianggap sebagai cara yang berkesan untuk mencapai komunikasi masa nyata. Artikel ini akan memperkenalkan cara menggunakan PHP dan WebSocket untuk melaksanakan fungsi komunikasi masa nyata.

Apakah itu WebSocket

WebSocket ialah protokol berasaskan TCP yang boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan untuk mencapai komunikasi masa nyata dua hala. Tidak seperti protokol HTTP, protokol WebSocket ialah protokol dupleks penuh Ia tidak memerlukan penyemak imbas untuk menghantar permintaan untuk menerima respons pelayan, tetapi boleh berkomunikasi secara langsung dalam kedua-dua arah.

Oleh kerana WebSocket menggunakan kaedah sambungan yang panjang, ia boleh meningkatkan kecekapan penghantaran data dan mengurangkan beban pada pelayan. Dalam senario komunikasi masa nyata, WebSocket telah menjadi teknologi yang sangat diperlukan.

PHP dan WebSocket

PHP, sebagai bahasa sebelah pelayan, juga mempunyai beberapa rangka kerja yang menyokong WebSocket. Antara yang lebih terkenal ialah rangka kerja Rachet, rangka kerja swoole, dll.

Dalam artikel ini, kami menggunakan rangka kerja Rachet untuk melaksanakan fungsi komunikasi masa nyata. Rangka kerja Rachet ialah rangka kerja sumber terbuka untuk PHP Ia menyediakan pelaksanaan bahagian pelayan WebSocket dan boleh menyokong pelbagai pelayan web, seperti Apache, Nginx, dll.

Langkah pelaksanaan

1. Pasang rangka kerja Rachet

Gunakan Komposer untuk memasang rangka kerja Rachet:

composer require cboden/ratchet

2 Tulis kod PHP

Berikut ialah kod PHP mudah yang menggunakan rangka kerja Rachet untuk mencapai komunikasi masa nyata. :

<?php
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

require 'vendor/autoload.php';

class MyChat 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 MyChat()
        )
    ),
    8080
);

$server->run();

Dalam kod Kelas bernama MyChat ditakrifkan, yang melaksanakan antara muka MessageComponentInterface dalam rangka kerja Ratchet. Ia mengandungi 4 kaedah berikut:

  • onOpen() dipanggil apabila sambungan baharu diwujudkan.
  • onOpen() 当有新的连接建立时被调用。
  • onMessage() 当代码接收到消息时被调用。
  • onClose() 当连接被关闭时被调用。
  • onError() 当出现错误时被调用。

其中,onOpen() 方法记录了新连接建立的信息,onMessage() 方法将接收到的消息广播给所有连接的客户端,而onClose() 方法记录连接关闭的信息。

最后,代码通过IoServer::factory()onMessage() Dipanggil apabila kod menerima mesej.

onClose() Dipanggil apabila sambungan ditutup.

onError() Dipanggil apabila ralat berlaku.

Antaranya, kaedah onOpen() merekodkan maklumat yang diwujudkan oleh sambungan baharu dan kaedah onMessage() menyiarkan mesej yang diterima kepada semua sambungan, dan kaedah onClose() merekodkan maklumat penutupan sambungan.

Akhir sekali, kod menggunakan IoServer::factory() untuk mencipta pelayan dan mendayakan pemantauan.

3. Test

Mulakan pelayan dalam baris arahan:

php chat-server.php

Kemudian buka berbilang halaman klien dalam penyemak imbas, setiap halaman boleh menghantar dan menerima mesej masa nyata untuk mencapai kesan komunikasi masa nyata. 🎜🎜Ringkasan🎜🎜Artikel ini memperkenalkan cara menggunakan rangka kerja PHP dan Rachet untuk melaksanakan fungsi komunikasi masa nyata. Dengan menggunakan protokol WebSocket, sambungan berterusan boleh diwujudkan antara penyemak imbas dan pelayan dan komunikasi masa nyata dua hala boleh dicapai. Dalam senario komunikasi masa nyata, penggunaan protokol WebSocket telah menjadi teknologi yang sangat diperlukan, dan rangka kerja Rachet memberikan kami kaedah pelaksanaan yang mudah dan cekap. 🎜

Atas ialah kandungan terperinci Komunikasi masa nyata menggunakan PHP dan WebSocket. 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