Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan PHP dan swoole untuk perkhidmatan push mesej berprestasi tinggi?

Bagaimana untuk menggunakan PHP dan swoole untuk perkhidmatan push mesej berprestasi tinggi?

王林
王林asal
2023-07-23 08:26:02867semak imbas

Bagaimana untuk menggunakan PHP dan swoole untuk perkhidmatan push mesej berprestasi tinggi?

Dengan perkembangan pesat Internet, keperluan untuk komunikasi masa nyata menjadi semakin mendesak. Terutama dalam beberapa senario interaksi masa nyata, seperti bilik sembang, pemesejan segera, permainan dalam talian dan aplikasi lain, perkhidmatan push mesej telah menjadi bahagian yang sangat diperlukan. Sebagai salah satu bahasa yang paling banyak digunakan dalam pembangunan Internet, PHP juga perlu mencari penyelesaian push mesej berprestasi tinggi. Dalam hal ini, swoole adalah pilihan yang sangat baik.

swoole ialah sambungan pihak ketiga berdasarkan PHP yang boleh menukar PHP menjadi persekitaran seperti Node.js. Ia menyediakan IO tak segerak, coroutine, komunikasi rangkaian berprestasi tinggi dan fungsi lain, dan boleh digunakan untuk membina perkhidmatan push mesej berprestasi tinggi. Di bawah ini kami akan memperkenalkan secara terperinci cara menggunakan PHP dan swoole untuk melaksanakan perkhidmatan push mesej berprestasi tinggi.

Pertama, kita perlu memasang sambungan swool. Ia boleh dipasang melalui arahan berikut:

pecl install swoole

Selepas pemasangan selesai, tambahkan konfigurasi berikut dalam fail php.ini:

extension=swoole.so

Seterusnya, kami mencipta fail index.php untuk menulis kod perkhidmatan push mesej kami:

<?php
// 创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9501);

// 监听WebSocket连接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "New WebSocket connection: fd={$request->fd}
";
});

// 监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    foreach ($server->connections as $fd) {
        // 向所有连接中的客户端推送消息
        $server->push($fd, $frame->data);
    }
});

// 监听WebSocket连接关闭事件
$server->on('close', function ($server, $fd) {
    echo "WebSocket connection close: fd={$fd}
";
});

// 启动WebSocket服务器
$server->start();
?>

Kod di atas ialah contoh pelayan WebSocket yang mudah. Ia mencipta pelayan WebSocket yang mendengar pada port tempatan 9501 melalui kelas swoole_websocket_server. Kemudian tiga peristiwa dipantau melalui kaedah on: buka, mesej dan tutup. Acara terbuka dicetuskan apabila sambungan WebSocket diwujudkan, acara mesej dicetuskan apabila mesej pelanggan diterima, dan acara tutup dicetuskan apabila sambungan WebSocket ditutup. Dalam acara mesej, kami melintasi semua sambungan melalui foreach dan menolak mesej yang diterima kepada semua pelanggan.

Selepas menyimpan dan menjalankan kod di atas, pelayan WebSocket kami telah dimulakan. Seterusnya, kita boleh menggunakan klien WebSocket untuk menyambung dan menghantar mesej.

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

        // 监听WebSocket连接打开事件
        ws.onopen = function (event) {
            console.log("WebSocket connection opened.");
        };

        // 监听WebSocket消息事件
        ws.onmessage = function (event) {
            console.log("Received message: " + event.data);
        };

        // 监听WebSocket连接关闭事件
        ws.onclose = function (event) {
            console.log("WebSocket connection closed.");
        };

        // 发送消息
        function sendMessage() {
            var message = document.getElementById('message').value;
            ws.send(message);
        }
    </script>

    <input type="text" id="message">
    <button onclick="sendMessage()">发送消息</button>
</body>
</html>

Kod di atas ialah contoh klien WebSocket yang mudah. Ia mencipta sambungan WebSocket melalui objek WebSocket JavaScript, dan kemudian mendengar peristiwa pembukaan sambungan, penerimaan mesej dan penutupan sambungan melalui onopen, onmessage, dan onclose masing-masing. Dalam fungsi sendMessage, kami mendapat teks mesej dalam kotak input dan kemudian menghantar mesej melalui kaedah ws.send.

Selepas membuka halaman klien di atas dalam penyemak imbas, anda boleh melihat bahawa terdapat kotak input dan butang hantar pada halaman tersebut. Apabila kita memasukkan mesej dalam kotak input dan klik butang hantar, mesej akan dihantar ke pelayan dan ditolak kepada semua pelanggan pada masa yang sama Selepas pelanggan menerima mesej, ia akan mencetak mesej dalam konsol.

Melalui contoh di atas, kita dapat melihat bahawa perkhidmatan push mesej mudah boleh dilaksanakan dengan mudah menggunakan PHP dan swoole. Prestasi tinggi Swoole dan ciri IO tak segerak membolehkannya mengendalikan sejumlah besar sambungan serentak dan tolakan mesej, menjadikannya sangat sesuai untuk perkhidmatan tolak mesej dalam senario komunikasi masa nyata.

Ringkasnya, menggunakan PHP dan swoole untuk melaksanakan perkhidmatan push mesej berprestasi tinggi hanya memerlukan beberapa baris kod dan sangat mudah untuk dimulakan. Berbanding dengan kaedah penyekatan segerak tradisional IO, kaedah IO tak segerak swoole boleh membolehkan pelayan memproses lebih banyak permintaan pada masa yang sama, meningkatkan prestasi perkhidmatan dan merealisasikan keperluan komunikasi masa nyata. Oleh itu, PHP dan swoole ialah pilihan yang sangat baik untuk pembangun yang perlu membina perkhidmatan push mesej berprestasi tinggi.

Dokumentasi rujukan:

  • dokumentasi rasmi swoole: https://www.swoole.co.uk/
  • Dokumentasi rasmi PHP: https://www.php.net/

Atas ialah kandungan terperinci Bagaimana untuk menggunakan PHP dan swoole untuk perkhidmatan push mesej berprestasi tinggi?. 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