Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membangunkan sistem pemantauan masa nyata menggunakan php dan Websocket

Membangunkan sistem pemantauan masa nyata menggunakan php dan Websocket

WBOY
WBOYasal
2023-12-02 09:03:51859semak imbas

Membangunkan sistem pemantauan masa nyata menggunakan php dan Websocket

Membangunkan sistem pemantauan masa nyata menggunakan PHP dan WebSocket

Dengan perkembangan pesat Internet dan aplikasi meluas peranti pintar, sistem pemantauan masa nyata memainkan peranan penting dalam pelbagai bidang. Sama ada kawalan industri, pengurusan trafik atau pemantauan alam sekitar, sistem pemantauan masa nyata boleh menyediakan data dan maklum balas yang tepat pada masanya dan boleh dipercayai untuk membantu orang ramai membuat keputusan yang tepat. Artikel ini akan memperkenalkan cara menggunakan teknologi PHP dan WebSocket untuk membangunkan sistem pemantauan masa nyata yang mudah dan menyediakan contoh kod khusus.

Untuk memulakan proses pembangunan kami, kami perlu memahami konsep asas dan prinsip teknologi WebSocket terlebih dahulu. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol HTTP Ia merealisasikan penghantaran data masa nyata antara pelayan dan pelanggan dengan mewujudkan sambungan yang berterusan. Berbanding dengan model respons permintaan HTTP tradisional, WebSocket lebih cekap dan masa nyata, dan sesuai untuk senario yang memerlukan komunikasi yang kerap.

Dalam PHP, kita boleh menggunakan Ratchet, perpustakaan WebSocket yang matang, untuk melaksanakan pelayan WebSocket. Pertama, kita perlu menggunakan Komposer untuk memasang perpustakaan Ratchet. Jalankan arahan berikut dalam baris arahan:

composer require cboden/ratchet

Selepas pemasangan, kami boleh menulis pelayan WebSocket mudah untuk mendengar sambungan pelanggan dan menolak data dalam masa nyata.

<?php

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

require 'vendor/autoload.php';

class MyWebSocketServer implements MessageComponentInterface {
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New client connected ({$conn->resourceId})" . PHP_EOL;
    }

    public function onMessage(ConnectionInterface $from, $message) {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($message);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Client disconnected ({$conn->resourceId})" . PHP_EOL;
    }

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

        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new MyWebSocketServer()
        )
    ),
    9000
);

echo "WebSocket server started" . PHP_EOL;

$server->run();

Dalam kod di atas, kami mentakrifkan kelas bernama MyWebSocketServer, yang melaksanakan antara muka MessageComponentInterface yang disediakan oleh Ratchet. Antara muka ini mengandungi beberapa kaedah yang diperlukan, seperti onOpen, onMessage, onClose dan onError, yang digunakan untuk mengendalikan sambungan klien, penerimaan mesej, penutupan sambungan dan pengendalian ralat masing-masing.

Dalam kaedah onOpen, kami menambah pelanggan yang baru disambungkan ke senarai pelanggan. Dalam kaedah onMessage, kami mengulangi senarai klien dan menghantar mesej kepada pelanggan lain kecuali pengirim mesej. Dalam kaedah onClose, kami mengalih keluar sambungan tertutup daripada senarai klien. Akhir sekali, dalam kaedah onError, kami mengendalikan pengecualian dan menutup sambungan.

Untuk memulakan pelayan WebSocket, kami menggunakan kelas kilang IoServer yang disediakan oleh Ratchet. Dengan menentukan pelayan HTTP, pelayan WebSocket dan contoh MyWebSocketServer yang kami takrifkan, kami boleh mencipta pelayan WebSocket dan mendengar pada port yang ditentukan (9000 dalam contoh ini).

Pada pelanggan, kami boleh menggunakan JavaScript untuk mencipta sambungan WebSocket dan melaksanakan penghantaran dan penerimaan data masa nyata. Berikut ialah contoh mudah:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Client</title>
</head>
<body>
    <script>
        var socket = new WebSocket("ws://localhost:9000");

        socket.onopen = function() {
            console.log("WebSocket connection established");
        };

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

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

        socket.onerror = function(event) {
            console.log("An error occurred: " + event.data);
        };
    </script>
</body>
</html>

Dalam kod di atas, kami menggunakan JavaScript untuk mencipta objek WebSocket bernama soket dan menentukan alamat sambungan ke pelayan WebSocket yang kami buat sebelum ini. Dengan mendengar acara onopen, onmessage, onclose dan onerror, kami boleh melihat perubahan dalam status sambungan dalam masa nyata dan menerima mesej yang dihantar oleh pelayan.

Dengan contoh kod PHP dan WebSocket di atas, kami boleh membangunkan sistem pemantauan masa nyata yang lebih kompleks berdasarkan pelaksanaan mudah ini. Anda boleh menulis logik perniagaan mengikut keperluan khusus, seperti pengumpulan data sensor, pengemaskinian status, paparan data masa nyata, dsb. Menggunakan teknologi PHP dan WebSocket, kami boleh melaksanakan sistem pemantauan berprestasi tinggi, masa nyata dan boleh dipercayai untuk menyediakan penyelesaian bagi keperluan pemantauan masa nyata dalam pelbagai bidang.

Atas ialah kandungan terperinci Membangunkan sistem pemantauan masa nyata menggunakan php dan 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