Swoole中异步文件系统IO及数据库操作

读取文件

$result = Swoole\Async::readfile(__DIR__."/1.txt", function($filename, $fileContent) {
    echo "filename:".$filename.PHP_EOL; // \n \r\n
    echo "content:".$fileContent.PHP_EOL;
});
//__DIR__为魔术变量,表示当前目录
var_dump($result);
echo "start".PHP_EOL;

function 为回调函数,在读取完成后调用,一般为最后

此方法读取的文件大小不超过4M

超过,一般使用swoole_async_read(); 使用方法参照文档

特点,分段读取,异步非阻塞

写文件

$content = date("Ymd H:i:s").PHP_EOL;
swoole_async_writefile(__DIR__."/1.log", $content, function($filename){
    // todo
    echo "success".PHP_EOL;
}, FILE_APPEND);
// file_put_contents();
echo "start".PHP_EOL;

一般文件名相同会覆盖,需要设置相应的参数

写入信息也有限制,4M

动态查看日志

tail  –f  access.log

安装MySQL数据库

https://blog.csdn.net/qq_38663729/article/details/79327305

导入数据库采用此方法:

mysql -u 用户名 -p  数据库名 < 数据库名.sql
mysql -u abc -p abc < abc.sql
source 即可

删除数据库:

drop database [xxx]
class AysMysql {
    public $dbSource = "";
    public $dbConfig = [];
    public function __construct() {
        $this->dbSource = new swoole_mysql;
        $this->dbConfig = array(
            'host' => 'localhost',
            'user' => 'root',
            'password' => '12345678',
            'database' => 'swoole',
            'chatset' => 'utf8', //指定字符集
        );
    }

    public function update() {

    }  

    public function add() {

    }    

    /**
     *mysql 执行逻辑
     *@param $id
     *@param $username
     *@return bool
     */
     public function execute($id, $username) {
         //connect
         $this->dbSource->connect($this->dbConfig, function($db, $result) use($id, $username){
             if($result === false){
                 var_dump($db->connect_errno, $db->connect_error);
                 die;
                 // todo
             }

             // $sql = "select * from test where id=1";
             $sql = "update test set username = '".$username."' where id=".$id;
             //query
             $db->query($sql, function($db, $result) use($sql){
                 //select => result 返回的是 查询结果内容
                 if($result === false){
                     //todo
                     var_dump($db->error);
                     echo $sql;
                 }elseif($result === true){//add update delete 返回bool
                     var_dump($db->affected_rows);
                 }else{
                     print_r($result);
                 }
                 $db->close();
             });
           });
        return true;
     }
}

//异步执行SQL语句

$obj = new AysMysql();
$flag = $obj->execute(1, 'chuangxiang');
var_dump($flag).PHP_EOL;
echo "start".PHP_EOL;

函数闭包内使用上一范围的变量

function()  use($ws, $frame)

猜你喜欢

转载自blog.csdn.net/qq_36289732/article/details/82490793