php websocket实现推送
PHP WebSocket 实现推送
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适用于实时推送场景。PHP 可以通过以下方法实现 WebSocket 推送:
使用 Ratchet 库
Ratchet 是一个流行的 PHP WebSocket 库,基于 ReactPHP 实现。安装 Ratchet 可以通过 Composer:
composer require cboden/ratchet
创建一个简单的 WebSocket 服务器:
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
class MyWebSocket implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
$this->clients->attach($conn);
echo "New connection: {$conn->resourceId}\n";
}
public function onMessage(ConnectionInterface $from, $msg) {
foreach ($this->clients as $client) {
if ($client !== $from) {
$client->send($msg);
}
}
}
public function onClose(ConnectionInterface $conn) {
$this->clients->detach($conn);
echo "Connection closed: {$conn->resourceId}\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "Error: {$e->getMessage()}\n";
$conn->close();
}
}
$server = IoServer::factory(
new HttpServer(
new WsServer(
new MyWebSocket()
)
),
8080
);
$server->run();
运行服务器后,可以通过 JavaScript 客户端连接:

const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = (event) => {
console.log('Message from server:', event.data);
};
socket.send('Hello, WebSocket!');
使用 Swoole 扩展
Swoole 是一个高性能 PHP 协程框架,内置 WebSocket 服务器支持。安装 Swoole 扩展:
pecl install swoole
创建 WebSocket 服务器:

$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
$server->on('open', function (Swoole\WebSocket\Server $server, $request) {
echo "Connection open: {$request->fd}\n";
});
$server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
foreach ($server->connections as $fd) {
if ($fd !== $frame->fd) {
$server->push($fd, $frame->data);
}
}
});
$server->on('close', function ($server, $fd) {
echo "Connection closed: {$fd}\n";
});
$server->start();
客户端连接方式与 Ratchet 类似。
使用 Workerman 框架
Workerman 是另一个高性能 PHP Socket 框架。安装 Workerman:
composer require workerman/workerman
创建 WebSocket 服务器:
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
$ws_worker = new Worker("websocket://0.0.0.0:2346");
$ws_worker->count = 4;
$ws_worker->onConnect = function ($connection) {
echo "New connection\n";
};
$ws_worker->onMessage = function ($connection, $data) use ($ws_worker) {
foreach ($ws_worker->connections as $client) {
if ($client !== $connection) {
$client->send($data);
}
}
};
$ws_worker->onClose = function ($connection) {
echo "Connection closed\n";
};
Worker::runAll();
注意事项
- WebSocket 服务器需要长时间运行,建议使用 Supervisor 管理进程。
- 生产环境应配置 SSL/TLS(wss://)保证通信安全。
- 对于高并发场景,Swoole 或 Workerman 性能优于 Ratchet。
- 前端需处理连接断开重连逻辑。






