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

This package is auto-updated.

Last update: 2025-05-13 18:55:40 UTC


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

Usage

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);
    }
})