Перейти к содержимому
docs.
WORKSPACE

Документации проектов

Открыть каталог проектов
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
Каталог

Client API

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

Client API позволяет внешним приложениям взаимодействовать с Cluster для отправки сообщений клиентам и управления соединениями.

use localzet\Cluster\Client;
Client::$registerAddress = '127.0.0.1:1236';
Client::$secretKey = $clusterSecret;
Client::$connectTimeout = 3;
Client::$persistentConnection = false;
Client::sendToClient($client_id, $message, $raw = false);

Параметры:

  • $client_id - ID клиента
  • $message - Сообщение для отправки
  • $raw - Отправить как raw данные (без кодирования протоколом)

Пример:

Client::sendToClient('00000000000000000001', 'Hello!');
Client::sendToAll($message, $client_id_array = null, $exclude_client_id = null, $raw = false);

Пример:

// Всем клиентам
Client::sendToAll('Broadcast message');
// Списку клиентов
Client::sendToAll('Group message', ['client1', 'client2']);
// Всем кроме некоторых
Client::sendToAll('Message', null, ['client1']);
Client::sendToUid($uid, $message, $raw = false);

Пример:

// Одному пользователю
Client::sendToUid('user123', 'Hello!');
// Нескольким пользователям
Client::sendToUid(['user1', 'user2'], 'Group notification');
Client::sendToGroup($group, $message, $exclude_client_id = null, $raw = false);

Пример:

// Всем в группе
Client::sendToGroup('room_1', 'New message in room');
// Всем в группе кроме отправителя
Client::sendToGroup('room_1', $message, [$sender_client_id]);
Client::joinGroup($client_id, $group);
Client::leaveGroup($client_id, $group);
Client::ungroup($group);

Пример:

// Добавить пользователя в комнату чата
Client::joinGroup($client_id, 'chat_room_1');
// Удалить из комнаты
Client::leaveGroup($client_id, 'chat_room_1');
// Распустить комнату
Client::ungroup('chat_room_1');
Client::bindUid($client_id, $uid);
Client::unbindUid($client_id, $uid);

Пример:

// После успешной аутентификации
Client::bindUid($client_id, $user_id);
// При выходе пользователя
Client::unbindUid($client_id, $user_id);
$session = Client::getSession($client_id);
// Возвращает массив или null, если клиент не найден
Client::setSession($client_id, ['key' => 'value']);
// Полная замена сессии
Client::updateSession($client_id, ['new_key' => 'value']);
// Слияние с существующей сессией

Пример:

// Получить данные пользователя
$session = Client::getSession($client_id);
$userId = $session['user_id'] ?? null;
// Обновить данные
Client::updateSession($client_id, [
'last_active' => time(),
'message_count' => 100
]);
$isOnline = Client::isOnline($client_id);
// Возвращает 0 или 1
$isOnline = Client::isUidOnline($uid);
// Возвращает 0 или 1
$client_ids = Client::getClientIdByUid($uid);
// Возвращает массив client_id (один пользователь может иметь несколько соединений)
$allClients = Client::getAllClientIdList();
// Возвращает массив всех client_id
$count = Client::getAllClientCount();
// Общее количество подключенных клиентов
$clients = Client::getClientIdListByGroup($group);
// Возвращает массив client_id в группе
$count = Client::getClientCountByGroup($group);
$sessions = Client::getAllClientSessions();
// Возвращает массив: client_id => session
$sessions = Client::getClientSessionsByGroup($group);
Client::closeClient($client_id, $message = null);
// Отправляет сообщение и закрывает соединение
Client::destoryClient($client_id);
// Немедленное закрытие без отправки сообщения
<?php
require_once __DIR__ . '/cluster-config.php';
use localzet\Cluster\Client;
// Настройка
Client::$registerAddress = '127.0.0.1:1236';
Client::$secretKey = 'secret123';
// Отправить уведомление пользователю
$userId = 12345;
if (Client::isUidOnline($userId)) {
$clientIds = Client::getClientIdByUid($userId);
foreach ($clientIds as $clientId) {
Client::sendToClient($clientId, json_encode([
'type' => 'notification',
'message' => 'You have a new message!'
]));
}
}
// Отправить сообщение в группу
Client::sendToGroup('chat_room_1', json_encode([
'type' => 'message',
'user' => 'Admin',
'text' => 'Server maintenance in 5 minutes'
]));
// Получить статистику
$totalUsers = Client::getAllClientCount();
$roomUsers = Client::getClientCountByGroup('chat_room_1');
echo "Total: $totalUsers, In room: $roomUsers\n";
  • Client API использует синхронные соединения к Gateway
  • Для лучшей производительности используйте persistent connections
  • Множественные запросы можно выполнять параллельно через пул соединений
  • Рекомендуется кешировать списки Gateway адресов

Исходник