Workerman工程
让BuildAdmin常驻内存运行!基于BuildAdmin的Workerman工程。
本模块目前仅向
系统版本 >= v2.0.8-Beta
提供~
介绍
- 相同的请求
php think run
耗时约366ms
而本模块仅需9ms
,快到看不清保存按钮加载态! - 系统内置的
API
已完成常驻内存兼容,包括CRUD、终端、模块管理、文件上传
等接口(v2.0.8)
! - 本模块直接依赖 workerman/gateway-worker,您可以使用它提供的方法,也可以直接使用 Workerman 4.x+ 的方法。
功能特性
- 本模块默认提供一个
HTTP
服务和一个WebSocket
服务。 - 基于Workerman,就像
Webman
也是基于它一样,但本模块的整合方式更加简洁(TP
本身比Webman
复杂)。 - 文件监听热重载支持。
- ...
HTTP服务
- 本服务配置文件位于
/config/worker_http.php
,默认端口为8000
,所以一旦启动本服务,就不需要启动php think run
了。 BuildAdmin
系统内置的前后台API
已经兼容本服务(不包含模块提供的接口,也不意味着您自行撰写的接口也已经兼容本服务)。- 我们额外提供了一个示例接口
/app/worker/controller/HttpExamples.php
,以便您更快的上手。 - 若您需要一些常驻内存运行程序的相关建议,请参考本介绍页的下半部分。
Windows
- 直接双击
/modules/workerman/commands/http_worker_start_for_win.bat
文件来启动服务。
Linux/Mac
- 以下命令权限不足请自行加
sudo
- 执行
php think worker http start
以调试模式启动服务 - 执行
php think worker http start -d
以守护进程模式启动服务 php think worker http stop
停止服务php think worker http restart
重启服务php think worker http reload
柔性重启服务php think worker http status
查看服务状态
WebSocket服务
- 本服务配置文件位于
/config/worker_ws.php
,默认端口为2828
- 我们额外提供了一个示例接口
/app/worker/controller/WebSocketExamples.php
,以便您更快的上手。 - 若您需要一些常驻内存运行程序的相关建议,请参考本介绍页的下半部分。
ws
服务的心跳保活机制已经内置,前端每50s
向服务端发送一次字符串ping
即可(您当然也可以自行实现不同的心跳方案)。- 以下提供一份前台测试
ws
的代码
// 连接
var websocket = new WebSocket('ws://127.0.0.1:2828');
websocket.onopen = function() {
console.log('连接成功了');
// 定时发送心跳以保持连接 - 50秒间隔为推荐值
setInterval(() => {
websocket.send('ping')
}, 50000);
// 发送消息
websocket.send('{"pathInfo":"worker/WebSocketExamples/message"}')
};
websocket.onclose = function(evt) {
console.log('连接关闭中', evt);
};
websocket.onmessage = function(evt) {
console.log('收到消息', evt);
};
Windows
- 直接双击
/modules/workerman/commands/ws_worker_start_for_win.bat
文件来启动服务。
Linux/Mac
- 以下命令权限不足请自行加
sudo
- 执行
php think worker ws start
以调试模式启动服务 - 执行
php think worker ws start -d
以守护进程模式启动服务 php think worker ws stop
停止服务php think worker ws restart
重启服务php think worker ws reload
柔性重启服务php think worker ws status
查看服务状态
常驻内存须知
php cli下不支持的特性
Cookie
和Session
:框架本身并未使用它们,我们也建议您无必要不使用,通常无需担心。move_uploaded_file
:框架的文件上传类中已经兼容rename
进行上传文件的移动。header
:请使用TP
的return Response()->header()
方案设置响应头,如果是SSE
等比较特别的,可以参考/extend/ba/Terminal.php
的响应头发送方案。
对比传统PHP应用
- 常驻内存模式载入程序文件、解析等之后,并不会销毁内存中的数据,使得类的定义、全局对象、类的静态成员 不会释放! 便于后续重复利用。
- 避免多次
require/include
相同的类或者常量的定义文件。 - 避免使用
exit、die
,它们将导致子进程直接退出。 - 事出反常,重启服务,顺风顺水也不妨刷新再看一遍。
- 大多数情况下,代码在常驻内存的服务上能跑,那么
php think run
的服务上也能跑,可以相互映照。
常见问题
http无法访问,ws无法连接?
- 请首先排除端口问题,端口未开放占此类问题的
80%
以上,服务器面板开放端口,同时服务商的安全组、负载均衡、CDN等服务若有使用也需要同步开放对应端口。
创建https,wss服务?
菜单规则数据异常?
- 菜单规则的数据通过静态变量进行缓存(以组为单位),这是为了提升性能而做出的设计,若您的菜单规则发生了变动而页面上显示的菜单并未更新,请重启
Workerman
服务即可
旧API的灰度迁移?
- 本模块的
http
服务支持单独指定端口号,您可以对前端进行改造(或使用Nginx
转发),先将部分API请求转到本服务完成逐步迁移,除非经过完整的测试,或您对常驻内存开发非常熟悉,否则我们不推荐您直接全量使用本服务来处理旧API的请求。
自定义后台入口后无法访问?
- 请于
config/app.php
内,设置好应用映射app_map
即可,key
为随机入口名(不含.php),value
为固定的admin
,可参考下方示例,系统新版本已对此进行优化,无需手动配置
return [
// ...
// 应用映射(自动多应用模式有效)
'app_map' => ['New entrance name' => 'admin'],
];
自定义协议/服务?
- 请先检查
config/worker_*.php
中的配置能否满足您的需求,然后您可以参考已有的http
和ws
服务创建您自己的定制化服务,模块作者也可以以相同的方式添加新的服务。
模块如何监听onWorkerStart
等事件?
- 在模块开发中,您只需要于模块核心控制器中直接定义
onWorkerStart
、onWorkerStop
、onWebSocketConnect
、onWebSocketClose
方法,即可监听对应的事件(http服务不支持,仅ws),若不能满足您的需求,请参考已有的ws
和http
服务自定义您的专属服务,并告知用户如何启动该服务即可。
特别鸣谢
更新日志
v1.1.2
优化细节- 注册(Register)服务默认端口改为 workerman 默认的 1236
v1.1.1
修复已知问题- 修复模块在
BuildAdmin > v2.1.1
以上报错undefined array key "SERVER_SOFTWARE"
的问题
- 修复模块在
v1.0.9
不再向public内存放bat和php文件- 不再向
public
目录内存放bat
和php
文件 - 优化细节
- 不再向
v1.0.8
修复已知问题- 修复文件监听锁可能删除失败的问题
- 增加内存监听配置项
- 修复后台缓存清理可能失败的问题
- 其他细节
v1.0.7
优化细节添加时间格式化的语言包
v1.0.6
优化细节ws
服务响应消息中额外返回收到的消息的pathInfo
信息
v1.0.5
修复已知问题- 增加静态服务器配置(禁止访问的文件类型和禁止浏览器预览的文件类型)
- 优化
$_SERVER
变量组装 - 优化
app
初始化时机,更好的请求数据隔离 - 优化配置获取
- 优化日志文件路径
v1.0.4
优化和修复已知问题- 统一行分隔符号为
LF
onWorkerStart
时初始化所有进程公用的Db
实例(初始化数据库连接)- 兼容模块开发:模块可以设置
onWorkerStart、onWorkerStop、onWebSocketConnect、onWebSocketClose
回调
- 统一行分隔符号为
v1.0.3
修复已知问题- 在每次请求开始时清理掉已经注册的中间件,以确保不同应用的中间件设定正确
- 修复可能的
strtolower():Passing null
错误
v1.0.2
优化 ws 服务预设- 简化
WS
服务的APP
基类,不再提供error、success
等方法 - 模块内置
WS
服务的心跳方案
- 简化
v1.0.1
修复已知BUG- 修复静态资源的文件名带中文时无法打开的问题
- 在请求初始化时重设
runtime
目录路径
v1.0.0
首次发布无详细更新日志
妙码生花
这家伙很懒,什么也没写~
模块授权
正版授权,允许商业使用
自购买起一年内免费下载和升级更新
不加密源代码,私有部署,二开方便
可复制产品,不支持七天无理由退款
禁止转售、分享等任何形式的再分发
仅 BuildAdmin 后台管理系统可以使用
模块信息
模块价格
10积分
访问次数
12550
模块标识
workerman
下载次数
686
模块分类
基础设施
上次更新
2024-10-29 00:00:56
开发者主页
-
购买送积分
-
Workerman纯手写