Rumah pembangunan bahagian belakang tutorial php Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata

Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata

Dec 02, 2023 pm 12:44 PM

Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata

Tajuk: Gunakan PHP untuk membangunkan Websocket untuk mencapai fungsi tolak masa nyata

Websocket ialah protokol komunikasi berdasarkan protokol TCP Dalam pembangunan Web, Websocket boleh digunakan untuk melaksanakan fungsi tolak masa nyata untuk mencapai masa nyata keperluan komunikasi atau masa nyata data. Dalam artikel ini, kami akan membangunkan pelayan Websocket menggunakan bahasa PHP dan menyediakan contoh kod khusus.

1. Gambaran Keseluruhan

Websocket ialah protokol komunikasi dupleks penuh Berbanding dengan protokol HTTP tradisional, Websocket lebih sesuai untuk senario komunikasi masa nyata. Ciri-ciri protokol Websocket termasuk:

  1. Menyokong komunikasi dupleks penuh dan boleh menghantar dan menerima data secara serentak.
  2. Serasi dengan protokol HTTP, menggunakan protokol jabat tangan seperti HTTP untuk pembentukan sambungan, dan boleh berkomunikasi melalui port HTTP/HTTPS.
  3. Data boleh dihantar pada bila-bila masa tanpa menunggu kitaran permintaan-tindak balas.
  4. Menyokong komunikasi merentas domain dan boleh berkomunikasi di bawah nama domain yang berbeza.

2. Persediaan persekitaran pembangunan

Sebelum memulakan pembangunan, anda perlu menyediakan beberapa alatan dan persekitaran:

  1. Pasang PHP: Pastikan penterjemah PHP telah dipasang pada sistem anda.
  2. Pasang Komposer: Komposer ialah alat pengurusan pergantungan untuk PHP Kami akan menggunakannya untuk memasang perpustakaan berkaitan Websocket.
  3. Pilih editor: Anda boleh memilih mana-mana editor yang anda suka untuk pembangunan, seperti Kod VS, Teks Sublime, dsb.

3. Pasang perpustakaan Websocket

Dalam PHP, terdapat banyak perpustakaan Websocket yang matang untuk dipilih, antaranya yang lebih biasa digunakan ialah Ratchet, Swoole, dll. Dalam artikel ini, kami akan menggunakan Ratchet untuk pembangunan.

  1. Buat fail composer.json dalam direktori akar projek dan tambah kandungan berikut: composer.json文件,并添加以下内容:
{
    "require": {
        "cboden/ratchet": "^0.4"
    }
}
Salin selepas log masuk
  1. 打开终端,切换到项目根目录,执行以下命令安装Ratchet库:
composer install
Salin selepas log masuk

四、编写Websocket服务器代码

在创建Websocket服务器之前,我们先来讨论一下Websocket的工作流程。

  1. 连接建立:客户端与服务器建立Websocket连接,客户端发送一个HTTP请求,服务器返回一个协议切换的响应,建立连接。
  2. 消息传输:双方可以通过send方法发送消息,并通过onMessage事件接收消息。
  3. 连接关闭:客户端或服务器端任意一方发送关闭帧来关闭连接。

下面是一个使用Ratchet库编写Websocket服务器的示例代码:

<?php

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

require 'vendor/autoload.php';

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

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection closed: {$conn->resourceId}
";
    }

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

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

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

以上代码定义了一个MyWebSocket类,实现了MessageComponentInterface接口中的方法,用于处理连接、消息、关闭和错误事件。在onOpen事件中,我们将新建立的连接加入到$clients集合中;在onMessage事件中,我们会遍历所有连接并将消息发送给其他客户端;在onClose事件中,我们从$clients集合中删除关闭的连接;在onError

php server.php
Salin selepas log masuk

    Buka terminal, tukar ke direktori akar projek, dan laksanakan Perintah berikut untuk memasang perpustakaan Ratchet:

    New connection: 1
    New connection: 2
    Message received: Hello from client 1
    Message received: Hello from client 2
    Connection closed: 1
    Salin selepas log masuk

    4. Tulis kod pelayan Websocket

    Sebelum mencipta pelayan Websocket, mari kita bincangkan aliran kerja Websocket dahulu.

    Penubuhan sambungan: Pelanggan mewujudkan sambungan Websocket dengan pelayan Pelanggan menghantar permintaan HTTP, dan pelayan mengembalikan respons penukaran protokol untuk mewujudkan sambungan.

    Penghantaran mesej: Kedua-dua pihak boleh menghantar mesej melalui kaedah hantar dan menerima mesej melalui acara onMessage.

    Penutupan sambungan: Sama ada pelanggan atau pelayan menghantar bingkai rapat untuk menutup sambungan.

    Berikut ialah contoh kod untuk menulis pelayan Websocket menggunakan perpustakaan Ratchet: 🎜
    <!DOCTYPE html>
    <html>
    <head>
        <title>Websocket Client</title>
        <script>
            var socket = new WebSocket("ws://localhost:8080");
    
            socket.onopen = function() {
                console.log("Connected");
            };
    
            socket.onmessage = function(event) {
                console.log("Message received: " + event.data);
            };
    
            socket.onclose = function(event) {
                console.log("Connection closed");
            };
    
            function sendMessage() {
                var message = document.getElementById("message").value;
                socket.send(message);
            }
        </script>
    </head>
    <body>
        <input type="text" id="message">
        <button onclick="sendMessage()">Send</button>
    </body>
    </html>
    Salin selepas log masuk
    🎜Kod di atas mentakrifkan kelas MyWebSocket, yang melaksanakan kaedah dalam MessageComponentInterface antara muka Gunakan Untuk mengendalikan sambungan, mesej, penutupan dan peristiwa ralat. Dalam acara onOpen, kami menambah sambungan yang baru ditubuhkan pada koleksi $clients dalam acara onMessage, kami melintasi semua sambungan dan Hantar mesej kepada pelanggan lain; dalam acara onClose, kami memadamkan sambungan tertutup daripada koleksi $clients dalam acara onError, Kami mengendalikan pengecualian dan tutup sambungan. 🎜🎜5 Jalankan pelayan Websocket🎜🎜Tukar ke direktori akar projek di terminal dan laksanakan arahan berikut untuk memulakan pelayan Websocket:🎜rrreee🎜Jika semuanya normal, anda akan melihat output yang serupa dengan yang berikut:🎜rrreee🎜 6. Tulis Kod pelanggan🎜🎜Akhir sekali, kami juga perlu menulis pelanggan untuk ujian. 🎜rrreee🎜Dalam contoh ini, kami menggunakan JavaScript untuk mencipta sambungan Websocket dan mencetak log yang sepadan apabila sambungan diwujudkan, mesej diterima dan sambungan ditutup. Pada halaman, kami menyediakan kotak input dan butang hantar untuk menghantar mesej. 🎜🎜7. Ringkasan🎜🎜Artikel ini memperkenalkan kaedah membangunkan pelayan Websocket menggunakan PHP, dan menyediakan contoh kod khusus untuk membantu pembaca memahami prinsip kerja dan penggunaan Websocket. Websocket mempunyai keupayaan komunikasi masa nyata dan boleh digunakan untuk melaksanakan tolak masa nyata, bilik sembang, permainan berbilang pemain dan senario lain saya harap artikel ini akan membantu anda. 🎜

    Atas ialah kandungan terperinci Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bekerja dengan Data Sesi Flash di Laravel Bekerja dengan Data Sesi Flash di Laravel Mar 12, 2025 pm 05:08 PM

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Mar 14, 2025 am 11:42 AM

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Respons HTTP yang dipermudahkan dalam ujian Laravel Respons HTTP yang dipermudahkan dalam ujian Laravel Mar 12, 2025 pm 05:09 PM

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 skrip sembang php terbaik di codecanyon 12 skrip sembang php terbaik di codecanyon Mar 13, 2025 pm 12:08 PM

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Terangkan konsep pengikatan statik lewat dalam PHP. Terangkan konsep pengikatan statik lewat dalam PHP. Mar 21, 2025 pm 01:33 PM

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Mar 28, 2025 pm 05:12 PM

Artikel ini membincangkan menambah fungsi khusus kepada kerangka kerja, memberi tumpuan kepada pemahaman seni bina, mengenal pasti titik lanjutan, dan amalan terbaik untuk integrasi dan debugging.

Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Mar 28, 2025 pm 05:11 PM

Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.

See all articles