PHP Deprecated: Swoole\Event::rshutdown(): Event::wait() in shutdown function is deprecated in Unkn
PHP Deprecated: Swoole\Event::rshutdown(): Event::wait() in shutdown function is deprecated in Unknown on line 0
Deprecated: Swoole\Event::rshutdown(): Event::wait() in shutdown function is deprecated in Unknown on line 0
swoole :
swoole版本 | PHP版本 | |
---|---|---|
本地环境 | 4.4.6 | 7.3.31 |
测试线 | 4.7.0-dev | 7.3.25 |
查看swoole 版本号:
php --ri swoole
编译成功后使用--ri
查看信息,就可以看到curl-native
$ php --ri swoole | grep curl
curl-native => enabled
Swoole v4.6.0
版本发布了,同样也是 2021 年的首个版本更新。
作为一个 y 版本发布,此次更新也包含了不兼容的修改以及许多的新功能,下面就来看一看都有哪些改动?
一、向下不兼容改动
- 从
v4.6.0
版本开始将不再支持PHP7.1
PHP 官方对于 PHP7.1
的支持也早已在 2019 年底结束。
- 将
Event::rshutdown()
标记为已弃用(测试线的高版本弃用rshutdown
),请改用Coroutine\run
在之前的版本中,如果在index.php
中直接使用go
创建协程
go(function () {
var_dump(Co\System::gethostbyname('www.baidu.com'));
});
这样是正常的,但是在此版本中,就会收到废弃警告
PHP Deprecated: Swoole\Event::rshutdown(): Event::wait() in shutdown function is deprecated in Unknown on line 0
推荐使用Coroutine\run
来代替这种方式:
Swoole\Coroutine\run(function () {
var_dump(Co\System::gethostbyname('www.baidu.com'));
});
Swoole\Coroutine\run(function () {
go(function () {
var_dump(Co\System::gethostbyname('www.baidu.com'));
});
go(function () {
var_dump(Co\System::gethostbyname('www.zhihu.com'));
});
});
二、swoole添加定时器定时任务的两种方式
swoole添加定时器定时任务的两种方式。
第一种方式:(version4.6 版本容易报上面的错误提示)
$ws_server = new swoole_websocket_server($socket_config['host'], $socket_config['port']);
$process = new \swoole_process(function ()
{
swoole_timer_tick(200000, function ()
{
echo time() . "\r\n";
});
});
$ws_server->addProcess($process);
$ws_server->start();
我的:
//创建自定义进程
$process = new Swoole_Process(function ($process)
{
//单位ms:如1000表示1秒
$timer = swoole_timer_tick(1000*60, function ()
{
$this->HandleEs = new HandleEs();
//定时执行es同步失败补偿
$this->HandleEs->handleFailList();
});
});
$this->serv->addProcess($process);
第二种方式:(高版本4.7或4.9改用这种方式,解决问题)
$ws_server = new swoole_websocket_server($socket_config['host'], $socket_config['port']);
$ws_server->on('WorkerStart', function ($ws, $worker_id)
{
// 仅在第一个 Worker 进程启动时启动 Timer 定时器
if ($worker_id == 0){
// 启动 Timer,每 1000 毫秒回调一次 onTick 函数,
swoole_timer_tick(2000, function (){
echo time() . "\r\n";
});
}
});
$ws_server->start();
三、swoole不小心开启了守护进程如何关闭
netstat -apn | grep 9502
清除这个进程
kill -9 35156
启动客户端这时就会报错连不上了,证明服务已关
或者:麻烦点的方法,kill -9 pid pid
赞赏码
非学,无以致疑;非问,无以广识