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

ตัวอย่าง (การกระจายข้อมูลตามเวลา)

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
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 ไม่สามารถ ติดต่อ กับวัตถุ connection ของโปรเซส B เพื่อส่งข้อมูลได้ (หากต้องการทำเช่นนี้ ต้องใช้การติดต่อระหว่างโปรเซส เช่น การใช้ Channel component เช่น ตัวอย่าง-การส่งข้อมูลแบบกลุ่ม, ตัวอย่าง-การส่งข้อมูลแบบกลุ่ม)。

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

ที่อยู่เอกสาร GatewayWorker https://doc2.workerman.net