วิธีการส่งข้อมูลแบบส่งข่าว (Broadcast)

ตัวอย่าง (การส่งข่าวตามเวลา)

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;
// เมื่อกระบวนการเริ่มทำงานจะตั้งตัวจับเวลาส่งข้อมูลไปยังการเชื่อมต่อของผู้ใช้ทุกคนทุกๆ 10 วินาที
$worker->onWorkerStart = function($worker)
{
    // ตั้งเวลา ทุก 10 วินาที
    Timer::add(10, function()use($worker)
    {
        // วนซ้ำการเชื่อมต่อของผู้ใช้ทั้งหมดของกระบวนการปัจจุบัน และส่งเวลาปัจจุบันของเซิร์ฟเวอร์ไป
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// รัน worker
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
Worker::runAll();

คำอธิบาย:

กระบวนการเดียว:
ตัวอย่างข้างต้นสามารถทำงานได้เพียงกระบวนการเดียว เท่านั้น ($worker->count=1) เนื่องจากเมื่อมีหลายกระบวนการ ผู้ใช้หลายคนอาจเชื่อมต่อไปยังกระบวนการที่ต่างกัน การเชื่อมต่อระหว่างกระบวนการจะเป็นอิสระจึงไม่สามารถสื่อสารโดยตรง กล่าวคือ กระบวนการ A ไม่สามารถดำเนินการส่งข้อมูลโดยตรงไปยังรายการเชื่อมต่อของกระบวนการ B (เพื่อทำได้นี้ ต้องมีการสื่อสารระหว่างกระบวนการ เช่น อาจใช้ Channel คอมโพเน้นต์ เช่น ตัวอย่าง-การส่งไปยัม้ย หรือตัวอย่าง-การส่งแบบกลุ่ม)

แนะนำให้ใช้ GatewayWorker
GatewayWoker ที่พัฒนาขึ้นจาก workerman ให้การปฏิบัติการส่งที่สะดวกมากขึ้น เช่น ส่งแบบกลุ่ม การส่งข่าว และอื่นๆ ส่งไปยังหลายกระบวนการ หรือการติดตั้งบนหลายเซิร์ฟเวอร์ หากต้องการส่งข้อมูลไปยังผู้ใช้ แนะนำให้ใช้ GatewayWorker framework

URL คู่มือ GatewayWorker https://doc2.workerman.net