当前位置:首页 > PHP

php 实现websocket

2026-01-29 19:19:08PHP

PHP 实现 WebSocket 的方法

PHP 可以通过多种方式实现 WebSocket 服务。以下是几种常见的方法:

使用 Ratchet 库

Ratchet 是一个流行的 PHP WebSocket 库,基于 ReactPHP 实现。安装 Ratchet 可以通过 Composer:

composer require cboden/ratchet

创建一个简单的 WebSocket 服务器:

php 实现websocket

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;

class MyWebSocket implements MessageComponentInterface {
    public function onOpen(ConnectionInterface $conn) {
        echo "New connection: {$conn->resourceId}\n";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        echo "Received message: {$msg}\n";
        $from->send("Echo: {$msg}");
    }

    public function onClose(ConnectionInterface $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 = (e) => console.log(e.data);
socket.send('Hello WebSocket!');

使用 Swoole 扩展

Swoole 是一个高性能 PHP 扩展,内置 WebSocket 支持。安装 Swoole:

php 实现websocket

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) {
    echo "Received message: {$frame->data}\n";
    $server->push($frame->fd, "Echo: {$frame->data}");
});

$server->on('close', function ($server, $fd) {
    echo "Connection closed: {$fd}\n";
});

$server->start();

使用 Workerman 框架

Workerman 是另一个 PHP 异步框架,支持 WebSocket。安装 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->onConnect = function ($connection) {
    echo "New connection\n";
};

$ws_worker->onMessage = function ($connection, $data) {
    echo "Received: {$data}\n";
    $connection->send("Echo: {$data}");
};

$ws_worker->onClose = function ($connection) {
    echo "Connection closed\n";
};

Worker::runAll();

注意事项

  • PHP 默认是同步阻塞的,直接使用原生 PHP 实现 WebSocket 性能较差,建议使用上述异步框架或扩展。
  • WebSocket 服务器需要长时间运行,不能像普通 PHP 脚本一样执行完就退出。
  • 生产环境建议配合 Nginx 或 Apache 反向代理 WebSocket 服务,处理 SSL 和负载均衡。

标签: phpwebsocket
分享给朋友:

相关文章

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…

php实现单一入口

php实现单一入口

PHP 单一入口实现方法 单一入口(Single Entry Point)是一种设计模式,通过一个入口文件(如index.php)集中处理所有请求,实现路由分发、统一初始化等操作。以下是实现方法:…