Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata

王林
Lepaskan: 2023-12-02 12:46:02
asal
824 orang telah melayarinya

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!