PHP code example of initphp / socket

1. Go to this page and download the library: Download initphp/socket library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

initphp / socket example snippets


use InitPHP\Socket\Socket;
use InitPHP\Socket\Enum\Transport;

$server = Socket::server(Transport::TCP, '127.0.0.1', 8080);
$server->listen();
$server->live(function ($srv, $conn) {
    $message = $conn->read(1024);
    $conn->write("echo: {$message}");
});

use InitPHP\Socket\Socket;
use InitPHP\Socket\Enum\Transport;
use InitPHP\Socket\Interfaces\{SocketServerInterface, SocketConnectionInterface};

$server = Socket::server(Transport::TCP, '127.0.0.1', 8080);
$server->listen();

$server->live(function (SocketServerInterface $srv, SocketConnectionInterface $conn) {
    $message = $conn->read(1024);
    if ($message === null) {
        return;
    }
    if ($message === 'quit') {
        $conn->write("bye\n");
        $conn->close();
        return;
    }
    $conn->write("echo: {$message}");
});

use InitPHP\Socket\Socket;
use InitPHP\Socket\Enum\Transport;

$client = Socket::client(Transport::TCP, '127.0.0.1', 8080);
$client->connect();

$client->write("hello\n");
echo $client->read(1024);

$client->disconnect();

use InitPHP\Socket\Socket;
use InitPHP\Socket\Enum\Transport;
use InitPHP\Socket\Interfaces\{SocketServerInterface, SocketConnectionInterface};

$server = Socket::server(Transport::TLS, '127.0.0.1', 8443, timeout: 5.0)
    ->option('local_cert', __DIR__ . '/server.pem')
    ->option('allow_self_signed', true);

$server->listen();

$server->live(function (SocketServerInterface $srv, SocketConnectionInterface $conn) {
    $input = $conn->read();
    if ($input === null) {
        return;
    }
    if (\preg_match('/^REGISTER\s+([\w-]{3,})$/i', $input, $m) === 1) {
        $srv->register($m[1], $conn);
        $conn->write("Welcome, {$m[1]}\n");
        return;
    }
    if (\preg_match('/^SEND\s+@([\w-]+)\s+(.*)$/i', $input, $m) === 1) {
        $srv->broadcast($m[2], $m[1]);
        return;
    }
    $srv->broadcast(\trim($input));
});

use InitPHP\Socket\Socket;
use InitPHP\Socket\Enum\Transport;

$client = Socket::client(Transport::SSL, 'smtp.gmail.com', 465, timeout: 10.0)
    ->option('verify_peer', false)
    ->option('verify_peer_name', false);

$client->connect();
$client->write("EHLO [127.0.0.1]\r\n");
echo $client->read(1024);
$client->disconnect();

Socket::server(
    Transport $transport,
    string $host,
    int $port,
    ?Domain $domain = null,   // Defaults to Domain::V4 for TCP/UDP. Ignored for TLS/SSL.
    ?float $timeout = null,   // Connect/handshake timeout for TLS/SSL.
): SocketServerInterface;

Socket::client(
    Transport $transport,
    string $host,
    int $port,
    ?Domain $domain = null,
    ?float $timeout = null,
): SocketClientInterface;

$server->option(string $key, mixed $value): static  // SSL stream context option
$server->timeout(float $seconds): static
$server->blocking(bool $mode = true): static
$server->crypto(?CryptoMethod $method): static

InitPHP\Socket\Enum\Transport     // TCP, UDP, TLS, SSL
InitPHP\Socket\Enum\Domain        // V4, V6, UNIX
InitPHP\Socket\Enum\CryptoMethod  // SSLv2/3/23, ANY, TLS, TLSv1_0/1_1/1_2

$server->listen();

while ($yourEventLoop->running()) {
    $events = $server->tick(function ($srv, $conn) { /* ... */ }, waitSeconds: 0.0);
    if ($events === 0) {
        $yourEventLoop->yield();
    }
}