Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Panduan pembangunan PHP Websocket untuk melaksanakan fungsi pertanyaan penerbangan masa nyata

Panduan pembangunan PHP Websocket untuk melaksanakan fungsi pertanyaan penerbangan masa nyata

王林
王林asal
2023-12-02 12:16:12978semak imbas

PHP Websocket开发指南,实现实时航班查询功能

Panduan Pembangunan Soket Web PHP: Fungsi Pertanyaan Penerbangan Masa Nyata

Pengenalan:
Soket Web ialah protokol yang melaksanakan komunikasi dupleks penuh antara pelanggan dan pelayan, membolehkan pemesejan masa nyata dan kemas kini data. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan Websocket, dan memberikan contoh kod khusus digabungkan dengan fungsi pertanyaan penerbangan masa nyata.

1. Fahami protokol Websocket:
Protokol Websocket ialah protokol berdasarkan TCP dan mempunyai ciri-ciri berikut:

  1. Sambungan pemastautin: Websocket mewujudkan sambungan berterusan antara klien dan pelayan untuk mencapai komunikasi masa nyata.
  2. Komunikasi dua hala: Pelanggan dan pelayan boleh menghantar dan menerima mesej pada masa yang sama, mencapai komunikasi dua hala yang sebenar.
  3. Mampatan pengepala: Websocket menggunakan pengepala binari untuk pemampatan untuk mengurangkan overhed penghantaran data.
  4. Menjaga Denyutan Jantung: Websocket boleh menghantar maklumat degupan jantung untuk memastikan sambungan aktif.

2. Pemilihan alat untuk pembangunan PHP Websocket:
PHP sendiri tidak menyokong Websocket secara asli, tetapi ia boleh dilaksanakan melalui perpustakaan pihak ketiga. Dalam artikel ini, kami memilih untuk menggunakan perpustakaan Ratchet untuk melaksanakan Websocket.

Ratchet ialah perpustakaan Websocket PHP yang menyediakan alatan dan antara muka yang berkuasa untuk memudahkan proses pembangunan Websocket.

3. Penyediaan projek:
Pertama, pastikan Komposer telah dipasang dalam projek anda, dan kemudian laksanakan arahan berikut pada baris arahan untuk memasang perpustakaan Ratchet:

komposer memerlukan cboden/ratchet

Selepas pemasangan berjaya, buat fail PHP baharu (contohnya: index.php), mula menulis kod pelayan Websocket.

4. Contoh kod pelayan:
Berikut ialah contoh kod mudah pelayan Websocket, yang melaksanakan fungsi pertanyaan penerbangan masa nyata.

// 引入Ratchet库
require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use GuzzleHttpClient;

class FlightQuery implements MessageComponentInterface
{
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn)
    {
        // 存储所有的客户端连接
        $this->clients->attach($conn);
        echo "有新的连接:(#{$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 接收到消息时的处理
        // 在这里进行航班查询的逻辑
        $result = $this->queryFlight($msg);

        // 向所有的客户端发送查询结果
        foreach ($this->clients as $client) {
            $client->send($result);
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        // 连接关闭时的处理
        $this->clients->detach($conn);

        echo "连接关闭:(#{$conn->resourceId})
";
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        // 错误处理
        echo "发生错误:(#{$conn->resourceId}): {$e->getMessage()}
";

        $conn->close();
    }

    private function queryFlight($flightNumber)
    {
        // 使用外部的航班查询API
        $httpClient = new Client();
        $response = $httpClient->get("https://api.flightquery.com/flight/{$flightNumber}");

        return $response->getBody();
    }
}

// 启动Websocket服务器
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new FlightQuery()
        )
    ),
    8080
);

echo "Websocket服务器启动成功
";

$server->run();

Kod di atas melaksanakan pelayan Websocket mudah, berjalan pada port 8080, menerima mesej daripada pelanggan dan menjalankan pertanyaan penerbangan, dan kemudian menghantar hasil pertanyaan kepada semua pelanggan.

5. Contoh kod pelanggan:
Berikut ialah contoh kod untuk halaman HTML ringkas, yang melaksanakan sambungan dan penghantaran dan penerimaan mesej dengan pelayan Websocket.

<!DOCTYPE html>
<html>
<head>
    <title>实时航班查询</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(function () {
            // 连接Websocket服务器
            var websocket = new WebSocket('ws://localhost:8080');

            // 接收Websocket消息的处理
            websocket.onmessage = function (event) {
                var result = event.data;
                // 处理航班查询结果
                $("#result").text(result);
            };

            // 发送航班查询请求
            $("#query-button").click(function () {
                var flightNumber = $("#flight-number").val();
                websocket.send(flightNumber);
            });
        });
    </script>
</head>
<body>
    <h1>实时航班查询</h1>
    <input type="text" id="flight-number" placeholder="请输入航班号">
    <button id="query-button">查询</button>
    <div id="result"></div>
</body>
</html>

Kod di atas melaksanakan halaman HTML yang ringkas, termasuk kotak input dan butang untuk memasukkan nombor penerbangan dan menghantar permintaan pertanyaan Hasil pertanyaan akan dipaparkan pada halaman dalam masa nyata.

6 Jalankan dan uji:
Simpan kod pelayan di atas ke index.php, dan simpan kod klien ke fail HTML Buka fail HTML melalui pelayar untuk menjalankan dan menguji fungsi pertanyaan penerbangan masa nyata.

Ringkasan:
Melalui panduan pembangunan dan contoh kod Websocket yang dinyatakan di atas, kita boleh merealisasikan fungsi pertanyaan penerbangan masa nyata. Ciri komunikasi dua hala Websocket membolehkan pelanggan dan pelayan menyampaikan mesej dalam masa nyata, menjadikan aplikasi kami lebih masa nyata dan responsif. Dengan menggunakan perpustakaan Ratchet, kami boleh membangunkan aplikasi Websocket dengan lebih pantas.

Sudah tentu, pembangunan sebenar mungkin memerlukan pembangunan dan pelarasan lanjut berdasarkan keperluan perniagaan tertentu, tetapi kod sampel yang disediakan dalam artikel ini adalah untuk rujukan dan kegunaan asas. Saya doakan anda berjaya dalam pembangunan Websocket!

Atas ialah kandungan terperinci Panduan pembangunan PHP Websocket untuk melaksanakan fungsi pertanyaan penerbangan 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