Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyepaduan dan skalabiliti baris gilir mesej dan sistem teragih oleh Swoole dan Workerman

Penyepaduan dan skalabiliti baris gilir mesej dan sistem teragih oleh Swoole dan Workerman

WBOY
WBOYasal
2023-10-15 16:49:41564semak imbas

Penyepaduan dan skalabiliti baris gilir mesej dan sistem teragih oleh Swoole dan Workerman

Swoole dan Workerman adalah kedua-dua enjin komunikasi rangkaian PHP. Ia menyediakan keupayaan integrasi dan pengembangan yang berkuasa bagi baris gilir mesej dan sistem teragih. Artikel ini akan menunjukkan aplikasi mereka dalam hal ini melalui contoh kod tertentu.

Pertama sekali, mari kita lihat ciri-ciri Swoole dan Workerman. Swoole ialah enjin komunikasi rangkaian tak segerak PHP untuk persekitaran pengeluaran Ia menyokong TCP/UDP/Unix Socket/HTTP/WebSocket dan protokol lain, dan menyediakan fungsi seperti pemasa, tugas tak segerak dan pengurusan sub-proses. Workerman ialah rangka kerja soket PHP berprestasi tinggi yang menggunakan model berbilang proses dan boleh mengendalikan sambungan serentak besar-besaran.

Dari segi baris gilir mesej, Swoole menyediakan fungsi panggil balik onMessage swoole_server, yang boleh menyimpan mesej yang diterima ke dalam baris gilir mesej. Kita boleh menggunakan Redis sebagai baris gilir mesej dan menyepadukan dengan Swoole melalui sambungan swoole_redis.

<?php
$serv = new swoole_server("127.0.0.1", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);

$serv->set([
    'worker_num' => 4,    // 设置工作进程数
]);

$serv->on('WorkerStart', function ($serv, $worker_id) {
    // 连接Redis
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 消息队列名称
    $queue_name = 'message_queue';
    
    // 消费消息队列
    swoole_timer_tick(1000, function () use ($redis, $queue_name) {
        while ($message = $redis->lPop($queue_name)) {
            // 处理消息
            echo "Received message: " . $message . "
";
        }
    });
});

$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
    // 将接收到的消息存入Redis消息队列
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->rPush('message_queue', $data);
});

$serv->start();
?>

Dalam kod di atas, kami mencipta pelayan Swoole dan menetapkan bilangan proses pekerja kepada 4. Dalam fungsi panggil balik WorkerStart, kami menyambungkan Redis dan meninjau baris gilir mesej melalui pemasa, menggunakan fungsi pemprosesan mesej sebagai fungsi panggil balik. Apabila mesej tiba, fungsi panggil balik onReceive dipanggil untuk menyimpan mesej yang diterima dalam baris gilir mesej Redis.

Seterusnya, mari kita lihat baris gilir mesej Workerman dan keupayaan penyepaduan sistem dan kebolehskalaan yang diedarkan. Workerman menyediakan pembangunan dipacu peristiwa melalui komponen EventManagernya.

<?php
require_once __DIR__ . '/Workerman/Autoloader.php';

use WorkermanWorker;
use WorkermanRedisQueueClient;
use WorkermanEventLoopSelect;

$worker = new Worker('tcp://127.0.0.1:9501');
$worker->count = 4;

$worker->onWorkerStart = function ($worker) {
    $redis = new PredisClient();
    $queue = new Client($redis);
    
    $queue->onMessage = function ($message) {
        // 处理消息
        echo "Received message: " . $message . "
";
    };
    
    $queue->run();
};

$worker->onMessage = function ($connection, $data) {
    global $worker;
    $worker->queue->sendMessage($data);
};

Worker::$eventLoopClass = Select::class;
Worker::runAll();

Dalam kod di atas, kami mencipta pelayan Pekerja dan menyediakan 4 proses pekerja. Dalam fungsi panggil balik onWorkerStart, kami menyambung kepada Redis dan mencipta klien baris gilir Redis. Proses mesej dengan menetapkan fungsi panggil balik onMessage bagi klien baris gilir. Apabila mesej diterima, fungsi panggil balik onMessage dipanggil untuk menghantar mesej ke baris gilir mesej Redis.

Melalui contoh kod di atas, kita dapat melihat bahawa kedua-dua Swoole dan Workerman boleh disepadukan dengan baris gilir mesej (seperti Redis) untuk melaksanakan penghantaran mesej dalam sistem yang diedarkan. Dalam pembangunan sebenar, kita boleh memilih alat yang sesuai mengikut keperluan tertentu. Kedua-dua Swoole dan Workerman menyediakan keupayaan pengembangan yang baik dan boleh disesuaikan mengikut keperluan.

Atas ialah kandungan terperinci Penyepaduan dan skalabiliti baris gilir mesej dan sistem teragih oleh Swoole dan Workerman. 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