当前位置: 首页 > 后端技术 > PHP

swoole—从入门到放弃(二)

时间:2023-03-29 18:20:22 PHP

swoole—从入门到放弃(二)1、异步毫秒定时器swoole_timer_tick:设置一个间隔时钟定时器。与aftertimer不同的是,ticktimer会持续触发,直到调用swoole_timer_clear清除。intswoole_timer_tick(int$ms,callable$callback,mixed$user_param)$ms:单位毫秒$callback:functioncallbackFunction(int$timer_id,mixed$params=null);$timer_id:定时器的ID,可以用于swoole_timer_clear清除这个Timer$params:swoole_timer_tick传递的第三个参数$user_param:用户参数,会传递给callbackFunction。如果有多个参数,可以使用数组的形式,也可以使用匿名函数的use语法传递给函数中的回调swoole_timer_after:Executethefunctionafterthespecifiedtime,version1.7.7orhigher是必须的。intswoole_timer_after(int$after_time_ms,混合$callback_function,混合$user_param);是一次性函数,$ater_time_ms会在执行完成后销毁:最大不超过86400000swoole_timer_clear:使用定时器ID删除定时器。boolswoole_timer_clear(int$timer_id)$timer_id:定时器ID,调用swoole_timer_tick和swoole_timer_after后,会返回一个整数ID,只能用于清除当前进程中的定时器。swoole中定时器示例:#printstartfirst,per2sprintthecontentinthetickcallbackfunction,printthecontentinafter5safterprintingstartswoole_timer_tick(2000,function($timer_id,){echo"2s:timer_id-{$timer_id}";});$data=['名字'=>'罗纳尔多'];swoole_timer_after(5000,function($timer_id)use($data){print_r("5s:data-{$data}");});回声“开始”;2、异步文件系统swoole_async_readfile,异步读取文件内容函数样式:swoole_async_readfile(string$filename,mixed$callback);命名空间风格:Swoole\Async::readFile(string$filename,mixed$callback);如果文件不存在,则返回false,并立即打开文件,返回true后,数据服务完成后回调指定的回调函数。回调参数:$filename和$contentswoole_async_readfile会将文件的所有内容复制到内存中,因此不能用于大文件的读取。如果要读取大文件,使用swoole_async_readswoole_async_readfile最大化读取4M文件,受SW_AIO_MAX_FILESIZE宏限制//异步读取文件$result=swoole_async_readfile($filename,function($filename,$content){echo"filename:{$filename}".PHP_EOL;echo"content:{$content}".PHP_EOL;});echo'start'.PHP_EOL;var_dump($result);swoole_async_writefile,异步写文件函数样式:swoole_async_writefile(string$filename,string$fileContent,callable$callback=null,intfalgs=0);命名空间样式:Swoole\Async::writeFile(string$filename,string$fileContent,callable$callback=null,intfalgs=0);$filename:文件名,必须有写权限,如果文件不存在,会自动创建如果文件打开失败,返回false$fileContent:最大可以写入4M$callback:可选$falgs:写入选项,使用FILE_APPEND追加到文件末尾如果文件已经存在,底层会覆盖旧的文件内容常用于写日志//异步写文件$content=date('Y-m-dH:i:s')。PHP_EOL;$文件名=__DIR__。'/test.txt';Swoole\Async::writeFile($filename,$content,function($filename){echo"write{$filename}success".PHP_EOL;},FILE_APPEND);回声“开始”。PHP_EOL;三、异步Mysql1,swoole_mysql->connect(array$serverConfig,callable$callback)//回调函数callback(swoole_mysql$db,bool$result);//配置$serverConfig=array('host'=>'127.0.0.1','user'=>'root','password'=>'123456','database'=>'test','charset'=>'utf8',);2.functionswoole_mysql->query($sql,callable$callback);回调函数(swoole_mysql$link,mixed$result);执行失败,$result为false,读取$link对象的error属性获取错误信息,errno属性获取错误码,执行成功,SQL为非查询语句,$result为true,读取$link对象的affected_rows属性获取受影响的行数,insert_id属性获取Insert操作的自增ID执行成功,SQL为查询语句,$result为结果数组3.异步连接mysql的小实例classAsyncMysql{p私有化$dbSource=null;私有$dbConfig=null;公共函数__construct(){$this->dbSource=newswoole_mysql;$this->dbConfig=['host'=>'127.0.0.1','port'=>3306,'user'=>'root','password'=>'123456','database'=>'test','charset'=>'utf8',//指定字符集'timeout'=>2,//可选:连接超时(不是查询超时),默认为SW_MYSQL_CONNECT_TIMEOUT(1.0)];}publicfunctionexecute($id,$name){//连接到mysql$this->dbSource->connect($this->dbConfig,function($db,$result)use($id,$name){if($result===false){var_dump($db->e??rror,$db->e??rrno);die;}$sql="UPDATE`student`SET`name`='{$name}'WHERE`id`={$id}";$db->query($sql,function($db,$result){如果($db结果===false){var_dump($db->connect_error);}elseif($result===true){//sql是非查询语句echo"executenon-querystatement\n";var_dump($db->affected_rows);}else{//sql为查询语句echo"执行查询语句\n";打印_r($结果);}$db->close();});});}}$obj=newAsyncMysql();$obj->execute(1,'ronaldo7');echo"start\n";异步Redisredis服务安装redis服务到redis官网下载redis包tar-zxvfredis-4.0.9.tar.gzcdredis-4.0.9makecdsrc./redis-server,即可启动redis服务./redis-cli,可以连接redis服务hiredis库hiredis下载地址unziphiredis-0.13.3.zip如果没有unzip,可以执行yuminstall-yunzipzipcdhiredis-0.13.3.zimpake-jsudomakeinstallsudoldconfigcompileswoole需要添加-enable-async-rediscdswoole./configure--with-php-config=/opt/soft/php/bin/php-config--enable-async-rediscdcleanmake-jsudomakeinstall检查安装是否成功查看swoole是否存在:php-m如果不存在,在vim~/.bash_profile中添加一行:exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib然后:source~/.bash_profile,可以查看异步redis是否支持:php--riswoole如果存在:asyncredisclient=>enabled,说明支持common方法redis函数swoole_redis->__construct(array$options=null);$option配置一个选项数组,默认为nullfunctionswoole_redis->connect(string$host,int$port,callable$callback);$host:redis服务器的主机IP$port:redis服务器端口$callback:回调函数functiononConnect(swoole_redis$redis,bool$result);$result:true表示连接成功,false表示连接失败,可以读取$redis->errCode获取错误码,读取$redis->errMsg获取错误信息函数swoole_redis->close();异步redis实例$redisClient=newswoole_redis();$redisClient->connect('127.0.0.1',6379,function(swoole_redis$redis,$result){echo"connect:{$result}\n";//$redis->set('name1','ronaldo'复制代码',function(swoole_redis$redis,$result){//echo"set:{$result}\n";//$redis->close();//});$redis->keys('*',函数(swoole_redis$redis,$result){var_dump($result);$redis->c失去();});});回声“开始”。PHP_EOL;