Перейти к содержимому
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 / ClustercmdveilДокументация проекта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 Server✓sutureДокументация проекта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
Каталог

Storage — API

new localzet\Storage\Client($servers) принимает строку адреса либо массив строк. Пустое значение вызывает Exception('Адрес хранилища пуст'). Соединение устанавливается не в конструкторе, а при первой команде.

МетодОтвет сервераОсобенности
set($key, $value)trueСоздаёт или заменяет значение, в том числе null.
get($key)Значение либо nullНе различает отсутствие и сохранённое null.
add($key, $value)true / falseЗаписывает при !isset(); null не считается существующим значением.
increment($key, $step = 1)Новое число либо falseНе создаёт ключ. Нечисловое прежнее значение сбрасывается в ноль.
cas($key, $oldValue, $newValue)true / falseСравнивает MD5 сериализованного старого значения.
delete($key)trueВозвращает true и при отсутствии ключа.

Сетевые ошибки могут прервать любой метод исключением. Возвращаемые значения выше относятся к ответу корректно обработанной команды, а не к гарантии долговечности.

$storage->example = 10;
$value = $storage->example;
$exists = isset($storage->example);
unset($storage->example);

Это оболочки над set/get/delete. isset() делает сетевой get() и проверяет, что ответ не равен null; отдельной операции exists нет. Magic-доступ может конфликтовать с публичными полями клиента timeout и pingInterval, поэтому для произвольных ключей используйте явные методы.

ПолеПо умолчаниюКогда применяется
timeout5 секундУстановка соединения и настройка таймаута нового socket.
pingInterval25 секундРегистрация ping-timer для нового соединения в CLI при наличии Timer.

Публичного close(), настройки TLS, лимита размера ответа и отдельного read timeout в клиенте нет. Протокол не предоставляет идентификатора запроса, через который можно было бы безопасно повторить запись после обрыва связи.

new localzet\Storage\Server($ip = '0.0.0.0', $port = 8008)

Создаёт localzet\Server с адресом frame://<ip>:<port>, одним worker и callback onMessage. Данные находятся в памяти объекта Storage Server. Не используйте default bind для недоверенной сети.

onMessage($connection, $buffer) получает уже декодированный Frame payload. Строка ping игнорируется без ответа. Остальные payload десериализуются и должны содержать cmd и key.

TCP-сообщение состоит из четырёхбайтовой длины в network byte order и PHP-сериализованного payload. Длина включает сам заголовок:

uint32_be(4 + payload_length) | payload

Например, клиентское тело команды записи:

[
'cmd' => 'set',
'key' => 'article:42',
'value' => ['title' => 'Example'],
]
КомандаДополнительные поля
get, deleteНет.
set, addvalue. При отсутствии сервер использует null.
incrementstep.
casmd5 от serialize($oldValue) и новое value.

Ответ — сериализованное значение в Frame-протоколе. Отсутствующий ключ читается как N;, успех записи — b:1;, отказ add/CAS — b:0;.

При отсутствии обязательных полей сервер закрывает соединение с bad request, при неизвестной команде — с bad cmd <command>. Клиентский read() просто десериализует ответ; эти строки не превращаются автоматически в исключения отдельного типа.

Десериализация выполняется и сервером, и клиентом без allowed_classes => false. Контракт не предназначен для чужих payload, публичной API-ручки или хранения недоверенных сериализованных объектов. Фильтрация входа, аутентификация, ограничение размера и защищённый транспорт не реализованы этим пакетом.

Данные на одном сервере обрабатываются одним worker, но это не превращает несколько команд в атомарную транзакцию. Для конкурентного обновления одного значения используйте CAS с ограниченным числом повторов; межключевые инварианты требуют другого механизма.