From 16fa77229c49b891388678a527ef8ef8fa76e9d5 Mon Sep 17 00:00:00 2001 From: Christopher Vagnetoft Date: Sat, 24 Feb 2024 00:15:57 +0100 Subject: [PATCH] Updated example, readme --- README.md | 17 +++++++++-------- examples/server.php | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 60d2ca3..4460f4d 100644 --- a/README.md +++ b/README.md @@ -2,18 +2,12 @@ ## Installing -Install using composer: +It is recommended that you use composer to install the package: ```shell -$ composer require noccylabs/react-websocket +$ composer require noccylabs/react-websocket:^0.1.0 ``` -## Why not Ratchet? - -Ratchet is great! I've used Ratchet in the past, and it is a fantastic piece of code. It is however more application-centered, which means it doesn't do events and all that beautiful magic we've come to love ReactPHP for. - -TL;DR - If you need to build an application with neatly wrapped classes without caring to much about the internals, go with Ratchet. If you want to work with websockets in the same way you work with sockets in ReactPHP, go with this library. - ## Missing Features The following features are missing, or work in progress: @@ -21,6 +15,13 @@ The following features are missing, or work in progress: * Idle timeout and ping timeout * Protocol errors should close with error codes * Exceptions +* Full tested support for fragmented frames + +## Why not Ratchet? + +Ratchet is great! I've used Ratchet in the past, and it is a fantastic piece of code. It is however more application-centered, which means it doesn't do events and all that beautiful magic we've come to love ReactPHP for. + +TL;DR - If you need to build an application with neatly wrapped classes without caring to much about the internals, go with Ratchet. If you want to work with websockets in the same way you work with sockets in ReactPHP, go with this library. ## Server diff --git a/examples/server.php b/examples/server.php index 5983130..612e5fd 100644 --- a/examples/server.php +++ b/examples/server.php @@ -10,8 +10,14 @@ use React\Http\Message\Response; use React\Promise\Promise; use React\Socket\SocketServer; +// The middleware is at the core, as it intercepts and breaks out the websocket +// connections received by the HttpServer. $websockets = new WebSocketMiddleware(); +// The 'connection' handler works like expected. You can't however write any data +// to the client yet, as the websocket streams have not yet been returned. $websockets->on('connection', function (WebSocketInterface $websocket) { + // This just echoes text received, unless the websocket is part of a group. + // In this case the message is sent to all websockets in the group. $websocket->on('text', function ($text) use ($websocket) { if (str_starts_with($text, '#')) { $websocket->setGroup(substr($text,1)); @@ -27,8 +33,10 @@ $websockets->on('connection', function (WebSocketInterface $websocket) { }); }); +// Create the server with our middleware chain: +// error handler -> websocket handler -> http handler $server = new HttpServer( - $websockets, + // Error handler function (ServerRequestInterface $request, callable $next) { $promise = new Promise(function ($resolve) use ($next, $request) { $resolve($next($request)); @@ -39,11 +47,14 @@ $server = new HttpServer( )->withStatus(Response::STATUS_INTERNAL_SERVER_ERROR); }); }, + // WebSocket handler + $websockets, + // HTTP handler function (ServerRequestInterface $request) { return Response::plaintext("Hello world!"); } ); +// Everything else is as expected! $socket = new SocketServer("tcp://0.0.0.0:8000"); - -$server->listen($socket); \ No newline at end of file +$server->listen($socket);