ThinkPlugsWorker
ThinkPlugsWorker 是基于 Workerman 4.x 且支持多种通信协议的基础插件。
温馨提示: 默认支持以 HTTP 方式直接启动 ThinkAdmin 项目,无需配置 Nginx 或 Apache 环境,访问速度提升 N 倍。
注意事项: 该插件支持 Workerman
或 Gateway
两种运行方式,默认只安装了 Workerman
组件,如果需要使用 Gateway
组件,请另行安装。 配置文件的根配置参数是启动 http 服务进程,用来运行 ThinkAdmin v6 程序。 如果需要使用其他协议,请使用并修改 customs
配置或追加配置,并通过指定 --custom name
配置名来启动对应服务进程。
加入我们
我们的代码仓库已移至 Github,而 Gitee 则仅作为国内镜像仓库,方便广大开发者获取和使用。若想提交 PR 或 ISSUE 请在 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
时需要单独启动三个进程,分别是 Gateway
、Register
、Business
,中间需要 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。