Rumah > pembangunan bahagian belakang > tutorial php > Analisis prinsip pelaksanaan bahagian pelayan dan bahagian klien bagi fungsi komunikasi masa nyata PHP

Analisis prinsip pelaksanaan bahagian pelayan dan bahagian klien bagi fungsi komunikasi masa nyata PHP

王林
Lepaskan: 2023-08-12 10:08:01
asal
1599 orang telah melayarinya

Analisis prinsip pelaksanaan bahagian pelayan dan bahagian klien bagi fungsi komunikasi masa nyata PHP

Analisis prinsip pelaksanaan bahagian pelayan dan sisi klien bagi fungsi komunikasi masa nyata PHP

Dalam pembangunan Web, fungsi komunikasi masa nyata telah menjadi keperluan asas untuk banyak aplikasi. Dalam pembangunan PHP, untuk merealisasikan fungsi komunikasi masa nyata, pemprosesan khas diperlukan untuk pelayan dan pelanggan. Artikel ini akan membantu pembaca memahami dengan lebih baik proses pelaksanaan fungsi komunikasi masa nyata PHP dengan menganalisis prinsip pelaksanaan bahagian pelayan dan bahagian klien serta melampirkan contoh kod.

1. Prinsip pelaksanaan bahagian pelayan

Pelaksanaan fungsi komunikasi masa nyata pada bahagian pelayan biasanya menggunakan protokol WebSocket. WebSocket ialah protokol untuk komunikasi dupleks penuh melalui sambungan TCP tunggal Berbanding dengan protokol HTTP, ia mempunyai kependaman yang lebih rendah dan prestasi yang lebih tinggi.

Dalam PHP, fungsi bahagian pelayan WebSocket boleh dilaksanakan dengan menggunakan perpustakaan Ratchet. Ratchet ialah perpustakaan berdasarkan Symfony dan ReactPHP yang boleh membantu kami membina pelayan WebSocket dengan cepat.

Berikut ialah contoh kod ringkas menggunakan perpustakaan Ratchet untuk membina pelayan WebSocket:

<?php

require 'vendor/autoload.php';

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

class MyWebSocketServer 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 {$conn->resourceId} has disconnected
";
    }

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

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

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

$server->run();
Salin selepas log masuk

Dalam contoh di atas, kami memperibadikan kelas bernama MyWebSocketServer, melaksanakan antara muka Ratchet's MessageComponentInterface, dan menulis semula beberapa daripadanya Kaedah: onOpen, onClose , onMessage dan onError. Kaedah ini digunakan untuk mengendalikan penubuhan sambungan WebSocket, penutupan, penerimaan mesej dan pengendalian ralat masing-masing.

Dengan kod di atas, kami boleh membina pelayan WebSocket yang mudah. Apabila pelanggan mewujudkan sambungan dengan pelayan melalui protokol WebSocket, pelayan akan merekodkan sambungan dan menghantar mesej yang diterima kepada semua pelanggan melalui kaedah onMessage.

2. Prinsip pelaksanaan pelanggan

Apabila pelanggan melaksanakan fungsi komunikasi masa nyata, kami sering menggunakan perpustakaan JavaScript, seperti Socket.IO. Socket.IO ialah perpustakaan JavaScript untuk aplikasi masa nyata yang boleh membantu kami mewujudkan komunikasi dua hala masa nyata antara penyemak imbas dan peranti yang berbeza.

Berikut ialah contoh kod mudah menggunakan perpustakaan Socket.IO untuk melaksanakan klien WebSocket:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
</head>
<body>
    <script>
        var socket = io('http://localhost:8080');

        socket.on('connect', function() {
            console.log('Connected');
        });

        socket.on('disconnect', function() {
            console.log('Disconnected');
        });

        socket.on('message', function(data) {
            console.log('Received:', data);
        });

        socket.emit('message', 'Hello Server');
    </script>
</body>
</html>
Salin selepas log masuk

Dalam contoh di atas, kami mewujudkan sambungan dengan pelayan melalui perpustakaan Socket.IO dan mendengar pada dan memancarkan peristiwa. Apabila sambungan berjaya diwujudkan dengan pelayan, acara sambungan akan dicetuskan, dan apabila sambungan dengan pelayan diputuskan, acara putus sambungan akan dicetuskan. Pada masa yang sama, kami juga boleh menghantar mesej kepada pelayan melalui kaedah emit, dan menerima mesej daripada pelayan dengan mendengar acara mesej.

Dengan kod di atas, kami boleh membina klien WebSocket yang mudah untuk mencapai komunikasi masa nyata dengan pelayan.

Kesimpulan

Artikel ini menganalisis secara terperinci prinsip pelaksanaan bahagian pelayan dan bahagian klien fungsi komunikasi masa nyata PHP, dan disertakan dengan contoh kod yang sepadan. Dengan mengkaji kandungan di atas, pembaca boleh mempunyai pemahaman yang lebih mendalam tentang kaedah dan teknik PHP untuk merealisasikan komunikasi masa nyata, dan meletakkan asas untuk membangunkan aplikasi yang sepadan pada masa hadapan. Semoga artikel ini bermanfaat kepada anda.

Atas ialah kandungan terperinci Analisis prinsip pelaksanaan bahagian pelayan dan bahagian klien bagi fungsi komunikasi masa nyata PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan