كيفية بث البيانات

مثال (بث مجدول)

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

$worker = new Worker('websocket://0.0.0.0:2020');
// في هذا المثال ، يجب أن يكون عدد العمليات 1
$worker->count = 1;
// عند بدء العملية ، قم بتعيين موقت لإرسال البيانات إلى جميع اتصالات العميل بانتظام
$worker->onWorkerStart = function($worker)
{
    // بانتظام ، كل 10 ثوانٍ
    Timer::add(10, function()use($worker)
    {
        // تمرير كل اتصال لعميل في العملية الحالية ، وإرسال وقت الخادم الحالي
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// تشغيل العامل
Worker::runAll();

مثال (محادثة جماعية)

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');
// في هذا المثال ، يجب أن يكون عدد العمليات 1
$worker->count = 1;
// عندما يرسل العميل رسالة ، قم ببثها للمستخدمين الآخرين
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// تشغيل العامل
Worker::runAll();

توضيح:

عملية واحدة:
الأمثلة أعلاه يمكن أن تعمل فقط مع عملية واحدة ($worker->count=1)، لأن عند الاستخدام مع عمليات متعددة ، يمكن للعميل الاتصال بعمليات مختلفة وبالتالي فإن العملاء بين العمليات معزولون ولا يمكن التواصل مباشرة بينهم. (لتحقيق هذا ، يجب الاتصال بين العمليات من خلال التواصل بين العمليات ، على سبيل المثال يمكن استخدام مكون القناة مثل مثال-إرسال عبر الشبكة ،مثال-الإرسال الجماعي).

نوصي باستخدام GatewayWorker
توفر إطار GatewayWoker الذي تم تطويره بناءً على workerman آلية سهلة للإرسال ، بما في ذلك البث والتوزيع ، ويمكن نشره على عدة عمليات أو حتى عدة خوادم. إذا كنت بحاجة إلى إرسال البيانات إلى العميل ، فإننا نوصي باستخدام إطار GatewayWorker.

عنوان دليل GatewayWorker https://doc2.workerman.net