Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Membina Pelayan WebSocket dalam PHP Menggunakan Fungsi `socket_*`?

Bagaimana untuk Membina Pelayan WebSocket dalam PHP Menggunakan Fungsi `socket_*`?

Susan Sarandon
Lepaskan: 2024-12-28 05:28:10
asal
290 orang telah melayarinya

How to Build a WebSocket Server in PHP Using `socket_*` Functions?

Cara Membuat Pelayan WebSocket dalam PHP

WebSocket ialah teknologi yang membolehkan komunikasi dupleks penuh antara klien web dan pelayan web. Ini membolehkan pemindahan data masa nyata, menjadikannya sesuai untuk aplikasi seperti permainan dalam talian, pemesejan segera dan penstriman data kewangan.

Kod Lapuk

Pustaka phpwebsockets yang disebut dalam soalan sememangnya ketinggalan zaman dan tidak menyokong protokol WebSocket terkini. Selain itu, mengemas kininya mungkin tidak berfungsi seperti yang dimaksudkan.

Mencipta Pelayan WebSocket

  1. Penciptaan Soket: Cipta soket induk menggunakan fungsi socket_create().
  2. Ikatan Soket: Ikat soket ke alamat IP tertentu dan port menggunakan socket_bind().
  3. Socket Listening: Tetapkan soket untuk mendengar sambungan masuk menggunakan socket_listen().
  4. Menerima Sambungan: Gunakan socket_accept() untuk menerima sambungan masuk dan buat klien baharu soket.

Prosedur Berjabat Tangan

  1. Permintaan Menerima: Terima permintaan jabat tangan daripada pelanggan menggunakan socket_recv().
  2. Menghuraikan Pengepala: Menghuraikan permintaan jabat tangan untuk mendapatkan pengepala yang diperlukan seperti sebagai Sec-WebSocket-Key.
  3. Menjana Accept Key: Kira kunci accept berdasarkan Sec-WebSocket-Key yang disediakan.
  4. Hantar Respons: Hantar respons jabat tangan kepada pelanggan, termasuk penerimaan yang dikira kunci.

Memproses Mesej

  1. Menerima Data: Gunakan socket_recv() untuk menerima mesej daripada pelanggan.
  2. Menyahkod Data: Nyahkod mesej yang diterima jika ia dikodkan menggunakan WebSocket protokol pembingkaian.
  3. Permintaan Memproses: Kendalikan permintaan pelanggan dan hantar respons yang sesuai.

Interaksi Pelayan-Pelanggan

  1. Sambungan Pelanggan: Pada bahagian klien, gunakan objek WebSocket JavaScript untuk mewujudkan sambungan ke Pelayan WebSocket.
  2. Menghantar Data: Gunakan send() untuk menghantar data daripada klien ke pelayan.
  3. Menerima Data: Sediakan acara pendengar untuk terbuka, ralat dan mesej untuk mengendalikan mesej yang diterima daripada pelayan.

Contoh Pelaksanaan

Berikut ialah contoh coretan kod PHP untuk pelayan WebSocket ringkas:

<?php
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($master, 'localhost', 12345);
socket_listen($master, 20);

$sockets = array($master);
$users = array();
$debug = false;

while (true) {
    $changed = $sockets;
    socket_select($changed, $write = NULL, $except = NULL, NULL);

    foreach ($changed as $socket) {
        if ($socket == $master) {
            $client = socket_accept($master);
            if ($client < 0) {
                console("socket_accept() failed");
                continue;
            } else {
                connect($client);
            }
        } else {
            $bytes = @socket_recv($socket, $buffer, 2048, 0);
            if ($bytes == 0) {
                disconnect($socket);
            } else {
                $user = getuserbysocket($socket);
                if (!$user->handshake) {
                    dohandshake($user, $buffer);
                } else {
                    process($user, $buffer);
                }
            }
        }
    }
}
Salin selepas log masuk

Rangka kod ini menunjukkan langkah yang dibincangkan di atas, termasuk mencipta dan mendengar pada soket induk, menerima masuk sambungan, melakukan jabat tangan WebSocket, dan memproses mesej pelanggan. Skrip lengkap harus ditambah dengan baki fungsi yang diterangkan sebelum ini, seperti connect(), disconnect(), dan process().

Atas ialah kandungan terperinci Bagaimana untuk Membina Pelayan WebSocket dalam PHP Menggunakan Fungsi `socket_*`?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan