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

Gateway API

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

Gateway - это класс, который расширяет localzet\Server и обрабатывает клиентские соединения.

use localzet\Cluster\Gateway;
$gateway = new Gateway("websocket://127.0.0.1:7273", [], $clusterSecret);

Имя Gateway процесса

$gateway->name = 'ChatGateway';

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

$gateway->count = 4;

IP-адрес локальной машины для внутренней коммуникации

$gateway->lanIp = '127.0.0.1'; // По умолчанию

Начальный порт для внутренней коммуникации между Gateway и Business Worker

$gateway->startPort = 2800; // Каждый процесс использует startPort + id

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

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

Интервал отправки ping сообщений клиентам (секунды)

$gateway->pingInterval = 10; // Отключено, если 0

Данные для ping сообщения

$gateway->pingData = '{"type":"ping"}';

Максимальное количество неотвеченных ping перед отключением клиента

$gateway->pingNotResponseLimit = 2; // 0 = отключено

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

$gateway->secretKey = $clusterSecret;

Функция маршрутизации сообщений к Business Worker

// По умолчанию: привязка client_id к конкретному Business Worker
$gateway->router = [Gateway::class, 'routerBind'];
// Случайная маршрутизация
$gateway->router = [Gateway::class, 'routerRand'];
// Пользовательская функция
$gateway->router = function($server_connections, $client_connection, $cmd, $buffer) {
// Вернуть TcpConnection к Business Worker
};

Вызывается при подключении клиента

$gateway->onConnect = function($connection) {
// $connection - TcpConnection объект клиента
echo "Client connected: " . $connection->id . "\n";
};

Вызывается при получении сообщения от клиента

$gateway->onMessage = function($connection, $data) {
echo "Message: " . $data . "\n";
};

Вызывается при отключении клиента

$gateway->onClose = function($connection) {
echo "Client disconnected: " . $connection->id . "\n";
};

Вызывается при подключении Business Worker к Gateway

$gateway->onBusinessConnected = function($connection) {
echo "Business Worker connected\n";
};

Вызывается при отключении Business Worker

$gateway->onBusinessClose = function($connection) {
echo "Business Worker disconnected\n";
};

Привязывает client_id к конкретному Business Worker при первом сообщении. Все последующие сообщения от этого клиента идут к тому же Worker.

Случайная маршрутизация - каждый раз выбирается случайный Business Worker.

<?php
use localzet\Server;
use localzet\Cluster\Gateway;
require_once __DIR__ . '/cluster-config.php';
$gateway = new Gateway("websocket://127.0.0.1:7273");
$gateway->name = 'ChatGateway';
$gateway->count = 4;
$gateway->lanIp = '127.0.0.1';
$gateway->startPort = 2800;
$gateway->pingInterval = 10;
$gateway->pingData = '{"type":"ping"}';
$gateway->registerAddress = '127.0.0.1:1236';
$gateway->secretKey = 'secret123';
$gateway->onConnect = function($connection) {
Server::log('Client connected: ' . $connection->id);
};
if (!defined('GLOBAL_START')) {
Server::runAll();
}

Каждый Gateway процесс создает внутренний порт для связи с Business Worker’ами:

  • Процесс с id = 0: startPort + 0 (например, 2800)
  • Процесс с id = 1: startPort + 1 (например, 2801)
  • И так далее…

Business Worker’ы подключаются к этим портам для получения событий от клиентов.

Source