Business Worker API
В примерах $clusterSecret задаётся проверенным общим конфигом из инструкции установки. Не используйте пустые или шаблонные ключи.
Business Worker обрабатывает бизнес-логику приложения и получает события от Gateway.
Создание экземпляра
Заголовок раздела «Создание экземпляра»use localzet\Cluster\Business;
$worker = new Business();Основные свойства
Заголовок раздела «Основные свойства»Имя Business Worker процесса
$worker->name = 'ChatBusinessWorker';Количество процессов Business Worker
$worker->count = 4;$registerAddress
Заголовок раздела «$registerAddress»Адрес Register сервера
$worker->registerAddress = '127.0.0.1:1236';// Или массив адресов$worker->registerAddress = ['127.0.0.1:1236', '127.0.0.1:1237'];$secretKey
Заголовок раздела «$secretKey»Секретный ключ для аутентификации
$worker->secretKey = $clusterSecret;$eventHandler
Заголовок раздела «$eventHandler»Класс для обработки событий
$worker->eventHandler = 'Events'; // По умолчаниюСобытия через класс Events
Заголовок раздела «События через класс Events»Создайте класс Events.php для обработки событий:
<?phpuse localzet\Server;use localzet\Cluster\Lib\Gateway;
class Events{ public static function onServerStart($server) { Server::log('Business Worker started'); }
public static function onConnect($client_id) { Server::log("Client connected: $client_id");
// Привязка к UID (например, после аутентификации) // Gateway::bindUid($client_id, $uid); }
public static function onMessage($client_id, $message) { Server::log("Message from $client_id: $message");
// Обработка сообщения $data = json_decode($message, true);
if ($data && isset($data['type'])) { switch ($data['type']) { case 'chat': // Отправить сообщение всем в группе Gateway::sendToGroup('room_' . $data['room'], $message); break;
case 'private': // Отправить приватное сообщение Gateway::sendToUid($data['uid'], $message); break; } } }
public static function onClose($client_id) { Server::log("Client disconnected: $client_id");
// Очистка данных пользователя // Можно получить сессию перед отключением // $session = Gateway::getSession($client_id); }
public static function onWebSocketConnect($client_id, $data) { // Обработка WebSocket handshake // $data содержит информацию из $_GET, $_SERVER, $_COOKIE }}Доступные переменные
Заголовок раздела «Доступные переменные»В обработчиках событий доступны следующие переменные:
$_SERVER
Заголовок раздела «$_SERVER»Содержит информацию о соединении:
REMOTE_ADDR- IP клиентаREMOTE_PORT- Порт клиентаGATEWAY_ADDR- IP Gateway сервераGATEWAY_PORT- Порт Gateway сервераGATEWAY_CLIENT_ID- client_id
$_SESSION
Заголовок раздела «$_SESSION»Сессия клиента (автоматически загружается и сохраняется)
Context::$client_id
Заголовок раздела «Context::$client_id»Текущий client_id (только в контексте обработки события)
Методы Gateway
Заголовок раздела «Методы Gateway»Business Worker может использовать методы Gateway для отправки сообщений:
use localzet\Cluster\Lib\Gateway;
// Отправить сообщение конкретному клиентуGateway::sendToClient($client_id, $message);
// Отправить сообщение всем клиентамGateway::sendToAll($message);
// Отправить сообщение группеGateway::sendToGroup($group_id, $message);
// Отправить сообщение по UIDGateway::sendToUid($uid, $message);
// Получить сессию клиента$session = Gateway::getSession($client_id);
// Установить сессиюGateway::setSession($client_id, ['key' => 'value']);
// Обновить сессию (слияние)Gateway::updateSession($client_id, ['new_key' => 'value']);
// Привязать client_id к UIDGateway::bindUid($client_id, $uid);
// Отвязать client_id от UIDGateway::unbindUid($client_id, $uid);
// Добавить клиента в группуGateway::joinGroup($client_id, $group_id);
// Удалить клиента из группыGateway::leaveGroup($client_id, $group_id);
// Проверить онлайн статус$isOnline = Gateway::isOnline($client_id);$isUidOnline = Gateway::isUidOnline($uid);Пример использования
Заголовок раздела «Пример использования»<?phpuse localzet\Server;use localzet\Cluster\Business;
require_once __DIR__ . '/cluster-config.php';require_once __DIR__ . '/Events.php';
$worker = new Business();$worker->name = 'ChatBusinessWorker';$worker->count = 4;$worker->registerAddress = '127.0.0.1:1236';$worker->secretKey = 'secret123';$worker->eventHandler = 'Events';
if (!defined('GLOBAL_START')) { Server::runAll();}Работа с сессиями
Заголовок раздела «Работа с сессиями»Сессии автоматически загружаются и сохраняются:
public static function onMessage($client_id, $message){ // Сессия уже загружена в $_SESSION
// Чтение данных $userId = $_SESSION['user_id'] ?? null;
// Запись данных $_SESSION['last_message'] = $message; $_SESSION['message_count'] = ($_SESSION['message_count'] ?? 0) + 1;
// Сессия автоматически сохранится после обработки события}Производительность
Заголовок раздела «Производительность»- Business Worker не имеет прямых соединений с клиентами
- Все данные передаются через Gateway через оптимизированный бинарный протокол
- Можно запускать множество процессов для параллельной обработки
- Каждое сообщение маршрутизируется в один из доступных процессов