Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Fungsi pemberitahuan masa nyata penyiaran dan langganan Swoole dan Workerman dalam PHP dan MySQL

Fungsi pemberitahuan masa nyata penyiaran dan langganan Swoole dan Workerman dalam PHP dan MySQL

王林
王林asal
2023-10-15 17:25:471220semak imbas

Fungsi pemberitahuan masa nyata penyiaran dan langganan Swoole dan Workerman dalam PHP dan MySQL

Siaran mesej dan langganan fungsi pemberitahuan masa nyata Swoole dan Workerman dalam PHP dan MySQL

Abstrak:
Dengan perkembangan pesat Internet, fungsi pemberitahuan masa nyata juga telah menjadi bahagian yang amat diperlukan dalam aplikasi moden. Dalam PHP dan MySQL, kami boleh menggunakan Swoole dan Workerman, dua perpustakaan sambungan yang sangat baik, untuk melaksanakan penyiaran dan langganan mesej untuk mencapai fungsi pemberitahuan masa nyata. Artikel ini akan memperkenalkan senario aplikasi Swoole dan Workerman dalam PHP dan MySQL secara terperinci, dan memberikan contoh kod khusus untuk membantu pembaca memahami dan mengamalkan fungsi pemberitahuan masa nyata.

  1. Pengenalan
    Swoole ialah perpustakaan sambungan PHP yang menyediakan keupayaan komunikasi rangkaian tak segerak dan serentak sepenuhnya, membolehkan PHP mengendalikan permintaan serentak tinggi seperti Node.js. Workerman ialah satu lagi perpustakaan sambungan PHP yang menyediakan perpustakaan pelayan TCP/UDP berbilang proses yang ringkas dan mudah digunakan. Perbezaan di antara mereka ialah Swoole lebih memfokuskan pada operasi IO tidak menyekat tak segerak, manakala Workerman lebih menumpukan pada pemprosesan tugas berbilang proses.
  2. Senario aplikasi Swoole dan Workerman
    Swoole dan Workerman digunakan secara meluas dalam senario berikut dalam fungsi pemberitahuan masa nyata dalam PHP dan MySQL:
  3. Aplikasi sembang dalam talian: pengguna boleh menerima pemberitahuan mesej dalam masa nyata selepas log masuk
  4. Sistem pemantauan masa nyata: Pentadbir sistem boleh mendapatkan log pelayan dan maklumat penggera dalam masa nyata
  5. Pemprosesan tugas tak segerak: Selepas pemprosesan tugas latar belakang selesai, pengguna bahagian hadapan boleh dimaklumkan dalam masa.
  6. Pelaksanaan fungsi pemberitahuan masa nyata Swoole
    Pertama, kita perlu mencipta pelayan Swoole WebSocket untuk menerima dan menghantar mesej pemberitahuan masa nyata. Berikut ialah contoh pelayan Swoole WebSocket yang mudah:
<?php
$server = new SwooleWebSocketServer("0.0.0.0", 9501);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "new connection open: {$request->fd}
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    $message = $frame->data;
    // 实现消息广播
    foreach($server->connections as $fd) {
        $server->push($fd, $message);
    }
});

$server->on('close', function ($ser, $fd) {
    echo "connection close: {$fd}
";
});

$server->start();

Dalam contoh di atas, kami mencipta pelayan Swoole WebSocket dan mendengar acara melalui on('message') untuk melaksanakan fungsi penyiaran mesej. Apabila sambungan baharu diwujudkan, ID sambungan akan dicetak apabila mesej diterima, semua sambungan akan dilalui dan mesej akan dihantar ke setiap sambungan. on('message')监听事件,实现了消息广播的功能。当有新的连接建立时,会打印连接的ID;当接收到消息时,将遍历所有连接,并发送消息给每个连接。

  1. Workerman的实时通知功能实现
    类似于Swoole,我们可以通过Workerman的功能来实现实时通知功能。以下是一个简单的Workerman服务器示例:
<?php
require_once './Workerman/Autoloader.php';

use WorkermanLibTimer;
use WorkermanWorker;

$worker = new Worker("websocket://0.0.0.0:2345");

$worker->onWorkerStart = function () {
    Timer::add(1, function () {
        // 实现消息广播
        foreach (Worker::$worker[0]->connections as $connection) {
            $connection->send('Hello');
        }
    });
};

$worker->onConnect = function ($connection) {
    echo "New connection
";
};

$worker->onMessage = function ($connection, $data) {
    echo "Receiving message: {$data}
";
};

$worker->onClose = function ($connection) {
    echo "Connection closed
";
};

Worker::runAll();

在上面的示例中,我们创建了一个Workerman WebSocket服务器,并通过Timer::add()方法实现了定时发送消息的功能,实现消息广播。当有新的连接建立时,会打印相关信息;当接收到消息时,会打印消息内容;当连接关闭时,会打印相应信息。

  1. 与MySQL结合实现实时通知功能
    为了实现更加实用的实时通知功能,我们可以与MySQL数据库结合使用。以下是一个示例代码,通过MySQL的触发器实现当新数据插入时,发送实时通知给所有客户端。
CREATE TABLE `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TRIGGER `new_message` AFTER INSERT ON `messages` FOR EACH ROW
BEGIN
  DECLARE message VARCHAR(255);
  SET message = CONCAT('New message: ', NEW.content);
  -- 发送实时通知
  INSERT INTO `notifications` (`message`) VALUES (message);
END;

通过以上的触发器定义,当有新的消息插入到messages表中时,会自动触发触发器中的代码,将消息信息插入到notifications表中。然后在Swoole或Workerman的服务器中,实现定时查询notifications

    Pelaksanaan fungsi pemberitahuan masa nyata Workerman
      Serupa dengan Swoole, kami boleh melaksanakan fungsi pemberitahuan masa nyata melalui fungsi Workerman. Berikut ialah contoh pelayan Workerman yang mudah:

    1. rrreee
    2. Dalam contoh di atas, kami mencipta pelayan Workerman WebSocket dan melaksanakan fungsi menghantar mesej secara kerap melalui kaedah Timer::add() , laksanakan siaran mesej. Apabila sambungan baru diwujudkan, maklumat yang berkaitan akan dicetak apabila mesej diterima, kandungan mesej akan dicetak apabila sambungan ditutup, maklumat yang sepadan akan dicetak;
      🎜Digabungkan dengan MySQL untuk mencapai fungsi pemberitahuan masa nyata🎜Untuk mencapai fungsi pemberitahuan masa nyata yang lebih praktikal, kami boleh menggunakannya bersama-sama dengan pangkalan data MySQL. Berikut ialah kod sampel yang menggunakan pencetus MySQL untuk menghantar pemberitahuan masa nyata kepada semua pelanggan apabila data baharu dimasukkan. 🎜🎜rrreee🎜Dengan definisi pencetus di atas, apabila mesej baharu dimasukkan ke dalam jadual mesej, kod dalam pencetus akan dicetuskan secara automatik dan maklumat mesej akan dimasukkan ke dalam pemberitahuan kod> jadual. Kemudian dalam pelayan Swoole atau Workerman, laksanakan fungsi menanya secara kerap jadual pemberitahuan dan apabila terdapat pemberitahuan baharu, hantarkannya kepada klien yang sepadan. 🎜🎜🎜Ringkasan🎜Artikel ini memperkenalkan cara Swoole dan Workerman melaksanakan fungsi pemberitahuan masa nyata dalam PHP dan MySQL, memperincikan senario aplikasi dan contoh kod khusus setiap perpustakaan. Dengan menggunakan dua perpustakaan sambungan yang sangat baik ini, kami boleh melaksanakan fungsi pemberitahuan masa nyata dengan mudah dan meningkatkan pengalaman pengguna aplikasi. Pembaca boleh memilih perpustakaan dan kaedah yang sesuai mengikut keperluan mereka sendiri untuk mencapai fungsi pemberitahuan masa nyata yang berkuasa. 🎜🎜

Atas ialah kandungan terperinci Fungsi pemberitahuan masa nyata penyiaran dan langganan Swoole dan Workerman dalam PHP dan MySQL. 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