1.4升级指南

升级前请做好备份,执行以下命令升级 composer require workerman/webman-framework ^1.4.3 && composer require webman/console ^1.0.27 && php webman install

注意 如果无法升级,很可能是因为使用了composer代理,请使用以下命令 composer config -g --unset repos.packagist 恢复使用composer官方数据源

功能特性及变更

应用插件

1.4版本支持应用插件,更多请参考应用插件

自动路由

1.4版本支持各种复杂的控制器目录规则,例如

  1. app
  2. app
  3. ├── admin
  4. └── v1
  5. └── v2
  6. └── v3
  7. └── controller
  8. └── Index.php
  9. └── controller
  10. ├── v1
  11. └── Index.php
  12. └── v2
  13. └── v3
  14. └── Index.php

也就是说 webman/auto-route 插件不再需要了

控制器复用开关

1.4版本允许关闭控制器复用,在config/app.php中设置'controller_reuse' => false,,这样每个请求都会重新初始化一个新的控制器,也就是说每个请求都会触发对应控制器的__construct()构造函数,开发者可以在构造函数中为每个请求执行一些请求处理前的初始化工作。

因为可以关闭控制器复用,所以webman/action-hook 插件的不再需要了。

开启http服务

1.4 版本支持开启多个端口提供http服务。 因为webman请求是排队处理的,如果某个请求处理速度慢,会影响排队中的其它请求。 这时候我们可以再开一些进程,把速度慢的接口放在这些进程去处理。

例如新开一组8686端口的http进程只需要在 config/process.php 里增加如下配置。

  1. return [
  2. // ... 这里省略了其它配置 ...
  3. 'task' => [
  4. 'handler' => \Webman\App::class,
  5. 'listen' => 'http://0.0.0.0:8686',
  6. 'count' => 8, // 进程数
  7. 'constructor' => [
  8. 'request_class' => \support\Request::class, // request类设置
  9. 'logger' => \support\Log::channel('default'), // 日志实例
  10. 'app_path' => app_path(), // app目录位置
  11. 'public_path' => public_path() // public目录位置
  12. ]
  13. ]
  14. ];

这样慢接口可以走 http://127.0.0.1:8686/ 这组进程,不影响其它进程的业务处理。

为了让前端无感知端口的区别,可以在nginx加一个到8686端口的代理。假设慢接口请求路径都是以/pay开头,整个nginx配置类似如下:

  1. upstream webman {
  2. server 127.0.0.1:8787;
  3. keepalive 10240;
  4. }
  5. # 新增一个8686 upstream
  6. upstream slow {
  7. server 127.0.0.1:8686;
  8. keepalive 10240;
  9. }
  10. server {
  11. server_name webman.com;
  12. listen 80;
  13. access_log off;
  14. root /path/webman/public;
  15. # 以/pay开头的请求走8686端口,请按实际情况将/pay更改为你需要的前缀
  16. location /pay {
  17. proxy_set_header X-Real-IP $remote_addr;
  18. proxy_set_header Host $host;
  19. proxy_http_version 1.1;
  20. proxy_set_header Connection "";
  21. proxy_pass http://slow;
  22. }
  23. # 其它请求走原8787端口
  24. location / {
  25. proxy_set_header X-Real-IP $remote_addr;
  26. proxy_set_header Host $host;
  27. proxy_http_version 1.1;
  28. proxy_set_header Connection "";
  29. if (!-f $request_filename){
  30. proxy_pass http://webman;
  31. }
  32. }
  33. }

这样客户端访问域名.com/pay/xxx时将会走单独的8686端口处理,不影响8787端口的请求处理。

视图文件配置

后缀只能在view.php 的 options选项中配置。 不再支持的用法

  1. use support\view\Raw;
  2. return [
  3. 'handler' => Raw::class,
  4. 'view_suffix' => '.php'
  5. ];

正确的用法

  1. use support\view\Raw;
  2. return [
  3. 'handler' => Raw::class,
  4. 'options' => [
  5. 'view_suffix' => '.php'
  6. ]
  7. ];

session驱动命名空间变动

webman从1.4.0起更改了SessionHandler类的命名空间,由原来的

  1. use Webman\FileSessionHandler;
  2. use Webman\RedisSessionHandler;
  3. use Webman\RedisClusterSessionHandler;

改为

  1. use Webman\Session\FileSessionHandler;
  2. use Webman\Session\RedisSessionHandler;
  3. use Webman\Session\RedisClusterSessionHandler;

为了避免升级后程序直接报错,Webman\FileSessionHandler类仍然被保留一段时间,在未来版本中会被彻底移除。

此变更影响config/session.php'handler'配置。