Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan php untuk membangunkan Websocket untuk mencipta fungsi penjejakan logistik masa nyata

Gunakan php untuk membangunkan Websocket untuk mencipta fungsi penjejakan logistik masa nyata

王林
王林asal
2023-12-18 15:39:43668semak imbas

Gunakan php untuk membangunkan Websocket untuk mencipta fungsi penjejakan logistik masa nyata

Gunakan PHP untuk membangunkan WebSocket untuk mencipta fungsi penjejakan logistik masa nyata

Pengenalan:
Dengan perkembangan industri logistik, pengesanan masa nyata status kargo telah menjadi keperluan penting. Pada masa lalu, kaedah berasaskan pengundian untuk mendapatkan maklumat kargo tidak dapat memenuhi keperluan masa nyata. Menggunakan teknologi WebSocket, pelayan boleh secara aktif menolak data kepada pelanggan dan menyediakan fungsi pengesanan logistik masa nyata.

Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan WebSocket dan menyediakan contoh kod khusus untuk melaksanakan fungsi penjejakan logistik masa nyata.

  1. Pengenalan kepada WebSocket
    WebSocket ialah protokol untuk komunikasi dupleks penuh melalui satu sambungan TCP. Ia melaksanakan tolakan data masa nyata dari pelayan ke pelanggan dengan mengekalkan sambungan yang berterusan. Berbanding dengan permintaan HTTP tradisional, WebSocket lebih sesuai untuk senario aplikasi dengan keperluan masa nyata yang tinggi.
  2. Membangunkan WebSocket dengan PHP
    Dalam PHP, kita boleh menggunakan perpustakaan Ratchet untuk melaksanakan fungsi WebSocket. Ratchet ialah perpustakaan WebSocket berasaskan PHP yang menyediakan antara muka untuk membangunkan pelayan WebSocket dengan mudah.

Pertama, kita perlu memperkenalkan perpustakaan Ratchet ke dalam projek. Anda boleh menguruskan kebergantungan projek melalui Komposer Gunakan arahan berikut untuk memasang perpustakaan Ratchet:

composer require cboden/ratchet

Seterusnya, kami mencipta fail masukan untuk pelayan WebSocket, seperti server.php:

<?php
require 'vendor/autoload.php';

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

class MyWebSocketApp implements MessageComponentInterface
{
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 处理收到的消息,更新物流信息等
        // 然后向所有客户端主动推送最新的物流信息
        foreach ($this->clients as $client) {
            $client->send($msg);
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        $conn->close();
    }
}

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

$server->run();

Dalam kod di atas, kami mencipta satu fail bernama Kelas MyWebSocketApp melaksanakan antara muka MessageComponentInterface Ratchet. Antara muka ini mentakrifkan fungsi panggil balik operasi asas pelayan WebSocket, termasuk onOpen, onMessage, onClose, onError, dsb.

Dalam fungsi panggil balik onOpen, kami menambah sambungan pelanggan baharu pada storan objek $clients. Apabila mesej diterima, dalam fungsi panggil balik onMessage, kami boleh memproses mesej yang diterima, seperti mengemas kini maklumat logistik, dsb., dan melintasi semua pelanggan melalui gelung foreach untuk secara aktif menolak maklumat logistik terkini kepada pelanggan.

Akhir sekali, buat contoh pelayan WebSocket menggunakan kelas IoServer, nyatakan nombor port pendengaran dan gunakan kaedah jalankan untuk memulakan pelayan.

  1. Pelaksanaan Bahagian Pelanggan
    Di sisi pelanggan, kami boleh menggunakan API WebSocket terbina dalam penyemak imbas untuk berkomunikasi dengan pelayan WebSocket.
<!DOCTYPE html>
<html>
<head>
<script>
var ws = new WebSocket("ws://localhost:8080");

ws.onopen = function() {
    console.log("Socket连接已打开");
};

ws.onmessage = function(evt) {
    // 处理接收到的物流信息,并在页面上进行展示
    var message = evt.data;
    console.log("收到消息:" + message);
    // ...
};

ws.onclose = function() {
    console.log("Socket连接已关闭");
};

</script>
</head>
<body>
</body>
</html>

Dalam kod di atas, kami mencipta objek WebSocket dan menentukan alamat dan port pelayan WebSocket. Kami kemudiannya boleh mengendalikan interaksi dengan pelayan melalui fungsi panggil balik seperti onopen, onmessage dan onclose.

Apabila sambungan WebSocket berjaya diwujudkan, fungsi panggil balik onopen akan dicetuskan dan kami boleh melakukan operasi berkaitan di sini. Apabila mesej yang ditolak oleh pelayan diterima, fungsi panggil balik onmessage akan dicetuskan, di mana kami boleh memproses maklumat logistik yang diterima dan memaparkannya pada halaman. Apabila sambungan ditutup, fungsi panggil balik onclose akan dicetuskan.

  1. Contoh fungsi pengesanan logistik
    Kami boleh menggabungkannya dengan sistem logistik sebenar untuk menolak maklumat logistik masa nyata kepada pelanggan.

Di bahagian pelayan, anda boleh memantau kemas kini maklumat logistik melalui tugas berjadual atau pemantauan acara, dan menghantar maklumat logistik terkini kepada pelanggan.

// 假设我们有一个函数getLogisticsInfo,用于获取最新的物流信息
$logisticsInfo = getLogisticsInfo();
// 将最新的物流信息转为JSON格式,并推送给所有客户端
$msg = json_encode($logisticsInfo);
foreach ($this->clients as $client) {
    $client->send($msg);
}

Di pihak pelanggan, anda boleh menerima maklumat logistik terkini yang ditolak oleh pelayan dan memaparkannya.

ws.onmessage = function(evt) {
    var message = evt.data;
    var logisticsInfo = JSON.parse(message);
    // 根据最新物流信息,更新页面显示内容
    // ...
};

Ringkasan:
Dengan membangunkan WebSocket dengan PHP, kami boleh melaksanakan fungsi penjejakan logistik berdasarkan tolakan data masa nyata. Gunakan perpustakaan Ratchet untuk membangunkan pelayan WebSocket dan berinteraksi dengan pelayan melalui API WebSocket. Pelayan boleh mendapatkan dan menolak maklumat logistik terkini kepada pelanggan melalui tugas berjadual atau pemantauan acara, dengan itu merealisasikan fungsi penjejakan logistik masa nyata.
Melalui contoh kod yang disediakan dalam artikel ini, anda boleh lebih memahami dan menggunakan PHP untuk membangunkan WebSocket dan melaksanakan fungsi penjejakan logistik masa nyata.

Atas ialah kandungan terperinci Gunakan php untuk membangunkan Websocket untuk mencipta fungsi penjejakan logistik masa nyata. 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