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.67.3.31
测试线4.7.0-dev7.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

参考;Swoole v4.6.0 版本发布,支持原生 curl 协程客户端 - 知乎 

posted @ 2022-01-26 18:11  码农编程进阶笔记  阅读(654)  评论(0编辑  收藏  举报
返回顶部 有事您Q我