Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Contoh pembangunan PHP WebSocket: demonstrasi cara melaksanakan fungsi tertentu

Contoh pembangunan PHP WebSocket: demonstrasi cara melaksanakan fungsi tertentu

WBOY
WBOYasal
2023-09-12 08:29:021309semak imbas

PHP WebSocket开发实例:如何实现特定功能的演示

PHP WebSocket Development Contoh: Demonstrasi cara melaksanakan fungsi tertentu

WebSocket ialah protokol untuk komunikasi dua hala masa nyata, yang memungkinkan untuk mewujudkan sambungan berterusan antara pelanggan dan pelayan. WebSocket ialah alat yang berkuasa untuk aplikasi web yang perlu melaksanakan fungsi masa nyata atau komunikasi segera. Dalam artikel ini, kami akan menunjukkan cara menggunakan pembangunan WebSocket PHP dan melaksanakan fungsi tertentu.

  1. Sediakan persekitaran
    Sebelum bermula, pastikan anda telah memasang persekitaran PHP. Pada masa yang sama, anda memerlukan penyemak imbas yang menyokong WebSocket, seperti Chrome, Firefox, dll. Seterusnya, kami akan mencipta pelayan WebSocket mudah untuk menunjukkan cara melaksanakan fungsi tertentu.
  2. Buat Pelayan WebSocket
    Pertama, kita perlu mencipta pelayan WebSocket. Dalam PHP, kita boleh menggunakan perpustakaan Ratchet untuk melaksanakan pelayan WebSocket. Mula-mula, pasang perpustakaan Ratchet melalui Komposer:

    composer require cboden/ratchet

    Kemudian, cipta fail server.php yang mentakrifkan pelayan WebSocket kami: server.php文件,用于定义我们的WebSocket服务器:

    <?php
    require __DIR__ . '/vendor/autoload.php';
    
    use RatchetServerIoServer;
    use RatchetHttpHttpServer;
    use RatchetWebSocketWsServer;
    
    class MyWebSocketServer implements RatchetMessageComponentInterface {
     // 实现WebSocket服务器的方法
    }
    
    $server = IoServer::factory(
     new HttpServer(
         new WsServer(
             new MyWebSocketServer()
         )
     ),
     8080
    );
    
    $server->run();

    在这个例子中,我们创建了一个名为MyWebSocketServer的类,来实现WebSocket服务器的接口方法。这个类将会处理接收到的消息、连接和关闭事件等。

  3. 实现特定功能
    接下来,我们将演示一个特定功能的实现。在这个例子中,我们将创建一个简单的聊天室,允许用户发送消息,并将消息广播给其他在线用户。

MyWebSocketServer类中,我们添加以下方法来处理消息、连接和关闭事件:

class MyWebSocketServer implements RatchetMessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage();
    }

    public function onOpen(RatchetConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onClose(RatchetConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onMessage(RatchetConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            $client->send($msg);
        }
    }

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

在上述代码中,我们使用SplObjectStorage来存储所有连接到服务器的客户端。当有新的连接时,我们将其保存到$clients中,并打印出新连接的资源ID。当连接关闭时,我们从$clients中移除断开连接的客户端,并打印出其资源ID。当收到消息时,我们遍历所有连接的客户端,并将消息发送给每个客户端。

  1. 运行服务器
    现在,我们已经准备好了WebSocket服务器和服务逻辑。我们可以通过运行以下命令来启动服务器:

    php server.php

    服务器将会监听8080端口,并开始接收和处理客户端的连接、消息和关闭事件。

  2. 实现客户端
    最后,我们需要实现一个客户端来连接到我们的WebSocket服务器,并进行测试。我们可以使用JavaScript的WebSocket API来创建一个WebSocket连接,然后发送和接收消息。
var socket = new WebSocket("ws://localhost:8080");

socket.onopen = function() {
    console.log("Connected to server");
};

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

socket.onclose = function() {
    console.log("Server connection closed");
};

// 发送消息
function sendMessage(message) {
    socket.send(message);
}

通过上述代码,我们可以连接到我们的WebSocket服务器,并通过调用sendMessagerrreee

Dalam contoh ini, kami mencipta fail bernama MyWebSocketServer digunakan untuk melaksanakan kaedah antara muka pelayan WebSocket. Kelas ini akan mengendalikan mesej yang diterima, sambungan dan acara tutup, dsb.

  1. Melaksanakan fungsi tertentu
  2. Seterusnya, kami akan menunjukkan pelaksanaan fungsi tertentu. Dalam contoh ini, kami akan mencipta ruang sembang ringkas yang membolehkan pengguna menghantar mesej dan menyiarkan mesej kepada pengguna dalam talian yang lain.

Dalam kelas MyWebSocketServer, kami menambah kaedah berikut untuk mengendalikan mesej, sambungan dan acara tutup:

rrreee

Dalam kod di atas, kami menggunakan SplObjectStorage untuk menyimpan semua sambungan klien ke pelayan. Apabila terdapat sambungan baharu, kami menyimpannya ke $clients dan mencetak ID sumber sambungan baharu itu. Apabila sambungan ditutup, kami mengalih keluar klien yang terputus daripada $clients dan mencetak ID sumbernya. Apabila mesej diterima, kami mengulangi semua pelanggan yang bersambung dan menghantar mesej itu kepada setiap pelanggan. 🎜
    🎜🎜Jalankan pelayan🎜Kini, kami mempunyai pelayan WebSocket dan logik perkhidmatan sedia. Kita boleh memulakan pelayan dengan menjalankan arahan berikut: 🎜rrreee🎜Pelayan akan mendengar port 8080 dan mula menerima dan memproses sambungan pelanggan, mesej dan acara penutupan. 🎜🎜🎜Melaksanakan klien🎜Akhir sekali, kami perlu melaksanakan pelanggan untuk menyambung ke pelayan WebSocket kami dan mengujinya. Kami boleh menggunakan API WebSocket JavaScript untuk membuat sambungan WebSocket dan kemudian menghantar dan menerima mesej. 🎜🎜rrreee🎜Dengan kod di atas, kami boleh menyambung ke pelayan WebSocket kami dan menghantar mesej dengan memanggil fungsi sendMessage. Apabila mesej diterima, kandungan mesej dicetak dalam konsol penyemak imbas. 🎜🎜🎜Menjalankan Ujian🎜Kini, kami telah menyelesaikan pelaksanaan pelayan dan pelanggan. Kami boleh membuka klien dalam berbilang tetingkap penyemak imbas, menyambung ke pelayan dan melakukan ujian. Apabila seorang pelanggan menghantar mesej, pelanggan lain akan menerima mesej dan mencetaknya dalam konsol. 🎜🎜🎜Melalui contoh ini, kami menunjukkan cara menggunakan pembangunan WebSocket PHP dan melaksanakan fungsi bilik sembang yang mudah. Sudah tentu, WebSocket mempunyai rangkaian penggunaan yang lebih luas dalam aplikasi praktikal, dan anda boleh melaksanakan fungsi yang lebih kompleks mengikut keperluan anda sendiri. 🎜🎜Ringkasnya, artikel ini menunjukkan cara menggunakan pembangunan WebSocket PHP untuk mencapai demonstrasi fungsi tertentu. Saya harap contoh ini akan membantu anda memahami dan mempelajari pembangunan PHP WebSocket. 🎜

Atas ialah kandungan terperinci Contoh pembangunan PHP WebSocket: demonstrasi cara melaksanakan fungsi tertentu. 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