Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis perbandingan fungsi komunikasi masa nyata PHP dan teknologi tolak pelayan

Analisis perbandingan fungsi komunikasi masa nyata PHP dan teknologi tolak pelayan

王林
王林asal
2023-08-10 14:03:25820semak imbas

Analisis perbandingan fungsi komunikasi masa nyata PHP dan teknologi tolak pelayan

Analisis perbandingan fungsi komunikasi masa nyata PHP dan teknologi tolak pelayan

Dengan perkembangan pesat Internet, fungsi komunikasi masa nyata menjadi semakin penting dalam laman web dan aplikasi. Model respons permintaan HTTP tradisional tidak dapat memenuhi keperluan pengguna untuk maklumat masa nyata, jadi satu siri penyelesaian komunikasi masa nyata telah muncul. Artikel ini akan membandingkan keupayaan komunikasi masa nyata dan teknologi tolak pelayan dalam bahasa PHP dan menunjukkan aplikasinya melalui contoh kod.

  1. Fungsi komunikasi masa nyata dalam PHP

PHP, sebagai bahasa skrip sebelah pelayan, terutamanya berkomunikasi dengan pelanggan melalui protokol HTTP. Aplikasi PHP tradisional menggunakan mekanisme pengundian untuk mencapai kemas kini segera, tetapi kaedah ini tidak cekap dan menggunakan sejumlah besar sumber pelayan. Dengan kemajuan teknologi, pembangun PHP mula meneroka penyelesaian komunikasi masa nyata yang lebih cekap.

1.1 WebSockets

WebSockets ialah protokol komunikasi dupleks penuh yang membolehkan komunikasi masa nyata antara pelayan dan pelanggan. Ia menggunakan protokol HTTP standard untuk berjabat tangan dan kemudian mewujudkan sambungan berterusan. PHP boleh melaksanakan fungsi WebSockets dengan mudah melalui rangka kerja seperti Ratchet dan Swoole. Berikut ialah contoh kod PHP ringkas:

require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface {
    protected $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 ($from !== $client) {
                $client->send($msg);
            }
        }
    }

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

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

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

$server->run();

Kod di atas mencipta pelayan sembang ringkas yang boleh menghantar mesej kepada semua pelanggan yang disambungkan dalam masa nyata.

1.2 Acara Dihantar Pelayan (SSE)

Acara Dihantar Pelayan ialah protokol untuk pelayan menghantar acara kepada klien Ia mewujudkan sambungan berterusan dan menghantar data dalam format teks. Berbanding dengan WebSockets, SSE lebih sesuai untuk komunikasi sehala dan keperluan masa nyata yang lebih rendah. Berikut ialah kod contoh PHP mudah:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');

$lastEventId = isset($_SERVER["HTTP_LAST_EVENT_ID"]) ? $_SERVER["HTTP_LAST_EVENT_ID"] : null;
$counter = $lastEventId ? intval($lastEventId) : 0;

while (true) {
    $counter++;
    echo "id: $counter
";
    echo "data: This is event $counter

";
    flush();
    usleep(1000000); // 1秒延迟
}

Kod di atas mencipta penghantaran acara sebelah pelayan yang mudah, menghantar satu acara kepada pelanggan setiap saat.

  1. Teknologi Tekan Pelayan

Selain melaksanakan fungsi komunikasi masa nyata dalam bahasa PHP, terdapat juga beberapa teknologi tolak pelayan digunakan untuk menyediakan penyelesaian komunikasi masa nyata yang lebih cekap.

2.1 Pelayan WebSocket

Serupa dengan WebSockets di atas, pelayan WebSocket ialah pelayan yang boleh mencapai komunikasi dupleks penuh. Berbanding dengan menggunakan PHP untuk melaksanakan WebSockets, adalah lebih cekap untuk menggunakan pelayan WebSocket khusus. Berikut ialah kod contoh Node.js yang ringkas:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    wss.clients.forEach(function each(client) {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

Kod di atas mencipta pelayan WebSocket yang mudah Apabila pelanggan menghantar mesej, pelayan akan menghantar mesej kepada semua pelanggan yang disambungkan.

2.2 Tinjauan Panjang

Tinjauan panjang ialah teknologi tolak pelayan yang mencapai kesan yang serupa dengan komunikasi masa nyata dengan menetapkan tamat masa yang lama dalam permintaan. Berikut ialah kod contoh PHP mudah:

while (true) {
    $newData = getData();

    if ($newData !== null) {
        echo json_encode($newData);
        break;
    }

    usleep(1000000); // 延迟1秒
}

Kod di atas bergelung untuk menyemak sama ada terdapat data baharu tersedia kepada pelanggan, dan jika ya, mengekod data ke dalam format JSON dan mengeluarkannya.

Ringkasnya, fungsi komunikasi masa nyata dan teknologi tolak pelayan dalam bahasa PHP telah memainkan peranan penting dalam mencapai komunikasi masa nyata. Melalui WebSockets dan SSE, PHP boleh terus menyediakan keupayaan komunikasi masa nyata. Dengan bantuan pelayan WebSocket dan teknologi pengundian yang panjang, komunikasi masa nyata boleh dicapai dengan lebih cekap. Apabila memilih, anda perlu menimbang keperluan khusus dan kerumitan pelaksanaan teknikal.

Atas ialah kandungan terperinci Analisis perbandingan fungsi komunikasi masa nyata PHP dan teknologi tolak pelayan. 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