NOTE: Only StreamHandler
supported (so not CurlHandler
!).
composer install valtzu/guzzle-websocket-middleware
Guzzle's synchronous
option is used to configure the stream blocking option.
$handlerStack = new HandlerStack(new StreamHandler());
$handlerStack->push(new WebSocketMiddleware());
$guzzle = new Client(['handler' => $handlerStack]);
$handshakeResponse = $guzzle->request('GET', 'wss://ws.postman-echo.com/raw');
$ws = $handshakeResponse->getBody();
$ws->write("Hello world");
$helloWorld = $ws->read(); // This will block until the reply frame is received
$handlerStack = new HandlerStack(new StreamHandler());
$handlerStack->push(new WebSocketMiddleware());
$guzzle = new Client(['handler' => $handlerStack]);
$handshakeResponse = $guzzle->requestAsync('GET', 'wss://ws.postman-echo.com/raw')->wait();
$ws = $handshakeResponse->getBody();
$ws->write("Hello world");
$helloWorld = $ws->read(); // Here you may get an empty string if data wasn't received yet
Whenever you read from a websocket stream, instead of receiving a text/binary frame, you may receive "ping" instead.
When this happens, we automatically respond with "pong". However, due to being PHP (usually) being single-threaded,
this means that you must make sure read
(even with 0
length) is done frequently enough.
It's also possible to manually send a ping – however, it does not wait for the other party to reply.
$ws->ping();
- If you have an issue with package, or you have a feature request, please open an issue
- If you want to contribute code, you may submit a Pull Request. Just remember to add tests.