Skip to content
docs.
WORKSPACE

Your documentation

Explore the project catalog
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / Cluster✓cmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Catalog

Business Worker API

В примерах $clusterSecret задаётся проверенным общим конфигом из инструкции установки. Не используйте пустые или шаблонные ключи.

Business Worker обрабатывает бизнес-логику приложения и получает события от Gateway.

use localzet\Cluster\Business;
$worker = new Business();

Имя Business Worker процесса

$worker->name = 'ChatBusinessWorker';

Количество процессов Business Worker

$worker->count = 4;

Адрес Register сервера

$worker->registerAddress = '127.0.0.1:1236';
// Или массив адресов
$worker->registerAddress = ['127.0.0.1:1236', '127.0.0.1:1237'];

Секретный ключ для аутентификации

$worker->secretKey = $clusterSecret;

Класс для обработки событий

$worker->eventHandler = 'Events'; // По умолчанию

События через класс Events

Section titled “События через класс Events”

Создайте класс Events.php для обработки событий:

<?php
use 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
}
}

В обработчиках событий доступны следующие переменные:

Содержит информацию о соединении:

  • REMOTE_ADDR - IP клиента
  • REMOTE_PORT - Порт клиента
  • GATEWAY_ADDR - IP Gateway сервера
  • GATEWAY_PORT - Порт Gateway сервера
  • GATEWAY_CLIENT_ID - client_id

Сессия клиента (автоматически загружается и сохраняется)

Текущий client_id (только в контексте обработки события)

Business Worker может использовать методы Gateway для отправки сообщений:

use localzet\Cluster\Lib\Gateway;
// Отправить сообщение конкретному клиенту
Gateway::sendToClient($client_id, $message);
// Отправить сообщение всем клиентам
Gateway::sendToAll($message);
// Отправить сообщение группе
Gateway::sendToGroup($group_id, $message);
// Отправить сообщение по UID
Gateway::sendToUid($uid, $message);
// Получить сессию клиента
$session = Gateway::getSession($client_id);
// Установить сессию
Gateway::setSession($client_id, ['key' => 'value']);
// Обновить сессию (слияние)
Gateway::updateSession($client_id, ['new_key' => 'value']);
// Привязать client_id к UID
Gateway::bindUid($client_id, $uid);
// Отвязать client_id от UID
Gateway::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);
<?php
use 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 через оптимизированный бинарный протокол
  • Можно запускать множество процессов для параллельной обработки
  • Каждое сообщение маршрутизируется в один из доступных процессов

Source