kim1ne / socket-server
There is no license information available for the latest version (1.1.0) of this package.
1.1.0
2025-02-13 18:16 UTC
Requires
- php: >=8.1
- kim1ne/core: 1.0.0
README
This package can be installed as a Composer dependency.
composer require kim1ne/socket-server
The library uses libraries of the ReactPHP for async. Stream locks
Supported protocols
- WS - see RFC6455
- WSS
- TCP
- UDP
- TLS
Usage
- Create server
- Example: create server TLS/WSS
- Send message to all connected
- Send message to selected
- Set property for connection
Create server and run
use Kim1ne\InputMessage; use Kim1ne\Socket\Server\Connection; use Kim1ne\Socket\Message; use Kim1ne\Socket\Server\Server; use Kim1ne\Socket\Server\Transport; $server = new Server(transport: Transport::WS, port: 2346); $server->on('connection', function (Connection $connection, Server $server) { InputMessage::green('Connected!') }); $server->on('message', function (Message $message, Connection $connection, Server $server) { InputMessage::green("I've got the message!"); }); $server->on('close', function (Server $server) { InputMessage::green('Disconnected') }); $server->on('error', function (\Throwable $throwable) { InputMessage::red('Error: ' . $throwable->getMessage()); }); $server->run();
Example: create server TLS/WSS
use Kim1ne\Socket\Server\Server; use Kim1ne\Socket\Server\Transport; $server = new Server(transport: Transport::TLS, port: 2346, serverContext: [ "ssl" => [ "local_cert" => "./certs/server.crt", "local_pk" => "./certs/server.key", "verify_peer" => false, "crypto_method" => STREAM_CRYPTO_METHOD_TLSv1_2_SERVER | STREAM_CRYPTO_METHOD_TLSv1_3_SERVER, "disable_compression" => true, ] ]);
Send message to all connected
/** * @var \Kim1ne\Socket\Server\Server $server */ $server->sendAll('{message: "The message to all"}');
Send message to selected
use Kim1ne\Socket\Server\Connection; $server->sendChoice('{message: "The message to selected"}', function (Connection $connection) { return (int) $connection->get('user_id') === 1; });
Set property for connection
the object \Kim1ne\Socket\Server\Connection supports dynamic properties
use Kim1ne\Socket\Server\Connection; use Kim1ne\Socket\Message; use Kim1ne\Socket\Server\Server; /** * @var \Kim1ne\Socket\Server\Server $server */ $server->on('message', function (Message $message, Connection $connection, Server $server) { $message = $message->getDecodeJson(); if ($message['type'] === 'auth') { $userId = $message['user_id']; $connection->set('user_id', $userId); } })