Join 4,000+ others and never miss out on new tips, tutorials, and more.
4.x is outdated, please check the latest version 22.x
Latest version:
pecl install openswoole-22.1.2
<?php Swoole\WebSocket\Server->push(int $fd, string $data, int $opcode = 1, int $flags = SWOOLE_WEBSOCKET_FLAG_FIN): bool
The file descriptor of the WebSocket connection, it can be found from the frame, must be a WebSocket client not a TCP client
Can only be string or binary data to send back to the client (this sets the format of the data)
The opcode of the data frame: WEBSOCKET_OPCODE_TEXT
or WEBSOCKET_OPCODE_BINARY
, WEBSOCKET_OPCODE_PING
Set the WebSocket flag for compression
If success, it returns true
, otherwise it returns false
Push data to the connected WebSocket client. Shall not exceed the maximum length of 2M.
Since version v4.2.0 the signature of this method has changed, before this function had $finish
as the last parameter and the signature looked like:
<?php
Swoole\WebSocket\Server->push(int $fd, string $data, int $opcode = WEBSOCKET_OPCODE_TEXT, bool $finish = true): bool
So after v4.2.0, the $finish
parameter has been replaced with int $flags = SWOOLE_WEBSOCKET_FLAG_FIN
instead. This is so WebSocket compression can be supported. The default is SWOOLE_WEBSOCKET_FLAG_FIN
but you can also use SWOOLE_WEBSOCKET_FLAG_COMPRESS
.
When sending data if you pass in a Swoole\WebSocket\Frame
object, Swoole will handle data formatting for you, so the $data
and $flags
parameters will be ignored and the object will be used instead.
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
$server = new Server("127.0.0.1", 9501);
$server->on("Start", function(Server $server)
{
echo "Swoole WebSocket Server is started at 127.0.0.1:9501\n";
});
$server->on('Open', function(Server $server, Swoole\Http\Request $request)
{
echo "connection open: {$request->fd}\n";
$server->tick(1000, function() use ($server, $request)
{
$server->push($request->fd, json_encode(["hello", time()]));
});
});
$server->on('Message', function(Server $server, Frame $frame)
{
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", time()]));
});
$server->on('Close', function(Server $server, int $fd)
{
echo "connection close: {$fd}\n";
});
$server->start();