摘要:從入門(mén)到放棄二一異步毫秒定時(shí)器設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與定時(shí)器不同的是定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀最大不超過(guò)使用定時(shí)器來(lái)刪除定時(shí)器。
swoole——從入門(mén)到放棄(二) 一、異步毫秒定時(shí)器
swoole_timer_tick:設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與after定時(shí)器不同的是tick定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清除。int swoole_timer_tick(int $ms, callable $callback, mixed $user_param)
$ms:?jiǎn)挝缓撩?/p>
$callback:
function callbackFunction(int $timer_id, mixed $params = null);
$timer_id:定時(shí)器的ID,可用于swoole_timer_clear清除此定時(shí)器
$params:由swoole_timer_tick傳遞的第三個(gè)參數(shù)
$user_param:用戶參數(shù),該參數(shù)會(huì)被傳遞到callbackFunction中,如果有多個(gè)參數(shù)可以使用數(shù)組的形式,也可以使用匿名函數(shù)的use語(yǔ)法傳遞到回調(diào)函數(shù)中
swoole_timer_after:在指定的時(shí)間后執(zhí)行函數(shù),需要1.7.7或更高版本。int swoole_timer_after(int $after_time_ms, mixed $callback_function, mixed $user_param);
是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀
$ater_time_ms:最大不超過(guò)86400000
swoole_timer_clear:使用定時(shí)器ID來(lái)刪除定時(shí)器。bool swoole_timer_clear(int $timer_id)
$timer_id:定時(shí)器ID,調(diào)用swoole_timer_tick和swoole_timer_after后會(huì)返回一個(gè)整數(shù)的ID
只能用來(lái)清除當(dāng)前進(jìn)程的定時(shí)器
swoole中定時(shí)器的例子:
# 先打印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);
文件不存在會(huì)返回false
成功打開(kāi)文件立即返回true
數(shù)據(jù)服務(wù)完畢后會(huì)回調(diào)指定的callback函數(shù)
callback參數(shù):$filename和$content
swoole_async_readfile會(huì)將文件內(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,異步寫(xiě)文件
函數(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:文件名,必須有寫(xiě)權(quán)限,文件不存在會(huì)自動(dòng)創(chuàng)建。打開(kāi)文件失敗會(huì)返回false
$fileContent:最大可寫(xiě)入4M
$callback:可選
$falgs:寫(xiě)入選項(xiàng),使用FILE_APPEND表示追加到文件末尾
如果文件已存在,底層會(huì)覆蓋舊的文件內(nèi)容
常用于寫(xiě)日志
// 異步寫(xiě)文件 $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í)行失敗,$result為false,讀取$link對(duì)象的error屬性獲得錯(cuò)誤信息,errno屬性獲得錯(cuò)誤碼
執(zhí)行成功,SQL為非查詢語(yǔ)句,$result為true,讀取$link對(duì)象的affected_rows屬性獲得影響的行數(shù),insert_id屬性獲得Insert操作的自增ID
執(zhí)行成功,SQL為查詢語(yǔ)句,$result為結(jié)果數(shù)組
3、異步連接mysql 的一個(gè)小實(shí)例
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, // 可選:連接超時(shí)時(shí)間(非查詢超時(shí)時(shí)間),默認(rèn)為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為非查詢語(yǔ)句 echo "執(zhí)行非查詢語(yǔ)句 "; var_dump($db->affected_rows); } else { // sql為查詢語(yǔ)句 echo "執(zhí)行查詢語(yǔ)句 "; 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,即可開(kāi)啟redis服務(wù)
./redis-cli,可連接redis服務(wù)
hiredis庫(kù)
hiredis下載地址
unzip hiredis-0.13.3.zip
如果你沒(méi)有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配置選項(xiàng)數(shù)組,默認(rèn)為null
function swoole_redis->connect(string $host, int $port, callable $callback);
$host:redis服務(wù)器的主機(jī)IP
$port:redis服務(wù)器的端口
$callback:回調(diào)函數(shù)
function onConnect(swoole_redis $redis, bool $result);
$result:連接成功為true,連接失敗為false,可以讀取$redis->errCode獲得錯(cuò)誤碼,讀取$redis->errMsg獲得錯(cuò)誤消息
function swoole_redis->close();
異步redis實(shí)例
$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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30789.html
摘要:從入門(mén)到放棄二一異步毫秒定時(shí)器設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與定時(shí)器不同的是定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀最大不超過(guò)使用定時(shí)器來(lái)刪除定時(shí)器。 swoole——從入門(mén)到放棄(二) 一、異步毫秒定時(shí)器 swoole_timer_tick:設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與after定時(shí)器不同的是tick定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:從入門(mén)到放棄三一進(jìn)程子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。默認(rèn)為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項(xiàng)將忽略用戶參數(shù),強(qiáng)制為。 swoole——從入門(mén)到放棄(三) 一、進(jìn)程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...
摘要:從入門(mén)到放棄三一進(jìn)程子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。默認(rèn)為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項(xiàng)將忽略用戶參數(shù),強(qiáng)制為。 swoole——從入門(mén)到放棄(三) 一、進(jìn)程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...
摘要:進(jìn)程可以使用函數(shù)向進(jìn)程投遞新的任務(wù)。當(dāng)前的進(jìn)程在調(diào)用回調(diào)函數(shù)時(shí)會(huì)將進(jìn)程狀態(tài)切換為忙碌,這時(shí)將不再接收新的,當(dāng)函數(shù)返回時(shí)會(huì)將進(jìn)程狀態(tài)切換為空閑然后繼續(xù)接收新的。當(dāng)進(jìn)程投遞的任務(wù)在中完成時(shí),進(jìn)程會(huì)通過(guò)方法將任務(wù)處理的結(jié)果發(fā)送給進(jìn)程。 swoole——從入門(mén)到放棄(一) 一、swoole的源碼包安裝 下載swoole源碼:git clone https://gitee.com/swoole...
閱讀 890·2021-10-25 09:44
閱讀 1262·2021-09-23 11:56
閱讀 1183·2021-09-10 10:50
閱讀 3131·2019-08-30 15:53
閱讀 2134·2019-08-30 13:17
閱讀 617·2019-08-29 18:43
閱讀 2491·2019-08-29 12:57
閱讀 855·2019-08-26 12:20