swoole_timer_tick
:設置一個間隔時鐘定時器,與after定時器不一樣的是tick定時器會持續觸發,直到調用swoole_timer_clear清除。int swoole_timer_tick(int $ms, callable $callback, mixed $user_param)
php
$ms
:單位毫秒$callback
:mysql
function callbackFunction(int $timer_id, mixed $params = null);
$timer_id
:定時器的ID,可用於swoole_timer_clear
清除此定時器$params
:由swoole_timer_tick
傳遞的第三個參數$user_param
:用戶參數,該參數會被傳遞到callbackFunction
中,若是有多個參數可使用數組的形式,也可使用匿名函數的use
語法傳遞到回調函數中swoole_timer_after
:在指定的時間後執行函數,須要1.7.7
或更高版本。int swoole_timer_after(int $after_time_ms, mixed $callback_function, mixed $user_param);
git
$ater_time_ms
:最大不超過86400000
swoole_timer_clear
:使用定時器ID來刪除定時器。bool swoole_timer_clear(int $timer_id)
github
$timer_id
:定時器ID,調用swoole_timer_tick
和swoole_timer_after
後會返回一個整數的IDswoole中定時器的例子:
# 先打印start,每隔2s打印tick回調函數中的內容,打印start後5s打印after中的內容 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';
swoole_async_readfile
,異步讀取文件內容redis
swoole_async_readfile(string $filename, mixed $callback);
Swoole\Async::readFile(string $filename, mixed $callback);
false
true
callback
函數callback
參數:$filename
和$content
swoole_async_readfile
會將文件內容所有複製到內存,因此不能用於大文件的讀取,若是想讀取大文件,使用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
,異步寫文件sql
swoole_async_writefile(string $filename, string $fileContent, callable $callback = null, int falgs = 0);
Swoole\Async::writeFile(string $filename, string $fileContent, callable $callback = null, int falgs = 0);
$filename
:文件名,必須有寫權限,文件不存在會自動建立。打開文件失敗會返回false$fileContent
:最大可寫入4M
$callback
:可選$falgs
:寫入選項,使用FILE_APPEND
表示追加到文件末尾經常使用於寫日誌
// 異步寫文件 $content = date('Y-m-d H:i:s') . PHP_EOL; $filename = __DIR__ . '/test.txt'; Swoole\Async::writeFile($filename, $content, function ($filename) { echo "write {$filename} success" . PHP_EOL; }, FILE_APPEND); echo 'start' . PHP_EOL;
一、
swoole_mysql->connect(array $serverConfig, callable $callback)
// 回調 function callback(swoole_mysql $db, bool $result); // 配置 $serverConfig= array( 'host' => '127.0.0.1', 'user' => 'root', 'password' => '123456', 'database' => 'test', 'charset' => 'utf8', );
二、
function swoole_mysql->query($sql, callable $callback);
function callback(swoole_mysql $link, mixed $result);
vim
$result
爲false
,讀取$link
對象的error
屬性得到錯誤信息,errno
屬性得到錯誤碼$result
爲true
,讀取$link
對象的affected_rows
屬性得到影響的行數,insert_id
屬性得到Insert
操做的自增ID$result
爲結果數組三、異步鏈接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 "執行非查詢語句\n"; var_dump($db->affected_rows); } else { // sql爲查詢語句 echo "執行查詢語句\n"; print_r($result); } $db->close(); }); }); } } $obj = new AsyncMysql(); $obj->execute(1, 'ronaldo7'); echo "start\n";
redis服務安裝數組
redis服務bash
tar -zxvf redis-4.0.9.tar.gz
cd redis-4.0.9
make
cd src
./redis-server
,便可開啓redis服務./redis-cli
,可鏈接redis服務hiredis庫服務器
unzip hiredis-0.13.3.zip
unzip
,能夠執行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
配置選項數組,默認爲nullfunction swoole_redis->connect(string $host, int $port, callable $callback);
$host
:redis服務器的主機IP$port
:redis服務器的端口$callback
:回調函數
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} \n"; // $redis->set('name1', 'ronaldo', function (swoole_redis $redis, $result) { // echo "set : {$result} \n"; // $redis->close(); // }); $redis->keys('*', function (swoole_redis $redis, $result) { var_dump($result); $redis->close(); }); }); echo 'start' . PHP_EOL;