Rumah >rangka kerja php >Swoole >Bagaimana Swooole menyokong fungsi penyiaran Websocket

Bagaimana Swooole menyokong fungsi penyiaran Websocket

PHPz
PHPzasal
2023-06-25 14:49:281367semak imbas

Dengan perkembangan teknologi Internet yang berterusan, Websocket telah menjadi protokol komunikasi yang sangat popular. Sebagai rangka kerja komunikasi rangkaian berprestasi tinggi, Swoole juga telah mula menyokong kuat Websocket. Artikel ini akan memperkenalkan secara terperinci cara Swoole menyokong fungsi penyiaran Websocket.

Ciri-ciri protokol komunikasi Websocket

Sebelum kita bercakap tentang cara Swoole menyokong fungsi penyiaran Websocket, mari kita perkenalkan secara ringkas ciri-ciri protokol komunikasi Websocket.

Websocket ialah protokol berasaskan TCP dan protokol komunikasi dua hala Berbanding dengan protokol HTTP, ia lebih sesuai untuk senario komunikasi masa nyata. Proses sambungan protokol Websocket adalah serupa dengan protokol HTTP Selepas sambungan berjaya, pelanggan dan pelayan boleh menghantar mesej secara bebas dan memutuskan sambungan pada bila-bila masa.

Dalam protokol komunikasi Websocket, terdapat tiga jenis mesej yang biasa digunakan, iaitu mesej teks, mesej binari dan mesej Ping/Pong. Antaranya, mesej teks dan mesej binari adalah penghantaran data biasa, manakala mesej Ping/Pong digunakan untuk mengesan sama ada sambungan dikekalkan.

Oleh kerana protokol komunikasi Websocket lebih sesuai untuk senario komunikasi masa nyata, selalunya diperlukan untuk menyokong fungsi penyiaran semasa proses pelaksanaan.

Sokongan Swoole untuk Websocket

Swoole, sebagai rangka kerja komunikasi rangkaian berprestasi tinggi, mula menyokong kuat protokol komunikasi Websocket selepas versi 0.4.0. Pada masa ini, versi Websocket yang disokong oleh Swoole termasuk yang berikut:

  1. RFC 6455 (menyokong proses jabat tangan dan semua bingkai data standard).
  2. Hybi-10 (kecuali bingkai luar).

Sokongan Swoole untuk Websocket termasuk bahagian berikut:

  1. Pelayan Websocket: Menyediakan program pelayan Websocket, mengendalikan jabat tangan Websocket dan penghantaran data, dsb.
  2. Pelanggan Websocket: Menyediakan program klien Websocket, menyokong sambungan Websocket dan penghantaran data, dsb.
  3. Alat baris perintah lanjutan: Menyediakan alat baris perintah swole serupa dengan nc, yang boleh digunakan untuk menguji pelayan dan klien Websocket.
  4. Siaran sokongan: Menyokong fungsi siaran Websocket, yang boleh menyiarkan mesej antara berbilang pelanggan Websocket.

Seterusnya, kami akan memperkenalkan terutamanya cara Swoole menyokong fungsi penyiaran Websocket.

Fungsi siaran Websocket Swoole

Untuk melaksanakan fungsi siaran Websocket, kita perlu terlebih dahulu melaksanakan pelayan Websocket dan menyambungkan berbilang klien Websocket ke pelayan. Kemudian, laksanakan fungsi penyiaran dalam pelayan untuk menghantar mesej kepada semua pelanggan yang disambungkan ke pelayan.

Sekarang, mari kita lihat langkah pelaksanaan khusus.

  1. Melaksanakan pelayan Websocket

Pertama, kita perlu melaksanakan pelayan Websocket. Untuk langkah pelaksanaan khusus, sila rujuk kod sampel dalam dokumentasi rasmi.

Apabila melaksanakan pelayan Websocket, anda perlu memberi perhatian kepada perkara berikut:

  1. Apabila mendengar sambungan pelanggan, anda perlu menetapkan $flag kepada SWOOLE_WEBSOCKET, yang bermaksud menggunakan protokol Websocket.
  2. Apabila menerima mesej pelanggan, anda perlu menggunakan fungsi panggil balik onMessage dan tentukan jenis mesej untuk mengendalikannya dengan sewajarnya.

Kod sampel adalah seperti berikut:

$server = new SwooleWebsocketServer("127.0.0.1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$server->set([
    'ssl_cert_file' => '/your_server_path/ssl.crt',
    'ssl_key_file' => '/your_server_path/ssl.key',
]);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "client {$request->fd} connected
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
    // 进行消息处理
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();
  1. Sambungkan berbilang pelanggan Websocket

Seterusnya, kita perlu menyambungkan berbilang pelanggan Websocket ke pelayan. Untuk langkah pelaksanaan tertentu, anda juga boleh merujuk kepada kod sampel dalam dokumentasi rasmi.

Kod contoh adalah seperti berikut:

var ws = new WebSocket("ws://127.0.0.1:9501");

ws.onopen = function(event) {
    ws.send("Hello, Websocket!");
};

ws.onmessage = function(event) {
    console.log("received message: " + event.data);
};

ws.onclose = function(event) {
    console.log("connection closed");
};
  1. Melaksanakan siaran Websocket

Akhir sekali, kita perlu melaksanakan fungsi siaran Websocket di bahagian pelayan, iaitu menghantar mesej kepada semua pelanggan yang disambungkan ke pelayan.

Langkah pelaksanaan khusus adalah seperti berikut:

  1. Simpan $fd semua pelanggan yang disambungkan ke pelayan.
  2. Apabila mesej diterima, hantar mesej itu kepada semua $fd pelanggan yang disimpan.

Kod contoh adalah seperti berikut:

$server = new SwooleWebsocketServer("127.0.0.1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);

$clients = [];

$server->on('open', function (SwooleWebSocketServer $server, $request) use (&$clients) {
    echo "client {$request->fd} connected
";
    $clients[] = $request->fd;
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) use (&$clients) {
    echo "received message: {$frame->data}
";
    foreach ($clients as $client) {
        $server->push($client, $frame->data);
    }
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) use (&$clients) {
    echo "client {$fd} closed
";
    $index = array_search($fd, $clients);
    if ($index !== false) {
        unset($clients[$index]);
    }
});

$server->start();

Setakat ini, kami telah berjaya melaksanakan fungsi siaran Swoole untuk Websocket. Melalui pelaksanaan di atas, fungsi penyiaran mesej boleh dilaksanakan antara berbilang pelanggan Websocket.

Ringkasan

Protokol komunikasi websocket ialah protokol komunikasi masa nyata yang sangat popular, dan Swoole, sebagai rangka kerja komunikasi rangkaian berprestasi tinggi, juga telah mula menyokong kuat Websocket. Artikel ini terutamanya memperkenalkan cara Swoole menyokong fungsi penyiaran Websocket. Saya harap ia akan membantu semua orang.

Atas ialah kandungan terperinci Bagaimana Swooole menyokong fungsi penyiaran 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