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']);Отправить по UID
Заголовок раздела «Отправить по UID»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');Управление UID
Заголовок раздела «Управление UID»Привязать UID
Заголовок раздела «Привязать UID»Client::bindUid($client_id, $uid);Отвязать UID
Заголовок раздела «Отвязать 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Проверить онлайн по UID
Заголовок раздела «Проверить онлайн по UID»$isOnline = Client::isUidOnline($uid);// Возвращает 0 или 1Получить client_id по UID
Заголовок раздела «Получить client_id по UID»$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);// Немедленное закрытие без отправки сообщенияПример использования
Заголовок раздела «Пример использования»<?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";Производительность
Заголовок раздела «Производительность»- Client API использует синхронные соединения к Gateway
- Для лучшей производительности используйте persistent connections
- Множественные запросы можно выполнять параллельно через пул соединений
- Рекомендуется кешировать списки Gateway адресов