Download the PHP package krzysztofzylka/websocket without Composer
On this page you can find all versions of the php package krzysztofzylka/websocket. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package websocket
Websocket Library
Minimalna biblioteka WebSocket dla PHP 8.3+, zbudowana na podstawie krzysztofzylka/event-loop. Zapewnia serwer WebSocket, obsługę połączeń, dekodowanie ramek zgodnie z RFC 6455 oraz prosty model zdarzeń (onOpen, onMessage, onClose, onError, onPing, onPong).
Wymagania
- PHP 8.3 lub nowszy z rozszerzeniami
socketsimbstring - Composer
Instalacja
Szybki start
TLS (wss://)
Kontekst ssl musi zawierać co najmniej klucz i certyfikat serwera. Opcjonalnie możesz ustawić niestandardową metodę szyfrowania poprzez Server::setTlsCryptoMethod(). Dzięki tls_auto_reload biblioteka cyklicznie sprawdzi zmiany w plikach certyfikatu i zaktualizuje ustawienia bez restartu serwera.
Kompresja permessage-deflate
Jeżeli klient proponuje permessage-deflate i zainstalowane jest rozszerzenie zlib, serwer automatycznie negocjuje kompresję. Zachowanie można kontrolować:
Duże wiadomości binarne
Fragmentowane lub duże wiadomości binarne po przekroczeniu zadanego progu trafiają do handlera onBinaryStream, dzięki czemu można je przetwarzać strumieniowo (bez kopiowania całych danych do pamięci).
Mniejsze payloady wciąż trafiają do onMessage z $isText === false.
enableAdaptiveTextStreaming() obserwuje zużycie pamięci i automatycznie reguluje próg streamowania tekstu, co pomaga utrzymać stabilność przy dużej liczbie równoległych, długich wiadomości.
Zabezpieczenia
Niewalidowany klient otrzyma odpowiedź HTTP 401/403, a połączenie zostanie zakończone kodem 1008 (policy violation).
Przy włączonej kompresji setMaxDecompressionRatio() pilnuje relacji pomiędzy rozmiarem skompresowanych danych a wynikiem dekompresji – nadmierne rozprężenie kończy połączenie kodem 1008 zanim zużyje pamięć serwera.
Limit połączeń i kolejka
Po przekroczeniu limitu nowe gniazda trafiają do kolejki FIFO. Gdy zwolni się miejsce, serwer automatycznie zacznie obsługiwać oczekujące połączenia. Jeśli kolejka osiągnie limit, klient otrzyma odpowiedź 503 i gniazdo zostanie zamknięte.
Identyfikacja i metadane połączeń
Każde połączenie otrzymuje unikalny identyfikator (Connection::getId()), który możesz wykorzystać w logach lub jako klucz w mapach. Dodatkowo połączenia udostępniają etykietę i dowolne właściwości, dzięki czemu łatwo przypiszesz np. identyfikator użytkownika:
Metadane są przechowywane tylko w pamięci i usuwane automatycznie przy zamknięciu połączenia.
Statystyki runtime
getStats() zwraca m.in. liczbę aktywnych i oczekujących połączeń, liczbę odebranych/wysłanych wiadomości, sumę bajtów, średni rozmiar wiadomości oraz aktualne zużycie pamięci (memory_get_usage).
Przykłady
-
Uruchom serwer:
-
Otwórz klienta w przeglądarce:
Domyślnie łączy się z
ws://127.0.0.1:8088. Wiadomości wysłane z jednej karty są nadawane do wszystkich połączonych klientów.Serwer testowy loguje statystyki (
getStats()) co 10 sekund, dzięki czemu możesz podejrzeć aktualne obciążenie.
API w skrócie
Server::start()/Server::stop()– uruchamia/zatrzymuje nasłuchiwanie.Server::broadcast(string $payload, bool $binary = false)– wysyła wiadomość do wszystkich otwartych połączeń.Connection::sendText(string $payload)/Connection::sendBinary(string $payload)– wysyłanie do pojedynczego klienta.- Obsługa zdarzeń:
onOpen,onMessage,onClose,onError,onPing,onPong. - Dostęp do informacji o kliencie:
Connection::getPath(),Connection::getHeaders(),Connection::getQueryParameters(),Connection::getSubprotocol(). - Identyfikacja i metadane:
Connection::getId(),Connection::setLabel()/getLabel(),Connection::setProperty()/getProperty()/hasProperty()/removeProperty(),Connection::getProperties(). - Konfiguracja TLS i kompresji:
enableTls,setTlsCryptoMethod,enableCompression,setCompressionContextTakeover,setCompressionMinBytes. - Limity i strumieniowanie:
setMaxMessageSize,setBinaryStreamThreshold,setTextStreamThreshold,onBinaryStream. - Bezpieczeństwo:
setAllowedOrigins,requireOriginHeader,setAuthValidator. - Logowanie:
enableLogging,isLoggingEnabled. - Adaptacja/TLS:
enableAdaptiveTextStreaming,setAdaptiveMemoryTarget,setMaxDecompressionRatio,enableTls,enableTlsAutoReload. - Zarządzanie połączeniami:
setMaxConnections,setConnectionQueueLimit,getPendingConnectionCount(). - Statystyki:
getStats,resetStats.
Testowanie
Lint:
Możesz dodać własne testy integracyjne, np. z użyciem klienta WebSocket w PHP lub JavaScript.
Licencja
MIT