Documentation / Examples
Here are some examples on how to use the WebSocket library.
In dev environment (as in having run composer to include dev dependencies) you have access to a simple echo logger that print out information synchronously.
This is usable for debugging. For production, use a proper logger.
$logger = new WebSocket\Test\EchoLog();
$client = new WebSocket\Client('wss://echo.websocket.org/');
$client->setLogger($logger);
$server = new WebSocket\Server();
$server->setLogger($logger);
An example of server output;
info | Server listening to port 80 []
debug | Wrote 129 of 129 bytes. []
info | Server connected to port 80 []
info | Received 'text' message []
debug | Wrote 9 of 9 bytes. []
info | Sent 'text' message []
debug | Received 'close', status: 1000. []
debug | Wrote 32 of 32 bytes. []
info | Sent 'close' message []
info | Received 'close' message []
This setup will create Client that sends initial message to Server,
and then subscribes to messages sent by Server.
The PingInterval
(possibly change interval) will keep connection open.
If something goes wrong, it will in most cases be able to re-connect and resume subscription.
use Psr\Http\Message\ResponseInterface;
use WebSocket\Client;
use WebSocket\Connection;
use WebSocket\Connection;
use WebSocket\Exception\Exception;
use WebSocket\Message\Message;
use WebSocket\Middleware\CloseHandler;
use WebSocket\Middleware\PingResponder;
use WebSocket\Middleware\PingInterval;
// Create client
$client = new Client("wss://echo.websocket.org/");
$client
// Add standard middlewares
->addMiddleware(new CloseHandler())
->addMiddleware(new PingResponder())
// Add ping interval middleware as heartbeat to keep connection open
->addMiddleware(new PingInterval(interval: 30))
->onHandshake(function (Client $client, Connection $connection, RequestInterface $request, ResponseInterface $response) {
// Initial message, typically some authorization or configuration
// This will be called everytime the client connect or reconnect
$client->text($initial_message);
})
->onText(function (Client $client, Connection $connection, Message $message) {
// Act on incoming message
$message->getContent();
// Possibly respond to server
$client->text($some_message);
})
->onError(function (Client $client, Connection|null $connection, Exception $exception) {
// Act on exception
if (!$client->isRunning()) {
// Re-start if not running - will reconnect if necessary
$client->start();
}
})
// Start subscription
->start()
;
Source: examples/send.php
A simple, single send/receive client.
Example use:
php examples/send.php --opcode text "A text message" // Send a text message to localhost
php examples/send.php --opcode ping "ping it" // Send a ping message to localhost
php examples/send.php --uri ws://echo.websocket.org "A text message" // Send a text message to echo.websocket.org
php examples/send.php --opcode text --debug "A text message" // Use runtime debugging
Source: examples/echoserver.php
A simple server that responds to received commands.
Example use:
php examples/echoserver.php // Run with default settings
php examples/echoserver.php --port 8080 // Listen on port 8080
php examples/echoserver.php --debug // Use runtime debugging
These strings can be sent as message to trigger server to perform actions;
@close
- Server will close current connection@ping
- Server will send a ping message on current connection@disconnect
- Server will disconnect current connection@info
- Server will respond with connection info@server-stop
- Server will stop listening@server-close
- Server will close all connections@server-ping
- Server will send a ping message on all connections@server-disconnect
- Server will disconnect all connections@server-info
- Server will respond with server info- For other sent strings, server will respond with the same strings
Source: examples/random_client.php
The random client will use random options and continuously send/receive random messages.
Example use:
php examples/random_client.php --uri ws://echo.websocket.org // Connect to echo.websocket.org
php examples/random_client.php --timeout 5 --framesize 16 // Specify settings
php examples/random_client.php --debug // Use runtime debugging
Source: examples/random_server.php
The random server will use random options and continuously send/receive random messages.
Example use:
php examples/random_server.php --port 8080 // // Listen on port 8080
php examples/random_server.php --timeout 5 --framesize 16 // Specify settings
php examples/random_server.php --debug // Use runtime debugging