Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tolak mesej masa nyata menggunakan PHP dan ZMQ

Tolak mesej masa nyata menggunakan PHP dan ZMQ

王林
王林asal
2023-06-28 08:22:311075semak imbas

Dengan perkembangan berterusan teknologi Internet, tolakan mesej masa nyata menjadi semakin penting. Dalam banyak senario aplikasi, tolakan mesej masa nyata boleh meningkatkan pengalaman dan kecekapan pengguna. Sebagai contoh, dalam aplikasi sosial, push masa nyata mesej rakan boleh membolehkan pengguna memahami kemas kini rakan mereka dengan lebih cepat dalam permainan dalam talian, acara permainan dalam talian boleh membolehkan pengguna bermain permainan dengan lebih lancar; , tolakan harga saham masa nyata Perubahan membolehkan peniaga membuat keputusan yang lebih tepat pada masanya.

Terdapat banyak cara untuk melaksanakan push mesej masa nyata, salah satu cara yang lebih biasa ialah menggunakan PHP dan ZMQ (ZeroMQ).

ZMQ ialah perpustakaan pemesejan tak segerak berprestasi tinggi yang menyediakan pelbagai mod pemesejan, termasuk permintaan-tindak balas, terbitkan-langganan, Tekan-Tarik, dsb. Menggunakan ZMQ dalam PHP boleh melaksanakan push mesej masa nyata dengan mudah.

Mari kita lihat contoh mudah tolakan mesej masa nyata.

Pertama, kita perlu mencipta konteks ZMQ:

$context = new ZMQContext();

Kemudian, kita mencipta soket ZMQ jenis Tekan:

$push_socket = $context->getSocket(ZMQ::SOCKET_PUSH);
$push_socket->bind("tcp://127.0.0.1:5555");

Di sini kita mengikat soket Tekan ke port 5555 tempatan untuk Hantar mesej kepada pelanggan.

Seterusnya, kami mencipta soket ZMQ jenis Tarik:

$pull_socket = $context->getSocket(ZMQ::SOCKET_PULL);
$pull_socket->bind("tcp://127.0.0.1:5556");

Di sini kami mengikat soket Tarik ke port 5556 tempatan untuk menerima permintaan langganan daripada pelanggan.

Seterusnya, kami mencipta skrip PHP untuk menghantar mesej kepada pelanggan:

while (true) {
    $msg = date("Y-m-d H:i:s") . " hello world!";
    $push_socket->send($msg);
    sleep(1);
}

Di sini kami menggunakan gelung tak terhingga untuk menghantar mesej secara berterusan ke soket Tekan, sekali setiap saat.

Akhir sekali, kami mencipta skrip PHP untuk menerima permintaan langganan daripada pelanggan dan menolak mesej kepada pelanggan:

while (true) {
    $msg = $pull_socket->recv();
    foreach ($clients as $client) {
        $client->send($msg);
    }
}

Di sini kami juga menggunakan gelung tak terhingga untuk menunggu permintaan langganan daripada pelanggan dan menghantar mesej kepada semua pelanggan.

Apabila pelanggan perlu melanggan mesej, ia hanya perlu menyambung ke port yang terikat pada soket Tarik dan menghantar mesej yang mengandungi maklumat langganan:

$context = new ZMQContext();
$sub_socket = $context->getSocket(ZMQ::SOCKET_SUB);
$sub_socket->connect("tcp://127.0.0.1:5556");
$sub_socket->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");

Di sini kami mencipta soket ZMQ jenis Langgan, Bersambung ke setempat pelabuhan 5556. Kemudian, kami menggunakan fungsi setSockOpt() untuk menetapkan pilihan soket dan melanggan semua mesej.

Akhir sekali, kami boleh menulis halaman PHP yang mudah dan menggunakan JavaScript untuk mencapai kesan tolakan mesej masa nyata. Di sini kami menggunakan perpustakaan jQuery untuk pembangunan:

<!DOCTYPE html>
<html>
<head>
    <title>实时消息推送</title>
    <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
    <script>
        $(function() {
            var socket = new WebSocket("ws://127.0.0.1:8080");
            socket.onmessage = function(event) {
                $("#messages").append("<li>" + event.data + "</li>");
            }
        });
    </script>
</head>
<body>
    <h1>实时消息推送</h1>
    <ul id="messages"></ul>
</body>
</html>

Di sini kami mencipta WebSocket untuk menyambung ke port tempatan 8080, mendengar mesej daripada pelayan dan memaparkan mesej pada halaman.

Ringkasnya, push mesej masa nyata boleh dicapai dengan mudah menggunakan PHP dan ZMQ. Sudah tentu, terdapat banyak isu yang perlu dipertimbangkan dalam aplikasi praktikal, seperti keselamatan, kebolehpercayaan, dsb. Tetapi artikel ini memberikan anda rangka kerja asas untuk rujukan anda.

Atas ialah kandungan terperinci Tolak mesej masa nyata menggunakan PHP dan ZMQ. 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