Workerman工程
让BuildAdmin常驻内存运行!基于BuildAdmin的Workerman工程。

本模块目前仅向系统版本 >= v2.0.8-Beta提供~

介绍

  • 相同的请求php think run耗时约366ms而本模块仅需9ms,快到看不清保存按钮加载态!
  • 系统内置的API已完成常驻内存兼容,包括CRUD、终端、模块管理、文件上传等接口(v2.0.8)
  • 本模块直接依赖 workerman/gateway-worker,您可以使用它提供的方法,也可以直接使用 Workerman 4.x+ 的方法。

功能特性

  1. 本模块默认提供一个HTTP服务和一个WebSocket服务。
  2. 基于Workerman,就像Webman也是基于它一样,但本模块的整合方式更加简洁(TP本身比Webman复杂)。
  3. 文件监听热重载支持。
  4. ...

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下不支持的特性

  1. CookieSession:框架本身并未使用它们,我们也建议您无必要不使用,通常无需担心。
  2. move_uploaded_file:框架的文件上传类中已经兼容rename进行上传文件的移动。
  3. header:请使用TPreturn Response()->header()方案设置响应头,如果是SSE等比较特别的,可以参考/extend/ba/Terminal.php的响应头发送方案。

对比传统PHP应用

  1. 常驻内存模式载入程序文件、解析等之后,并不会销毁内存中的数据,使得类的定义、全局对象、类的静态成员 不会释放! 便于后续重复利用。
  2. 避免多次require/include相同的类或者常量的定义文件。
  3. 避免使用exit、die,它们将导致子进程直接退出。
  4. 事出反常,重启服务,顺风顺水也不妨刷新再看一遍。
  5. 大多数情况下,代码在常驻内存的服务上能跑,那么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中的配置能否满足您的需求,然后您可以参考已有的httpws服务创建您自己的定制化服务,模块作者也可以以相同的方式添加新的服务。

模块如何监听onWorkerStart等事件?

  • 在模块开发中,您只需要于模块核心控制器中直接定义onWorkerStartonWorkerStoponWebSocketConnectonWebSocketClose方法,即可监听对应的事件(http服务不支持,仅ws),若不能满足您的需求,请参考已有的wshttp服务自定义您的专属服务,并告知用户如何启动该服务即可。

特别鸣谢

更新日志

  • 2024-10-29 00:00:56

    v1.1.2

    优化细节
    • 注册(Register)服务默认端口改为 workerman 默认的 1236
  • 2024-09-25 22:53:48

    v1.1.1

    修复已知问题
    • 修复模块在 BuildAdmin > v2.1.1 以上报错 undefined array key "SERVER_SOFTWARE" 的问题
  • 2024-08-10 03:23:02

    v1.0.9

    不再向public内存放bat和php文件
    • 不再向 public 目录内存放 batphp 文件
    • 优化细节
  • 2024-06-24 21:54:59

    v1.0.8

    修复已知问题
    1. 修复文件监听锁可能删除失败的问题
    2. 增加内存监听配置项
    3. 修复后台缓存清理可能失败的问题
    4. 其他细节
  • 2024-05-24 23:22:49

    v1.0.7

    优化细节

    添加时间格式化的语言包

  • 2024-05-17 22:30:33

    v1.0.6

    优化细节
    • ws 服务响应消息中额外返回收到的消息的 pathInfo 信息
  • 2024-05-17 17:28:52

    v1.0.5

    修复已知问题
    1. 增加静态服务器配置(禁止访问的文件类型和禁止浏览器预览的文件类型)
    2. 优化 $_SERVER 变量组装
    3. 优化 app 初始化时机,更好的请求数据隔离
    4. 优化配置获取
    5. 优化日志文件路径
  • 2024-04-14 22:54:17

    v1.0.4

    优化和修复已知问题
    1. 统一行分隔符号为LF
    2. onWorkerStart时初始化所有进程公用的Db实例(初始化数据库连接)
    3. 兼容模块开发:模块可以设置onWorkerStart、onWorkerStop、onWebSocketConnect、onWebSocketClose回调
  • 2024-03-31 01:35:30

    v1.0.3

    修复已知问题
    • 在每次请求开始时清理掉已经注册的中间件,以确保不同应用的中间件设定正确
    • 修复可能的strtolower():Passing null错误
  • 2024-03-19 01:57:20

    v1.0.2

    优化 ws 服务预设
    • 简化WS服务的APP基类,不再提供error、success等方法
    • 模块内置WS服务的心跳方案
  • 2024-03-17 23:12:50

    v1.0.1

    修复已知BUG
    • 修复静态资源的文件名带中文时无法打开的问题
    • 在请求初始化时重设 runtime 目录路径
  • 2024-03-15 23:39:12

    v1.0.0

    首次发布

    无详细更新日志

妙码生花
妙码生花
这家伙很懒,什么也没写~
模块授权
正版授权,允许商业使用
自购买起一年内免费下载和升级更新
不加密源代码,私有部署,二开方便
可复制产品,不支持七天无理由退款
禁止转售、分享等任何形式的再分发
仅 BuildAdmin 后台管理系统可以使用
模块信息
模块价格
10积分
访问次数
12550
模块标识
workerman
下载次数
686
模块分类
基础设施
上次更新
2024-10-29 00:00:56
开发者主页
-
购买送积分
-
Workerman纯手写