swoole深入学习 5. AsyncIO 异步IO

swoole深入学习 5. AsyncIO 异步IO

标签(空格分隔): swoole


异步IO,分很多种,但凡是IO相关的都可以借助swoole来完成。

异步文件系统IO

Swoole\Async::readFile 异步读取小型文件

Swoole\Async::readFile最大可读取4M的文件,如果要读取超大文件,请使用Swoole\Async::read函数

读取文件一定要先存在,不然报错,我准备一个2.text,内容是123456.

//swoole_async_readfile最大可读取4M的文件
//如果要读取超大文件,请使用swoole_async_read函数
Swoole\Async::readFile("./2.text", function($fileName, $content){
    var_dump($fileName, $content);
});
echo "done" .PHP_EOL;

运行下输出:

$ php async_file.php
done
string(8) "./2.text"
123456

Swoole\Async::writeFile 异步写入少量内容到文件

Swoole\Async::writeFile最大可写入4M, 文件不存在,会自动创建,写入会从头覆盖原先的内容

//文件不存在,会自动创建,最大可写入4M
//会覆盖原先的内容,从头开始覆盖
Swoole\Async::writeFile("./2.text", 'v', function($fileName){
    var_dump($fileName);
});

echo "done" .PHP_EOL;

//再异步读一下,写入成功没?
Swoole\Async::writeFile("./2.text", 'v', function($fileName){
    var_dump($fileName);
});

运行下输出:

$ php async_file.php
done
string(8) "./2.text"
v23456

可以看到会从头写入,原先的1被v给取代了。暂时不知此从尾部写文件。

Swoole\Async::read 异步分段读取大型文件

异步读大文件,分段读取,每次只读$trunk_size个字节,不会占用太多内存。

我准备了一个1.text的文件,大概有 35k 大小。

$trunk_size = 8192;

$offset = 0

Swoole\Async::read("./1.text", function($fileName, $content){
    var_dump($fileName, strlen($content));
    //默认是return true, 会分段,多次执行
    //如果 return false,则执行一次就退出.
    //return false;
}, $trunk_size, $offset);
echo "done" .PHP_EOL;

$size,读取数据的最大长度,默认为8K = 8192字节
$offset,偏移文件指针,默认为0,表示从文件头部开始读取。必须大于等于0且小于文件总长度

运行下输出:

$ php async_file.php

done

string(8) "./1.text"
int(8192)

string(8) "./1.text"
int(8192)

string(8) "./1.text"
int(8192)

string(8) "./1.text"
int(8192)

string(8) "./1.text"
int(6459)

string(8) "./1.text"
int(0)

会发现了执行了多次,一次一次的异步分段在读取。$size参数设定每一次读取最大的值。

Swoole\Async::write 异步分段写入大内容到文件

Swoole\Async::write是分段读写的。不需要一次性将要写的内容放到内存里,所以只占用少量内存。

我准备了一个1.text的文件,大概有 35k 大小。写入到4.text中。

$content = file_get_contents('./1.text');
Swoole\Async::write("./4.text", $content, -1, function($fileName){
    var_dump($fileName);
});

echo "done" .PHP_EOL;

运行下输出:

$ php async_file.php
done
string(8) "./4.text"

Swoole\Async::dnsLookup 异步查询DNS

当DNS查询完成时,自动回调指定的callback函数。
当DNS查询失败时,比如域名不存在,回调函数传入的$ip为空

Swoole\Async::dnsLookup("www.baidu.com", function($host, $ip){
    var_dump($host, $ip);
});

Swoole\Async::dnsLookup("www.esd4343.com", function($host, $ip){
    var_dump($host, $ip);
});

echo 'dns done';

执行下:

$ php async.php

dns done

string(13) "www.baidu.com"
string(13) "14.215.177.37"

string(15) "www.esd4343.com"
string(0) ""

异步毫秒定时器

Swoole\Timer::tick 异步毫秒定时器

设置一个间隔时钟定时器,单位是微妙。与after定时器不同的是tick定时器会持续触发,直到调用Swoole\Timer::clear清除。而且可以设置多个相同时间间隔的定时器。

$tmer_id1 = Swoole\Timer::tick(1000, function($timer_id, $params = null){
    echo $timer_id. "timeout\n" . microtime(true);

    //Swoole\Timer::clear($timer_id);
});

//1
var_dump($timer_id1);

// true
var_dump(Swoole\Timer::exists($timer_id1));die;

Swoole\Timer::after 异步制定的毫秒时间后执行一次

一个一次性定时器,执行完成后就会销毁,回调函数没有任何参数

$tmer_id2 = Swoole\Timer::after(1000, function(){
     echo "timeout\n" . microtime(true);
});

//2
var_dump($tmer_id2);

// true
var_dump(Swoole\Timer::exists($tmer_id2));die;

Swoole\Timer::clear 删除定时器

使用定时器ID来删除定时器,不能用于清除其他进程的定时器,只作用于当前进程。

$tmer_id1 = Swoole\Timer::tick(1, function($timer_id, $params = null){
    echo $timer_id. "loop" . microtime(true) . PHP_EOL;

    global $a; $a++;

    //1万次后清除
    if ($a >= 10000) {
        Swoole\Timer::clear($timer_id);
    }
});

异步MySQL客户端

异步mysql就是异步的去连接数据库。直接上代码。

<?php
/**
 * Created by PhpStorm.
 * User: yangyi
 * Date: 2017/1/5
 * Time: 17:52
 */

$db = new Swoole\Mysql;

//配置文件
$server = array(
    'host' => '127.0.0.1',
    'user' => 'root',
    'password' => '123456',
    'database' => 'user',
);

//concent方法 2个参数,第一个是配置文件,第二个是一个回调函数。
$db->connect($server, function ($db, $result) {
    //$result 连接是否成功,只有为true时才可以执行query查询
    //$result 为false,可以通过`connect_errno`和`connect_error`得到失败的错误码和错误信息
    if ($result === false) {
        var_dump($db->connect_errno, $db->connect_error);
        die;
    }
    $sql = 'select * from ap_room limit 1';

    //query方法就是执行sql的方法
    //第一个参数是sql, 第二个参数是回调函数

    $db->query($sql, function($db, $result) {

        /*
        *  执行失败,$result为false
        *  error属性获得错误信息,errno属性获得错误码
        */
        if ($result === false) {
            var_dump($db->error, $db->errno);
        }

        /*
        * 执行成功
        * SQL为非查询语句(inset,update,delete)$result为true
        * affected_rows 为影响的行数,insert_id 获得
        */
        else if ($result === true ) {
            var_dump($db->affected_rows, $db->insert_id);
        }

        /*
        * 执行成功,SQL为select语句,$result为结果数组
        */
        else {
             var_dump($result);
        }

        //关闭mysql连接
        $db->close();
    });
});

echo 33;
### 回答1: swoole_loader 72.so 是一个在 PHP 中使用的扩展库,它提供了对 Swoole 框架的支持。Swoole 是一个基于 PHP 的高性能并发网络通信框架,可以用于构建 Web 应用、API 接口服务、游戏服务等。 swoole_loader 72.so 是为 PHP 7.2 版本编译的 Swoole 扩展库。PHP 7.2 是 PHP 的一个版本,它在性能和安全性方面做了一些改进和优化。使用 swoole_loader 72.so 扩展库可以使 PHP 7.2 版本可以使用 Swoole 的功能。 Swoole 扩展库可以在 PHP 语言中实现异步、并发和高性能的网络编程。它提供了许多函数和类,如 Server、Client、Coroutine 和 Task 等,用于实现 TCP/UDP 服务器、WebSocket 服务器、多进程网络服务器等。通过使用 swoole_loader 72.so 扩展库,我们可以方便地在 PHP 7.2 中使用这些功能。 要使用 swoole_loader 72.so 扩展库,首先需要在 PHP 配置文件中启用该扩展。可以通过编辑 php.ini 文件或者在命令行中使用 -d 选项来指定加载该扩展。配置好后,就可以在 PHP 代码中使用 Swoole 相关的类和函数。 总结来说,swoole_loader 72.so 是一个用于 PHP 7.2 版本的 Swoole 扩展库,使得 PHP 7.2 版本可以使用 Swoole 框架的功能,实现高性能的并发网络通信。 ### 回答2: swoole_loader 72.so 是一个针对 PHP 开发的扩展模块,在使用 Swoole 高性能网络库时常用到。在Linux环境下,我们可以通过PHP扩展管理器安装该模块,并在 php.ini 文件中启用它。 swoole_loader 72.so 为 PHP 7.2 版本的扩展库,其中的 72 表示对应的 PHP 版本号。它提供了一些 Swoole 相关的函数和类,方便我们在 PHP 中使用 Swoole 进行高性能网络编程。 Swoole 是一个面向生产环境的 PHP 异步、并发网络通信引擎,常用于开发高性能的网络服务器和网络应用。它提供了丰富的网络编程接口,支持 TCP/UDP/Unix Socket 等多种协议,还包括了常用的异步客户端和服务器、进程管理、协程等功能。使用 Swoole 可以大大提高 PHP 程序的性能和并发处理能力。 要使用 swoole_loader 72.so,我们需要在环境中预先安装 PHP 7.2 版本。然后,将 swoole_loader 72.so 文件复制到 PHP 的扩展目录中,并在 php.ini 文件中加入以下内容: ``` extension=swoole_loader 72.so ``` 保存并退出 php.ini 文件后,重启 PHP 服务即可完成安装和启用 swoole_loader 72.so。 安装好 swoole_loader 72.so 这个扩展后,我们就可以在 PHP 代码中使用 Swoole 提供的相关函数和类了。通过调用这些接口,我们可以编写出高性能、高并发的网络应用程序。 总之,swoole_loader 72.so 是一个为 PHP 7.2 版本定制的 Swoole 扩展库,它是使用 Swoole 进行网络编程的基础。通过安装和启用该扩展,我们可以在 PHP 中享受到 Swoole 强大的网络编程能力,提升程序的性能和并发处理能力。 ### 回答3: swoole_loader72.so是一个用于Swoole扩展的动态链接库文件。Swoole是一种高性能的PHP扩展,可以用于构建协程和异步的网络应用程序。swoole_loader72.so文件用于在PHP中加载和调用Swoole扩展。 swoole_loader72.so文件是针对PHP版本为7.2.x的系统进行编译的。在安装Swoole扩展时,我们通常会根据自己的PHP版本选择相应的swoole_loader.so文件进行加载。 要使用swoole_loader72.so文件,我们首先需要确保PHP的7.2.x版本已正确安装并配置。然后,我们将swoole_loader72.so文件复制到PHP的扩展目录中,并在php.ini配置文件中添加相应的扩展设置,以启用Swoole扩展。 启用Swoole扩展后,我们可以在PHP代码中使用Swoole提供的各种功能,如创建协程、进行异步网络通信、处理WebSocket等。通过加载swoole_loader72.so文件,PHP可以找到和调用Swoole的相关函数和类,从而实现高性能的异步和协程编程。 总之,swoole_loader72.so是用于加载Swoole扩展的动态链接库文件,适用于PHP 7.2.x版本的系统。加载该文件后,我们可以在PHP中使用Swoole扩展提供的功能,实现高性能的异步和协程编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值