当前位置:首页 > PHP

php websocket实现推送

2026-02-15 13:57:54PHP

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 客户端连接:

php websocket实现推送

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 服务器:

php 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。
  • 前端需处理连接断开重连逻辑。

标签: phpwebsocket
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

vue实现websocket

vue实现websocket

Vue 实现 WebSocket 连接 在 Vue 项目中实现 WebSocket 连接,可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种方…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…