Cách phát sóng (gửi nhiều) dữ liệu

Ví dụ (Phát sóng theo định kỳ)

use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:2020');
// Số tiến trình trong ví dụ này phải là 1
$worker->count = 1;
// Khi tiến trình khởi động, thiết lập một bộ định thời để gửi dữ liệu đến tất cả các kết nối khách hàng
$worker->onWorkerStart = function($worker)
{
    // Định kỳ, mỗi 10 giây một lần
    Timer::add(10, function()use($worker)
    {
        // Lặp qua tất cả các kết nối khách hàng trong tiến trình hiện tại, gửi thời gian máy chủ hiện tại
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Chạy worker
Worker::runAll();

Ví dụ (Trò chuyện nhóm)

use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:2020');
// Số tiến trình trong ví dụ này phải là 1
$worker->count = 1;
// Khi khách hàng gửi tin nhắn, phát sóng cho các người dùng khác
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Chạy worker
Worker::runAll();

Giải thích:

Một tiến trình:
Các ví dụ trên chỉ có thể một tiến trình ($worker->count=1), vì khi sử dụng nhiều tiến trình, nhiều khách hàng có thể kết nối đến các tiến trình khác nhau, khách hàng giữa các tiến trình là tách biệt, không thể trực tiếp liên lạc, nghĩa là không thể trực tiếp thao tác với đối tượng kết nối client của tiến trình B từ tiến trình A để gửi dữ liệu. (Để làm được điều này, cần có liên lạc giữa các tiến trình, chẳng hạn có thể sử dụng thành phần Channel, ví dụ ví dụ - Gửi cụm, ví dụ - Gửi nhóm).

Khuyến nghị sử dụng GatewayWorker
Khung GatewayWorker được phát triển trên nền tảng workerman cung cấp cơ chế đẩy thuận tiện hơn, bao gồm đa phát sóng, phát sóng, v.v., có thể thiết lập nhiều tiến trình hoặc thậm chí triển khai trên nhiều máy chủ, nếu cần gửi dữ liệu đến khách hàng, khuyến nghị sử dụng khung GatewayWorker.

Địa chỉ tài liệu GatewayWorker https://doc2.workerman.net