当前位置:首页 > PHP

php实现websocket

2026-02-13 12:15:32PHP

PHP 实现 WebSocket 的方法

WebSocket 是一种全双工通信协议,允许客户端和服务器之间进行实时数据传输。PHP 可以通过以下几种方式实现 WebSocket 功能:

使用 Ratchet 库

Ratchet 是一个流行的 PHP WebSocket 库,基于 ReactPHP 实现,适合构建实时应用。

安装 Ratchet:

composer require cboden/ratchet

创建 WebSocket 服务器:

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

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

    public function onMessage(ConnectionInterface $conn, $msg) {
        echo "Received message: $msg\n";
        $conn->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 = new \Ratchet\App('localhost', 8080);
$server->route('/ws', new MyWebSocket());
$server->run();

启动服务器:

php server.php

使用 Swoole 扩展

Swoole 是一个高性能 PHP 协程框架,内置 WebSocket 服务器支持。

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) {
    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();

启动服务器:

php server.php

使用 Workerman 框架

Workerman 是另一个高性能 PHP Socket 框架,支持 WebSocket。

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) {
    $connection->send("Echo: $data");
};

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

Worker::runAll();

启动服务器:

php server.php start

客户端连接示例

使用 JavaScript 连接 WebSocket 服务器:

const socket = new WebSocket('ws://localhost:8080/ws');

socket.onopen = function() {
    console.log('Connected');
    socket.send('Hello Server');
};

socket.onmessage = function(event) {
    console.log('Message from server:', event.data);
};

socket.onclose = function() {
    console.log('Disconnected');
};

注意事项

  • Ratchet 和 Workerman 是纯 PHP 实现,适合小型项目。
  • Swoole 需要安装扩展,性能更高,适合高并发场景。
  • 生产环境建议使用 Nginx 反向代理 WebSocket 连接。
  • WebSocket 服务器需要长期运行,可以使用 Supervisor 管理进程。

标签: phpwebsocket
分享给朋友:

相关文章

php实现购物车

php实现购物车

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

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Cont…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart…