ThinkAdmin V6 官方文档

⚡ ThinkPlugsWorker

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

ThinkPlugsWorker 是基于 Workerman 4.x 且支持多种通信协议的基础插件,提供高性能的 Web 服务解决方案。

🚀 主要功能

  • HTTP 服务: 直接启动 ThinkAdmin 项目,无需 Nginx 或 Apache
  • 性能提升: 访问速度提升数倍,支持高并发访问
  • 多协议支持: 支持 HTTP、WebSocket、TCP 等多种协议
  • 进程管理: 完善的进程管理和监控功能
  • 热更新: 支持代码热更新,无需重启服务
  • 负载均衡: 支持多进程负载均衡

⚙️ 运行方式

Workerman 模式

  • 默认运行方式,基于 Workerman 4.x
  • 支持 HTTP 协议直接运行 ThinkAdmin
  • 无需额外配置 Web 服务器
  • 高性能异步处理
  • 支持多进程负载均衡

Gateway 模式

  • 需要单独安装 Gateway 组件
  • 支持 WebSocket 等实时通信协议
  • 适用于实时应用场景
  • 支持分布式部署
  • 提供消息广播功能

自定义协议模式

  • 支持自定义通信协议
  • 可扩展多种业务场景
  • 灵活配置服务参数
  • 支持多种监听方式

📋 配置说明

默认配置

  • 根配置参数启动 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

定制安装

  • 复制插件 ThinkPlugsWorker 所有源代码到 plugin/think-plugs-worker 目录。
  • 修改插件 composer.json 文件追加 version 配置项,插件 ThinkPlugsWorker 的完整配置如下:
{
 "type": "think-admin-plugin",
 "name": "zoujingli/think-plugs-worker",
 "version": "1.0.0",
 "license": "Apache-2.0",
 "homepage": "https://thinkadmin.top",
 "description": "Workerman HttpServer for ThinkAdmin",
 "authors": [
 {
 "name": "Anyon",
 "email": "zoujingli@qq.com"
 }
 ],
 "require": {
 "php": ">7.1",
 "workerman/workerman": "^4.1",
 "zoujingli/think-install": "^1.0|@dev",
 "zoujingli/think-library": "^6.1|@dev"
 },
 "autoload": {
 "psr-4": {
 "plugin\\worker\\": "src"
 }
 },
 "extra": {
 "think": {
 "services": [
 "plugin\\worker\\Service"
 ]
 },
 "config": {
 "type": "service",
 "name": "基于 Workerman 的通信服务",
 "document": "https://thinkadmin.top/plugin/think-plugs-worker.html",
 "license": [
 "Apache-2.0"
 ]
 },
 "plugin": {
 "init": {
 "stc/worker.php": "config/worker.php"
 },
 "event": {
 "src/Script.php": "plugin\\worker\\Script"
 }
 }
 }
}
  • 修改项目根 composer.json 配置,增加 ThinkPlugsWorker 插件本地化路径配置,完整配置如下:
{
 "type": "project",
 "name": "zoujingli/thinkadmin",
 "license": "MIT",
 "homepage": "https://thinkadmin.top",
 "description": "Application Development Framework",
 "keywords": [
 "ThinkAdmin",
 "ThinkLibrary",
 "WeChatDeveloper"
 ],
 "authors": [
 {
 "name": "Anyon",
 "email": "zoujingli@qq.com"
 }
 ],
 "require": {
 "php": ">7.1",
 "ext-gd": "*",
 "ext-json": "*",
 "ext-openssl": "*",
 "zoujingli/think-plugs-admin": "^1.0",
 "zoujingli/think-plugs-worker": "^1.0"
 },
 "repositories": [
 {
 "type": "path",
 "url": "plugin/think-plugs-worker"
 }
 ],
 "config": {
 "sort-packages": true,
 "allow-plugins": {
 "zoujingli/think-install": true
 }
 }
}
  • 在项目根目录终端执行 composer update 完成安装。

卸载插件

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,
 ],
 // 监控文件变更重载
 'files' => [
 // 监控检测间隔(单位秒,零不监控)
 'time' => 3,
 // 文件监控目录(默认监控 app+config 目录)
 'path' => [],
 // 文件监控后缀(默认监控 所有 文件)
 'exts' => ['*']
 ],
 // 监控内存超限重载
 'memory' => [
 // 监控检测间隔(单位秒,零不监控)
 'time' => 60,
 // 限制内存大小(可选单位有 G M K )
 'limit' => '1G'
 ],
 // 自定义服务配置(可选)
 '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

版权说明

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

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

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

最近更新:
Contributors: 邹景立, Anyon

AltStyle によって変換されたページ (->オリジナル) /