国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

swoole——從入門到放棄(二)

awokezhou / 3404人閱讀

摘要:從入門到放棄二一異步毫秒定時器設(shè)置一個間隔時鐘定時器,與定時器不同的是定時器會持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會銷毀最大不超過使用定時器來刪除定時器。

swoole——從入門到放棄(二) 一、異步毫秒定時器

swoole_timer_tick:設(shè)置一個間隔時鐘定時器,與after定時器不同的是tick定時器會持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清除。int swoole_timer_tick(int $ms, callable $callback, mixed $user_param)

$ms:單位毫秒

$callback

function callbackFunction(int $timer_id, mixed $params = null);

$timer_id:定時器的ID,可用于swoole_timer_clear清除此定時器

$params:由swoole_timer_tick傳遞的第三個參數(shù)

$user_param:用戶參數(shù),該參數(shù)會被傳遞到callbackFunction中,如果有多個參數(shù)可以使用數(shù)組的形式,也可以使用匿名函數(shù)的use語法傳遞到回調(diào)函數(shù)中

swoole_timer_after:在指定的時間后執(zhí)行函數(shù),需要1.7.7或更高版本。int swoole_timer_after(int $after_time_ms, mixed $callback_function, mixed $user_param);

是一次性函數(shù),執(zhí)行完成后就會銷毀

$ater_time_ms:最大不超過86400000

swoole_timer_clear:使用定時器ID來刪除定時器。bool swoole_timer_clear(int $timer_id)

$timer_id:定時器ID,調(diào)用swoole_timer_tickswoole_timer_after后會返回一個整數(shù)的ID

只能用來清除當前進程的定時器

swoole中定時器的例子:
# 先打印start,每隔2s打印tick回調(diào)函數(shù)中的內(nèi)容,打印start后5s打印after中的內(nèi)容
swoole_timer_tick(2000, function($timer_id,) {
    echo "2s : timer_id-{$timer_id}";
});
$data = ["name" => "ronaldo"];
swoole_timer_after(5000, function($timer_id) use ($data) {
    print_r("5s : data - {$data}");
});
echo "start";
二、異步文件系統(tǒng)

swoole_async_readfile,異步讀取文件內(nèi)容

函數(shù)風(fēng)格:swoole_async_readfile(string $filename, mixed $callback);

命名空間風(fēng)格:SwooleAsync::readFile(string $filename, mixed $callback);

文件不存在會返回false

成功打開文件立即返回true

數(shù)據(jù)服務(wù)完畢后會回調(diào)指定的callback函數(shù)

callback參數(shù):$filename$content

swoole_async_readfile會將文件內(nèi)容全部復(fù)制到內(nèi)存,所以不能用于大文件的讀取,如果想讀取大文件,使用swoole_async_read
swoole_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,異步寫文件

函數(shù)風(fēng)格:swoole_async_writefile(string $filename, string $fileContent, callable $callback = null, int falgs = 0);

命名空間風(fēng)格:SwooleAsync::writeFile(string $filename, string $fileContent, callable $callback = null, int falgs = 0);

$filename:文件名,必須有寫權(quán)限,文件不存在會自動創(chuàng)建。打開文件失敗會返回false

$fileContent:最大可寫入4M

$callback:可選

$falgs:寫入選項,使用FILE_APPEND表示追加到文件末尾

如果文件已存在,底層會覆蓋舊的文件內(nèi)容

常用于寫日志
// 異步寫文件
$content = date("Y-m-d H:i:s") . PHP_EOL;
$filename = __DIR__ . "/test.txt";
SwooleAsync::writeFile($filename, $content, function ($filename) {
    echo "write {$filename} success" . PHP_EOL;
}, FILE_APPEND);

echo "start" . PHP_EOL;
三、異步Mysql
1、swoole_mysql->connect(array $serverConfig, callable $callback)
// 回調(diào)
function callback(swoole_mysql $db, bool $result);
// 配置
$serverConfig= array(
    "host" => "127.0.0.1",
    "user" => "root",
    "password" => "123456",
    "database" => "test",
    "charset" => "utf8",
);
2、function swoole_mysql->query($sql, callable $callback);

function callback(swoole_mysql $link, mixed $result);

執(zhí)行失敗,$resultfalse,讀取$link對象的error屬性獲得錯誤信息,errno屬性獲得錯誤碼

執(zhí)行成功,SQL為非查詢語句,$resulttrue,讀取$link對象的affected_rows屬性獲得影響的行數(shù),insert_id屬性獲得Insert操作的自增ID

執(zhí)行成功,SQL為查詢語句,$result為結(jié)果數(shù)組

3、異步連接mysql 的一個小實例
class AsyncMysql {

    private $dbSource = null;
    private $dbConfig = null;
    public function __construct()
    {
        $this->dbSource = new swoole_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)
        ];
    }

    public function execute($id, $name)
    {
        // 連接mysql
        $this->dbSource->connect($this->dbConfig, function ($db, $result) use ($id, $name) {
            if ($result === false) {
                var_dump($db->error, $db->errno);
                die;
            }
            $sql = "UPDATE `student` SET `name` = "{$name}" WHERE `id` = {$id}";
            $db->query($sql, function ($db, $result) {
                if ($result === false) {
                    var_dump($db->connect_error);
                } elseif ($result === true) { // sql為非查詢語句
                    echo "執(zhí)行非查詢語句
";
                    var_dump($db->affected_rows);
                } else { // sql為查詢語句
                    echo "執(zhí)行查詢語句
";
                    print_r($result);
                }
                $db->close();
            });
        });
    }
    
}

$obj = new AsyncMysql();
$obj->execute(1, "ronaldo7");
echo "start
";
異步Redis

redis服務(wù)安裝

redis服務(wù)

去redis官網(wǎng)下載redis包

tar -zxvf redis-4.0.9.tar.gz

cd redis-4.0.9

make

cd src

./redis-server,即可開啟redis服務(wù)

./redis-cli,可連接redis服務(wù)

hiredis庫

hiredis下載地址

unzip hiredis-0.13.3.zip

如果你沒有unzip,可以執(zhí)行yum install -y unzip zip

cd hiredis-0.13.3.zip

make -j

sudo make install

sudo ldconfig

編譯swoole需要加入-enable-async-redis

cd swoole

./configure --with-php-config=/opt/soft/php/bin/php-config --enable-async-redis

make clean

make -j

sudo make install

查看安裝是否成功

查看swoole是否存在:php -m

如果不存在的話vim ~/.bash_profile

加入一行:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

再:source ~/.bash_profile,即可

查看異步的redis是否支持:php --ri swoole

如果存在:async redis client => enabled,表明支持

redis常用方法

function swoole_redis->__construct(array $options = null);

$option配置選項數(shù)組,默認為null

function swoole_redis->connect(string $host, int $port, callable $callback);

$host:redis服務(wù)器的主機IP

$port:redis服務(wù)器的端口

$callback:回調(diào)函數(shù)

function onConnect(swoole_redis $redis, bool $result);

$result:連接成功為true,連接失敗為false,可以讀取$redis->errCode獲得錯誤碼,讀取$redis->errMsg獲得錯誤消息

function swoole_redis->close();

異步redis實例
$redisClient = new swoole_redis();
$redisClient->connect("127.0.0.1", 6379, function (swoole_redis $redis, $result) {
    echo "connect : {$result} 
";
//    $redis->set("name1", "ronaldo", function (swoole_redis $redis, $result) {
//        echo "set : {$result} 
";
//        $redis->close();    
//    });
    $redis->keys("*", function (swoole_redis $redis, $result) {
        var_dump($result);
        $redis->close();
    });
});

echo "start" . PHP_EOL;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30789.html

相關(guān)文章

  • swoole——入門放棄

    摘要:從入門到放棄二一異步毫秒定時器設(shè)置一個間隔時鐘定時器,與定時器不同的是定時器會持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會銷毀最大不超過使用定時器來刪除定時器。 swoole——從入門到放棄(二) 一、異步毫秒定時器 swoole_timer_tick:設(shè)置一個間隔時鐘定時器,與after定時器不同的是tick定時器會持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...

    tinyq 評論0 收藏0
  • swoole——入門放棄(三)

    摘要:從入門到放棄三一進程子進程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進程的標準輸入和輸出。默認為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強制為。 swoole——從入門到放棄(三) 一、進程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...

    王笑朝 評論0 收藏0
  • swoole——入門放棄(三)

    摘要:從入門到放棄三一進程子進程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進程的標準輸入和輸出。默認為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強制為。 swoole——從入門到放棄(三) 一、進程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...

    rottengeek 評論0 收藏0
  • swoole——入門放棄(一)

    摘要:進程可以使用函數(shù)向進程投遞新的任務(wù)。當前的進程在調(diào)用回調(diào)函數(shù)時會將進程狀態(tài)切換為忙碌,這時將不再接收新的,當函數(shù)返回時會將進程狀態(tài)切換為空閑然后繼續(xù)接收新的。當進程投遞的任務(wù)在中完成時,進程會通過方法將任務(wù)處理的結(jié)果發(fā)送給進程。 swoole——從入門到放棄(一) 一、swoole的源碼包安裝 下載swoole源碼:git clone https://gitee.com/swoole...

    morgan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<