升级前请做好备份,执行以下命令升级
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版本支持各种复杂的控制器目录规则,例如
app
app
├── admin
│ └── v1
│ └── v2
│ └── v3
│ └── controller
│ └── Index.php
└── controller
├── v1
│ └── Index.php
└── v2
└── v3
└── Index.php
也就是说 webman/auto-route
插件不再需要了
1.4版本允许关闭控制器复用,在config/app.php
中设置'controller_reuse' => false,
,这样每个请求都会重新初始化一个新的控制器,也就是说每个请求都会触发对应控制器的__construct()
构造函数,开发者可以在构造函数中为每个请求执行一些请求处理前的初始化工作。
因为可以关闭控制器复用,所以webman/action-hook
插件的不再需要了。
1.4 版本支持开启多个端口提供http服务。
因为webman请求是排队处理的,如果某个请求处理速度慢,会影响排队中的其它请求。
这时候我们可以再开一些进程,把速度慢的接口放在这些进程去处理。
例如新开一组8686端口的http进程只需要在 config/process.php
里增加如下配置。
return [
// ... 这里省略了其它配置 ...
'task' => [
'handler' => \Webman\App::class,
'listen' => 'http://0.0.0.0:8686',
'count' => 8, // 进程数
'constructor' => [
'request_class' => \support\Request::class, // request类设置
'logger' => \support\Log::channel('default'), // 日志实例
'app_path' => app_path(), // app目录位置
'public_path' => public_path() // public目录位置
]
]
];
这样慢接口可以走 http://127.0.0.1:8686/
这组进程,不影响其它进程的业务处理。
为了让前端无感知端口的区别,可以在nginx加一个到8686端口的代理。假设慢接口请求路径都是以/pay
开头,整个nginx配置类似如下:
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
# 新增一个8686 upstream
upstream slow {
server 127.0.0.1:8686;
keepalive 10240;
}
server {
server_name webman.com;
listen 80;
access_log off;
root /path/webman/public;
# 以/pay开头的请求走8686端口
location /pay {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://slow;
}
# 其它请求走原8787端口
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-f $request_filename){
proxy_pass http://webman;
}
}
}
这样客户端访问域名.com/pay/xxx
时将会走单独的8686端口处理,不影响8787端口的请求处理。
后缀只能在view.php 的 options选项中配置。
不再支持的用法
use support\view\Raw;
return [
'handler' => Raw::class,
'view_suffix' => 'php'
];
正确的用法
use support\view\Raw;
return [
'handler' => Raw::class,
'options' => [
'view_suffix' => '.php'
]
];
webman从1.4.0起更改了SessionHandler
类的命名空间,由原来的
use Webman\FileSessionHandler;
use Webman\RedisSessionHandler;
use Webman\RedisClusterSessionHandler;
改为
use Webman\Session\FileSessionHandler;
use Webman\Session\RedisSessionHandler;
use Webman\Session\RedisClusterSessionHandler;
为了避免升级后程序直接报错,Webman\FileSessionHandler
类仍然被保留一段时间,在未来版本中会被彻底移除。
此变更影响config/session.php
的'handler'
配置。
webman的文档缺少时间标识,这样哪个页面什么时候更新了都不清楚
事情太多了,这些没时间做
可以开放文档编辑,作者审核下就好了
关闭控制器复用,对性能会有多大的影响?
相对于业务来说,可以忽略不计
每个请求重新初始化控制器,是不是那种控制器里定义一些属性,根据请求给属性设置值的写法,可以用了,,以前不初始化,这种写法貌似是容易出问题
对
太棒了
类的属性会被其他连接共享吗?
支持支持
很赞,已经成功升级了!~
好这里好像不要加点,
'view_suffix' => 'php'
就行了,否则会报错!呵呵感谢反馈,已纠正
太棒了
太棒了
赞!
1、正想问“如何优雅的修改组件”问题来着,应用插件就横空出世了,哈哈~不过顺便问下大神,假如我想修改一款组件,首先不能直接在vendor中直接修改(下次升级会覆盖掉),那放在应用插件里是不是最好的方法呢?
2、自动路由 终于让我盼到了~
3、控制器复用开关:如果能单独控制某个控制器复用就更好了,但不建议用 action-hook 插件,首先是它初始化的地方有点奇怪(在全局中间件在后,路由中间件之前。。),其次如果和 'controller_reuse' => false 一起使用的话会有点小bug:会创建两个控制器,一个还不会析构(估计是 action-hook插件内部使用了 Container::get 创建了控制器)。
1.自己发布包
2.继承它 然后重写
./composer.json has been updated
Running composer update workerman/webman-framework
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Generating autoload files
11 packages you are using are looking for funding.
Use the
composer fund
command to find out more!No security vulnerability advisories found
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Info from https://repo.packagist.org: #StandWithUkraine
升级好像卡住了
composer require workerman/webman-framework
composer require webman/console
php webman install
我拆开后运行 可以了
支持,已升级。
支持请求挂起了吗
不支持
revolt/event-loop 还没发布稳定版本吗
估计的PHP8.2发布后发布
@Tinywan,预计多久8.2发布?
今年 11 月正式发布