Search by

cloud-castle / connect-manager

alex-4-17

Унифицированный менеджер сетевых соединений PHP 8.1+: OSI-реестр, TCP/UDP/TLS/Unix, HTTP/SSH/SFTP, sync/async (Fibers), пул, SSRF-guard.

v1.0.0 2026-10-20 07:40 UTC

README

ru · en · de · fr · es · it

Connect Manager

Connect Manager

Production-ready PHP 8.1+ библиотека Connect Manager (CloudCastle).

Packagist Version PHP Version License Downloads Monthly Downloads Packagist Stars Security Policy

Quality CodeQL Semgrep Supply chain GitGuardian Scorecard GitHub stars GitHub forks GitHub issues GitHub release Last commit Contributors

PHPStan PHPCS Psalm Infection Coverage Scrutinizer Code Quality Scrutinizer Build Maintainability Qlty Coverage OpenSSF Scorecard OpenSSF Best Practices SonarCloud Snyk Codacy DeepSource

Зачем

Единый API сетевых соединений для PHP 8.1+: любой протокол из реестра OSI (+ socket/unix/tls), sync и async на Fibers без React/Amp.

Краткая выжимка:

Плюсы

  • Единый Connection API: TCP/UDP/TLS/Unix + реестр OSI; прикладной HTTP/1.1 (JSON/form/redirects) и SSH/SFTP
  • 160 протоколов в реестре, логические соединения для L1/L2 без native PHP
  • SSRF-guard (DNS-resolve + anti-rebinding) и TLS verify peer по умолчанию
  • Non-blocking async connect на Fibers; покрытие ≥99.8%, полный quality-стек

Минусы (допустимые)

  • Пакет моложе и менее распространён, чем react/socket, amphp/socket, Guzzle, phpseclib
  • Нативный SSH/SFTP на openssl+gmp (без Composer runtime-deps); для Ed25519 желателен ext-sodium

Когда применять

  • Нужен один клиент для TCP/UDP/TLS/Unix/HTTP/SSH/SFTP без зоопарка библиотек
  • Sync CLI/FPM и async (Fibers, non-blocking connect) в одном коде
  • Экосистема CloudCastle / строгие требования к security defaults

Установка

composer require cloud-castle/connect-manager

Быстрый старт

<?php

declare(strict_types=1);

use CloudCastle\ConnectManager\ConnectManager;
use CloudCastle\ConnectManager\Contract\ConnectionOptions;

$manager = new ConnectManager();
$options = ConnectionOptions::defaults()->allowPrivateAddresses();

$tcp = $manager->connect('tcp', '127.0.0.1:8080', $options);
$tcp->write("ping\n");
$tcp->close();

$response = $manager->http()->get('https://example.com/');
$ssh = $manager->ssh(
    'example.com:22',
    \CloudCastle\ConnectManager\Contract\AuthCredentials::withPassword('user', 'secret'),
);
echo $ssh->exec('uname -a');
$ssh->close();

$sshKey = $manager->ssh(
    'example.com:22',
    \CloudCastle\ConnectManager\Contract\AuthCredentials::withPublicKey(
        'user',
        '/home/user/.ssh/id_rsa',
        null,
    ),
);
$sshKey->close();

// Логическое соединение для протокола без native-транспорта:
$adsl = $manager->connect('adsl', 'line-1', $options);

Сравнение с аналогами (таблицы фич/порогов): Wiki Comparison.

Документация

Сравнение с аналогами

Актуальные таблицы (фичи / перф / память / безопасность / качество) — в Wiki → Comparison. В README таблицы не дублируются (защита ветки main).

Лицензия

MIT — см. LICENSE.

ru · en · de · fr · es · it