Rumah >rangka kerja php >Swoole >Cara menggunakan Swoole untuk melaksanakan pelayan WebSocket dan interaksi baris gilir mesej

Cara menggunakan Swoole untuk melaksanakan pelayan WebSocket dan interaksi baris gilir mesej

王林
王林asal
2023-11-08 22:41:071205semak imbas

Cara menggunakan Swoole untuk melaksanakan pelayan WebSocket dan interaksi baris gilir mesej

Gunakan Swoole untuk melaksanakan pelayan WebSocket dan interaksi baris gilir mesej

Dengan peningkatan permintaan untuk komunikasi masa nyata, WebSocket telah menjadi salah satu teknologi yang digunakan secara meluas. Digabungkan dengan baris gilir mesej, penyampaian dan pemprosesan mesej yang lebih fleksibel dan cekap boleh dicapai. Artikel ini akan memperkenalkan cara menggunakan Swoole untuk melaksanakan interaksi antara pelayan WebSocket dan baris gilir mesej, dan memberikan contoh kod khusus.

Swoole ialah enjin komunikasi rangkaian berprestasi tinggi berdasarkan bahasa C, yang boleh melaksanakan pengaturcaraan rangkaian tak segerak dan serentak dengan mudah. Digabungkan dengan fungsi dan prestasinya yang berkuasa, kami boleh menggunakan Swoole untuk membina pelayan WebSocket yang cekap dan berinteraksi dengan baris gilir mesej untuk mencapai push, langganan dan pemprosesan mesej masa nyata.

  1. Persediaan persekitaran

Sebelum bermula, kita perlu memastikan bahawa sambungan Swoole dan pelayan baris gilir mesej, seperti Redis, RabbitMQ, dsb., dipasang dan persekitaran pembangunan yang sepadan disediakan. Contoh berikut menggunakan pelayan WebSocket Swoole untuk berinteraksi dengan baris gilir mesej Redis.

  1. Melaksanakan pelayan WebSocket

Pertama, kita perlu menulis pelayan WebSocket asas yang mendengar sambungan pelanggan dan mengendalikan penghantaran dan penerimaan mesej. Berikut ialah kod contoh pelayan Swoole WebSocket yang mudah:

<?php
$server = new SwooleWebSocketServer("0.0.0.0", 9501);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "client {$request->fd} connected
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
    // 处理接收到的消息
    // ...
    // 发送消息给客户端
    $server->push($frame->fd, "Hello, client");
});

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

$server->start();

Kod di atas mencipta pelayan WebSocket dan mentakrifkan logik pemprosesan untuk penubuhan sambungan, penerimaan mesej dan penutupan sambungan. Dengan cara ini, kita boleh berinteraksi dengan pelanggan melalui WebSocket.

  1. Sambung ke baris gilir mesej

Digabungkan dengan baris gilir mesej, kita boleh merealisasikan langganan dan pemprosesan mesej masa nyata. Dalam contoh ini, kami menggunakan Redis sebagai baris gilir mesej, mendengar saluran tertentu melalui arahan psubscribe, dan memproses mesej apabila ia diterima. Berikut ialah kod contoh langganan baris gilir mesej ringkas:

<?php
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);

$redis->psubscribe(['channel'], function ($redis, $pattern, $channel, $message) {
    // 处理接收到的消息
    echo "Received message from channel {$channel}: {$message}
";
    // 将消息发送给WebSocket客户端
    // ...
});

Dalam kod di atas, kami melanggan saluran bernama "saluran" menggunakan kaedah planggan Redis dan memproses mesej apabila ia diterima. Dengan cara ini, apabila mesej dihantar ke saluran "saluran" melalui baris gilir mesej, kita boleh melakukan pemprosesan yang sepadan dalam fungsi panggil balik, seperti menghantar mesej ke pelayan WebSocket untuk mencapai tolakan masa nyata mesej.

  1. Menggabungkan WebSocket dan Message Queue

Akhir sekali, kami menyambungkan pelayan WebSocket ke baris gilir mesej untuk mencapai tolak dan pemprosesan mesej masa nyata. Selepas pelayan WebSocket menerima mesej, kami boleh menghantarnya ke baris gilir mesej, dan kemudian pengendali baris gilir mesej akan melakukan pemprosesan selanjutnya dan menghantar hasil pemprosesan kepada klien WebSocket. Berikut ialah contoh penyepaduan mudah:

<?php
$server = new SwooleWebsocketServer("0.0.0.0", 9501);
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);

$server->on('message', function ($server, $frame) use ($redis) {
    // 将收到的消息发送到消息队列中
    $redis->publish('channel', $frame->data);
});

$redis->psubscribe(['channel'], function ($redis, $pattern, $channel, $message) use ($server) {
    // 处理接收到的消息
    echo "Received message from channel {$channel}: {$message}
";
    // 将消息发送给WebSocket客户端
    foreach ($server->connections as $fd) {
        $server->push($fd, $message);
    }
});

$server->start();

Contoh di atas menghantar mesej yang diterima oleh pelayan WebSocket ke baris gilir mesej, dan kemudian pengendali baris gilir mesej menghantar hasil pemprosesan kepada semua pelanggan WebSocket. Dengan cara ini, gabungan pelayan WebSocket dan baris gilir mesej direalisasikan, dan menolak dan memproses mesej masa nyata direalisasikan.

Ringkasnya, menggunakan Swoole untuk melaksanakan pelayan WebSocket dan interaksi baris gilir mesej boleh meningkatkan kecekapan dan fleksibiliti penghantaran mesej masa nyata. Digabungkan dengan contoh kod, saya harap pembaca dapat lebih memahami dan menggunakan teknologi ini untuk mencapai aplikasi komunikasi masa nyata yang lebih berkuasa.

Atas ialah kandungan terperinci Cara menggunakan Swoole untuk melaksanakan pelayan WebSocket dan interaksi baris gilir mesej. 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