在 ThinkPHP 中搭建 WebSocket 服务,可按以下步骤进行:

1. 环境准备

确保你的服务器环境满足以下要求:

  • PHP 版本 >= 7.1
  • 安装 swoole 扩展,因为 ThinkPHP 借助 Swoole 来实现 WebSocket 服务。你可以通过以下命令安装 Swoole 扩展:

收起

bash

pecl install swoole

安装完成后,在 php.ini 中添加 extension=swoole.so,并重启 Web 服务器。

2. 创建 ThinkPHP 项目

如果你还没有 ThinkPHP 项目,可以使用 Composer 来创建一个新的项目:

收起

bash

composer create-project topthink/think tp-websocket
cd tp-websocket

3. 安装 ThinkPHP Swoole 扩展

使用 Composer 安装 ThinkPHP Swoole 扩展,该扩展为 ThinkPHP 提供了 Swoole 的支持:

收起

bash

composer require topthink/think-swoole

4. 配置 WebSocket 服务

4.1 配置文件

在 config/swoole.php 中进行 WebSocket 服务的配置,示例配置如下:

收起

php

return [
    'enable' => true,
    'server' => [
        'host' => '0.0.0.0',
        'port' => 9501,
        'type' => 'websocket',
        'sock_type' => SWOOLE_SOCK_TCP,
        'callbacks' => [
            \Swoole\Server::ON_OPEN => 'app\http\controller\WebSocket@onOpen',
            \Swoole\Server::ON_MESSAGE => 'app\http\controller\WebSocket@onMessage',
            \Swoole\Server::ON_CLOSE => 'app\http\controller\WebSocket@onClose',
        ],
    ],
];

上述配置中:

  • host 和 port 分别指定了 WebSocket 服务监听的地址和端口。
  • type 设置为 websocket 表示启用 WebSocket 服务。
  • callbacks 定义了 Swoole 服务器的回调函数,分别对应连接打开、消息接收和连接关闭事件。
4.2 创建控制器

在 app/http/controller 目录下创建 WebSocket.php 文件,实现回调函数:

收起

php

<?php
namespace app\http\controller;

use think\swoole\Websocket;

class WebSocket
{
    /**
     * 当有新的客户端连接时触发
     * @param Websocket $ws
     * @param \Swoole\Http\Request $request
     */
    public function onOpen(Websocket $ws, $request)
    {
        $ws->push($request->fd, "Hello, welcome!");
    }

    /**
     * 当接收到客户端消息时触发
     * @param Websocket $ws
     * @param string $data
     */
    public function onMessage(Websocket $ws, $data)
    {
        // 向客户端发送接收到的消息
        $ws->push($ws->getSender(), "You sent: ". $data);
    }

    /**
     * 当客户端连接关闭时触发
     * @param Websocket $ws
     * @param int $fd
     */
    public function onClose(Websocket $ws, $fd)
    {
        echo "Client {$fd} closed\n";
    }
}

5. 启动 WebSocket 服务

在项目根目录下,使用以下命令启动 WebSocket 服务:

收起

bash

php think swoole:server start

若要停止服务,可使用:

收起

bash

php think swoole:server stop

若要重启服务,可使用:

收起

bash

php think swoole:server restart

6. 测试 WebSocket 服务

你可以使用浏览器的开发者工具或第三方 WebSocket 客户端工具(如 wscat)来测试 WebSocket 服务。以下是使用 wscat 的示例:

收起

bash

wscat -c ws://localhost:9501

连接成功后,你可以发送消息并查看服务端的响应。

通过以上步骤,你就可以在 ThinkPHP 中成功搭建 WebSocket 服务。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐