Client API
В примерах $clusterSecret задаётся проверенным общим конфигом из инструкции установки. Не используйте пустые или шаблонные ключи.
Client API позволяет внешним приложениям взаимодействовать с Cluster для отправки сообщений клиентам и управления соединениями.
Настройка
Section titled “Настройка”use localzet\Cluster\Client;
Client::$registerAddress = '127.0.0.1:1236';Client::$secretKey = $clusterSecret;Client::$connectTimeout = 3;Client::$persistentConnection = false;Отправка сообщений
Section titled “Отправка сообщений”Отправить клиенту
Section titled “Отправить клиенту”Client::sendToClient($client_id, $message, $raw = false);Параметры:
$client_id- ID клиента$message- Сообщение для отправки$raw- Отправить как raw данные (без кодирования протоколом)
Пример:
Client::sendToClient('00000000000000000001', 'Hello!');Отправить всем клиентам
Section titled “Отправить всем клиентам”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']);Отправить по UID
Section titled “Отправить по UID”Client::sendToUid($uid, $message, $raw = false);Пример:
// Одному пользователюClient::sendToUid('user123', 'Hello!');
// Нескольким пользователямClient::sendToUid(['user1', 'user2'], 'Group notification');Отправить группе
Section titled “Отправить группе”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]);Управление группами
Section titled “Управление группами”Добавить в группу
Section titled “Добавить в группу”Client::joinGroup($client_id, $group);Удалить из группы
Section titled “Удалить из группы”Client::leaveGroup($client_id, $group);Распустить группу
Section titled “Распустить группу”Client::ungroup($group);Пример:
// Добавить пользователя в комнату чатаClient::joinGroup($client_id, 'chat_room_1');
// Удалить из комнатыClient::leaveGroup($client_id, 'chat_room_1');
// Распустить комнатуClient::ungroup('chat_room_1');Управление UID
Section titled “Управление UID”Привязать UID
Section titled “Привязать UID”Client::bindUid($client_id, $uid);Отвязать UID
Section titled “Отвязать UID”Client::unbindUid($client_id, $uid);Пример:
// После успешной аутентификацииClient::bindUid($client_id, $user_id);
// При выходе пользователяClient::unbindUid($client_id, $user_id);Управление сессиями
Section titled “Управление сессиями”Получить сессию
Section titled “Получить сессию”$session = Client::getSession($client_id);// Возвращает массив или null, если клиент не найденУстановить сессию
Section titled “Установить сессию”Client::setSession($client_id, ['key' => 'value']);// Полная замена сессииОбновить сессию
Section titled “Обновить сессию”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]);Проверка статуса
Section titled “Проверка статуса”Проверить онлайн статус
Section titled “Проверить онлайн статус”$isOnline = Client::isOnline($client_id);// Возвращает 0 или 1Проверить онлайн по UID
Section titled “Проверить онлайн по UID”$isOnline = Client::isUidOnline($uid);// Возвращает 0 или 1Получить client_id по UID
Section titled “Получить client_id по UID”$client_ids = Client::getClientIdByUid($uid);// Возвращает массив client_id (один пользователь может иметь несколько соединений)Получение информации
Section titled “Получение информации”Получить список всех клиентов
Section titled “Получить список всех клиентов”$allClients = Client::getAllClientIdList();// Возвращает массив всех client_idПолучить количество клиентов
Section titled “Получить количество клиентов”$count = Client::getAllClientCount();// Общее количество подключенных клиентовПолучить клиентов группы
Section titled “Получить клиентов группы”$clients = Client::getClientIdListByGroup($group);// Возвращает массив client_id в группеПолучить количество в группе
Section titled “Получить количество в группе”$count = Client::getClientCountByGroup($group);Получить все сессии
Section titled “Получить все сессии”$sessions = Client::getAllClientSessions();// Возвращает массив: client_id => sessionПолучить сессии группы
Section titled “Получить сессии группы”$sessions = Client::getClientSessionsByGroup($group);Закрытие соединений
Section titled “Закрытие соединений”Закрыть клиента
Section titled “Закрыть клиента”Client::closeClient($client_id, $message = null);// Отправляет сообщение и закрывает соединениеУничтожить соединение
Section titled “Уничтожить соединение”Client::destoryClient($client_id);// Немедленное закрытие без отправки сообщенияПример использования
Section titled “Пример использования”<?phprequire_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";Производительность
Section titled “Производительность”- Client API использует синхронные соединения к Gateway
- Для лучшей производительности используйте persistent connections
- Множественные запросы можно выполнять параллельно через пул соединений
- Рекомендуется кешировать списки Gateway адресов