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.
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.
<!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.
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!