定制 zoujingli/think-plugs-worker 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

zoujingli/think-plugs-worker

Composer 安装命令:

composer require zoujingli/think-plugs-worker

包简介

Workerman HTTP and custom process service plugin for ThinkAdmin

README 文档

README

Latest Stable Version Total Downloads Monthly Downloads Daily Downloads PHP Version License

ThinkPlugsWorkerThinkAdmin 基于 Workerman 的运行服务插件,用于启动 HTTP 服务和自定义常驻进程,支持 Workerman 与 Gateway 两类运行方式。

业务功能特性

核心运行服务:

  • HTTP 服务支持: 基于 Workerman 启动 ThinkAdmin HTTP 服务,可在部分场景替代传统 Web Server 入口。
  • 自定义服务: 支持 Text、WebSocket、Gateway、Register、Business 等自定义服务配置。
  • Gateway 模式: 可按需安装 workerman/gateway-worker 并启动 Gateway 相关进程。
  • 进程管理: 提供启动、停止、重载、状态查看和守护运行等命令能力。
  • 跨平台支持: 支持 Windows 和 Linux 平台的开发与部署场景。

技术特性:

  • Apache2 开源协议: 遵循 Apache2 开源协议,免费提供使用。
  • Workerman 集成: 基于 Workerman 运行 HTTP 或自定义常驻进程。
  • 配置驱动: 通过 config/worker.php 管理 HTTP 服务和自定义进程。
  • 文档示例: 提供 Workerman、Gateway 和 Nginx 代理配置示例。

基于 Workerman 4.x 且支持多种通信协议的基础插件。

提示: 默认支持以 HTTP 方式直接启动 ThinkAdmin 项目,无需配置 Nginx 或 Apache 环境,访问速度提升 N 倍。

注意: 该插件支持 WorkermanGateway 两种运行方式,默认只安装了 Workerman 组件,如果需要使用 Gateway 组件,请另行安装。 配置文件的根配置参数是启动 http 服务进程,用来运行 ThinkAdmin v6 程序。 如果需要使用其他协议,请使用并修改 customs 配置或追加配置,并通过指定 --custom name 配置名来启动对应服务进程。

加入我们

我们的代码仓库已移至 Github,而 Gitee 则仅作为国内镜像仓库,方便广大开发者获取和使用。若想提交 PRISSUE 请在 ThinkAdminDeveloper 仓库进行操作,如果在其他仓库操作或提交问题将无法处理!.

安装插件

### 安装前建议尝试更新所有组件
composer update --optimize-autoloader

### 注意,插件仅支持在 ThinkAdmin v6.1 中使用
composer require zoujingli/think-plugs-worker --optimize-autoloader

卸载插件

composer remove zoujingli/think-plugs-worker

配置参数

配置文件 config/worker.php

return [
    // 服务监听地址
    'host' => '127.0.0.1',
    // 服务监听端口
    'port' => 2346,
    // 套接字上下文选项
    'context' => [],
    // 高级自定义服务类
    'classes' => '',
    // 消息请求回调处理
    'callable' => null,
    // 服务进程参数配置
    'worker' => [
        // 进程名称
        "name" => 'ThinkAdmin',
        // 进程数量
        'count' => 4,
    ],
    // 自定义服务配置(可选)
    'customs' => [
        // 自定义 text 服务
        'text' => [
            // 进程类型(Workerman|Gateway|Register|Business)
            'type' => 'Workerman',
            // 监听地址(<协议>://<地址>:<端口>)
            'listen' => 'text://0.0.0.0:8685',
            // 高级自定义服务类
            'classes' => '',
            // 套接字上下文选项
            'context' => [],
            // 服务进程参数配置
            'worker' => [
                //'name' => 'TextTest',
                // onWorkerStart => [class,method]
                // onWorkerReload => [class,method]
                // onConnect => [class,method]
                // onBufferFull => [class,method]
                // onBufferDrain => [class,method]
                // onError => [class,method]
                // 设置连接的 onMessage 回调
                'onMessage' => function ($connection, $data) {
                    $connection->send("hello world");
                }
            ]
        ],
        // 自定义 websocket 服务
        'websocket' => [
            // 进程类型(Workerman|Gateway|Register|Business)
            'type' => 'Workerman',
            // 监听地址(<协议>://<地址>:<端口>)
            'listen' => 'websocket://0.0.0.0:8686',
            // 高级自定义服务类
            'classes' => '',
            // 套接字上下文选项
            'context' => [],
            // 服务进程参数配置
            'worker' => [
                //'name' => 'TextTest',
                // onWorkerStart => [class,method]
                // onWorkerReload => [class,method]
                // onConnect => [class,method]
                // onBufferFull => [class,method]
                // onBufferDrain => [class,method]
                // onError => [class,method]
                // 设置连接的 onMessage 回调
                'onMessage' => function ($connection, $data) {
                    $connection->send("hello world");
                }
            ]
        ],
        // 自定义 Gateway 服务
        'gateway' => [
            // 进程类型(Workerman|Gateway|Register|Business)
            'type' => 'Gateway',
            // 监听地址(<协议>://<地址>:<端口>)
            'listen' => 'websocket://127.0.0.1:8689',
            // 高级自定义服务类
            'classes' => '',
            // 套接字上下文选项
            'context' => [],
            // 服务进程参数配置
            'worker' => [
                // 进程名称
                "name" => 'Gateway',
                // 进程数量
                 "count" => 4,
                // 心跳发送时间,针对客户端
                'pingInterval' => 10,
                // 心跳容错次数,针对客户端
                'pingNotResponseLimit' => 0,
                // 心跳包内容,针对客户端
                'pingData' => '{"type":"ping"}',
                 // 服务器内网IP
                "lanIp" => '127.0.0.1',
                // Business 回复 Gateway 端口
                "startPort" => 2000,
               // 注册服务地址,与 Register 进程对应
                "registerAddress" => '127.0.0.1:1236',
                // 进程启动回调
                "onWorkerStart" => function () {
                    echo "Gateway onWorkerStart" . PHP_EOL;
                },
                 // 进程停止回调
                "onWorkerStop" => function () {
                    echo "Gateway onWorkerStop" . PHP_EOL;
                }
            ]
        ],
        // 自定义 Register 服务
        'register' => [
            // 进程类型(Workerman|Gateway|Register|Business)
            'type' => 'Register',
            // 监听地址(<协议>://<地址>:<端口>)
            // 注意:别改这里的协议,只支持 text 协议
            'listen' => 'text://127.0.0.1:1236'
        ],
        // 自定义 Business 服务
        'business' => [
            // 进程类型(Workerman|Gateway|Register|Business)
            'type' => 'Business',
            // 高级自定义服务类
            'classes' => '',
            // 服务进程参数配置
            'worker' => [
                // 进程名称
                "name" => 'Business',
                // 进程数量
                "count" => 4,
                // 注册服务地址,与 Register 进程对应
                "registerAddress" => '127.0.0.1:1236',
                // 业务处理类
                "eventHandler" => Events::class,
                // 进程启动回调
                "onWorkerStart" => function () {
                    echo "Business onWorkerStart" . PHP_EOL;
                },
                // 进程停止回调
                "onWorkerStop" => function () {
                    echo "Business onWorkerStart" . PHP_EOL;
                }
            ]
        ],
    ],
];

/**
 * 业务处理类
 * @class Events
 */
class Events
{

    /**
     * 业务进程启动
     * @param $businessWorker
     * @return void
     */
    public static function onWorkerStart($businessWorker)
    {
        echo "Events WorkerStart\n";
    }

    /**
     * 有消息时触发该方法
     * @param int $clientid 发消息的client_id
     * @param mixed $message 消息
     * @throws \Exception
     */
    public static function onMessage($clientid, $message)
    {
        // 群聊,转发请求给其它所有的客户端
        \GatewayWorker\Lib\Gateway::sendToAll("Message By Events : {$message}");
    }
}

使用方法

在命令行启动服务端

#========= 启动参数配置 =========
### 守护方式运行  -d
### 指定监听域名  --host 127.0.0.1
### 指定监听端口  --port 2346 
### 启动指定服务  --custom websocket

# 通过 Workerman 方式,启动默认 Http 服务
php think xadmin:worker

# 通过 Workerman 方式,启动自定义 text 服务,注意 text 为 customs 配置项
php think xadmin:worker --custom text

# 通过 Workerman 方式,启动自定义 WebSocket 服务,注意 websocket 为 customs 配置项
php think xadmin:worker --custom websocket

# 通过 Gateway 方式,需要同时启动三个进程,另外还需要安装 workerman/gateway-worker 依赖包。
# 具体业务处理逻辑写在 business 绑定的 Events 中,了解更新多配置请阅读 Workerman 官方文档。
php think xadmin:worker --custom register
php think xadmin:worker --custom gateway
php think xadmin:worker --custom business

然后就可以通过浏览器直接访问当前应用

http://localhost:2346

默认使用 Workerman 工作方式,如果需要使用 Gateway 方式,需要安装 GatewayWorker 组件。

安装 GatewayWorker 的指令如下:

# 安装 GatewayWorker 组件
composer require workerman/gateway-worker

注意: 启用 Gateway 时需要单独启动三个进程,分别是 GatewayRegisterBusiness,中间需要 Register 进程连接。

数据通信模型:

Client <-> Gateway <-> Register <-> Business <-> Events

Linux 支持操作指令如下:

php think xadmin:worker [start|stop|reload|restart|status|-d]

# 以上所有操作效果与 Workerman 官方操作一致,详情请阅读对应文档。

Windows 支持操作指令如下:

php think xadmin:worker [start|stop|status|-d]

# 以上 stop|status|-d 操作是基于 wimc 实现,Workerman 官方不支持此种方式操作。  

其他 workerman 的参数可以在应用配置目录下的 worker.php 里面 worker 项配置。

更多其他特性请阅读 workerman 文档 https://www.workerman.net/doc/workerman

代理配置

Nginx 代理代理配置参考如下:

location ^~ / {

    # 执行代理访问真实服务器
    proxy_pass http://127.0.0.1:2346/;
    
    # 将客户端的 Host 和 IP 信息一并转发到对应节点
    proxy_set_header Host $http_host;
    proxy_set_header X-Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    # 将协议转发到对应节点,如果使用非 https 请改为 http
    proxy_set_header X-scheme https;
    
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    
    # proxy_hide_header Upgrade;
    add_header X-Cache $upstream_cache_status;
}

版权说明

ThinkPlugsWorker 遵循 Apache2 开源协议发布,并提供免费使用。

本项目包含的第三方源码和二进制文件之版权信息另行标注。

版权所有 Copyright © 2014-2026 by ThinkAdmin (https://thinkadmin.top) All rights reserved。

更多细节参阅 LICENSE.txt

zoujingli/think-plugs-worker 适用场景与选型建议

zoujingli/think-plugs-worker 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.87k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2023 年 03 月 20 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 zoujingli/think-plugs-worker 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 zoujingli/think-plugs-worker 我们能提供哪些服务?
定制开发 / 二次开发

基于 zoujingli/think-plugs-worker 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1.87k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 15
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2023-03-20