<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 4.5 同步任務 同步任務即Task,用來做一些異步的慢速任務,比如發郵件、批量任何、任何不支持異步Client的服務調用等等。MSF框架是純異步Server架構,也就是說任何耗時的任務的代碼不能放到Worker進程中執行,所以我們利用Swoole的Task模塊來完成耗時任務。 ## Task進程 同步任務代碼是在Task進程中執行的,Task進程具有以下的特性: - 同步阻塞 - 支持定時器 目前MSF框架封裝了異步的Http Client、Redis Client、MySQL Client,除了這幾種原生支持異步外,任何其他的非異步Client的網絡IO均要封裝成Task,比如MongoDB Task。 ## Task示例 框架內封裝了Task基類`\PG\MSF\Tasks\Task`,自定義的Task都應該繼承此類。另外,框架內置一個MongoDbTask類,是操作MongoDB的任務類,封裝了查詢和修改MongoDB數據庫的一些基本方法,如: ### composer安裝依賴 編輯項目的composer.json,加入依賴`alcaeus/mongo-php-adapter` ```json { "require": { "alcaeus/mongo-php-adapter": "^1.0" } } ``` 或者 ```bash $composer require alcaeus/mongo-php-adapter ``` ### MongoDB配置 ```php <?php /** * MongoDb配置文件 * * @author camera360_server@camera360.com * @copyright Chengdu pinguo Technology Co.,Ltd. */ $config['mongodb']['test']['server'] = 'mongodb://192.168.1.106:27017'; $config['mongodb']['test']['options'] = ['connect' => true]; $config['mongodb']['test']['driverOptions'] = []; return $config; ``` 示例代碼: [./php-msf-demo/config/docker/mongodb.php](https://github.com/pinguo/php-msf/pinguo/config/docker/mongodb.php) ### Task業務邏輯類 ```php <?php namespace App\Tasks; use \PG\MSF\Tasks\MongoDbTask; class Idallloc extends MongoDbTask { /** * 當前要用的配置 配置名,db名,collection名 * @var array */ protected $mongoConf = ['test', 'demo', 'idalloc']; public function getNextId($key) { $condition = [ '_id' => $key, ]; $update = [ '$inc' => [ 'last' => 1, ], ]; $options = [ 'new' => true, 'upsert' => true, ]; $doc = $this->mongoCollection->findAndModify($condition, $update, [], $options); return isset($doc['last']) ? $doc['last'] : false; } } ``` 示例代碼: [https://github.com/pinguo/php-msf-demo/app/Tasks/Idallloc.php](https://github.com/pinguo/php-msf-demo/blob/master/app/Tasks/Idallloc.php) ### 調用Task ```php <?php /** * MongoDB操作示例 * * @author camera360_server@camera360.com * @copyright Chengdu pinguo Technology Co.,Ltd. */ namespace App\Controllers; use PG\MSF\Controllers\Controller; use App\Tasks\Idallloc; class MongoDBTest extends Controller { public function actionGetNewId() { /** * @var Idallloc $idAlloc */ $idAlloc = $this->getObject(Idallloc::class); $newId = yield $idAlloc->getNextId('test'); $this->output($newId); } } ``` 示例代碼: [https://github.com/pinguo/php-msf-demo/app/Controllers/MongoDBTest.php](https://github.com/pinguo/php-msf-demo/blob/master/app/Controllers/MongoDBTest.php) 我們需要認識到: 1. Worker進程只是將任務投遞給Tasker進程后立即返回,即是非阻塞的投遞; 2. Tasker進程執行相應的業務邏輯,在這里就是從MongoDB獲取新的一個ID; 3. Worker進程是通過協程獲取到Tasker執行結果,即調用需要加yield關鍵字; ### 訪問接口 ```bash [worker@newdev ~]$ curl http://127.0.0.1:8000/MongoDBTest/GetNewId 1 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看