<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Yii2-Swoole 快速入門

      Yii2-Swoole 快速入門

      讓你的 Yii2 應用性能提升 10-100 倍!本教程將教你如何在 yii2-app-basic 中快速集成 yii2-swoole。

      為什么使用 yii2-swoole?

      • ? 比 PHP-FPM 快 10-100 倍
      • ?? 數據庫和 Redis 連接池自動管理
      • ?? 協程并發處理請求
      • ?? 代碼幾乎不需要修改

      系統要求

      • PHP >= 8.1
      • Swoole >= 6.0
      • Yii2 >= 2.0

      安裝 Swoole

      pecl install swoole
      

      php.ini 中添加:

      extension=swoole.so
      

      驗證:

      php --ri swoole
      

      快速開始

      1. 安裝擴展

      composer require dacheng-php/yii2-swoole
      

      2. 創建配置文件

      創建 config/swoole.php

      <?php
      
      return [
          'bootstrap' => [
              [
                  'class' => \Dacheng\Yii2\Swoole\Bootstrap::class,
                  'componentId' => 'swooleHttpServer',
                  'memoryLimit' => '2G',
              ],
          ],
          'components' => [
              'swooleHttpServer' => [
                  'class' => \Dacheng\Yii2\Swoole\Server\HttpServer::class,
                  'host' => '127.0.0.1',
                  'port' => 9501,
                  'documentRoot' => __DIR__ . '/../web',
                  'settings' => [
                      'max_coroutine' => 100000,
                      'log_level' => SWOOLE_LOG_WARNING,
                  ],
                  'dispatcher' => new \Dacheng\Yii2\Swoole\Server\RequestDispatcher(
                      __DIR__ . '/web.php'
                  ),
              ],
          ],
      ];
      

      3. 修改 Web 配置

      編輯 config/web.php,在 return $config; 之前添加:

      // 合并 Swoole 配置
      $swooleConfig = require __DIR__ . '/swoole.php';
      $config = \yii\helpers\ArrayHelper::merge($swooleConfig, $config);
      

      4. 啟動服務器

      php yii swoole/start
      

      訪問 http://127.0.0.1:9501 即可!

      停止服務器:

      php yii swoole/stop
      # 或按 Ctrl+C
      

      進階功能

      數據庫連接池

      config/swoole.php 中添加:

      'db' => [
          'class' => \Dacheng\Yii2\Swoole\Db\CoroutineDbConnection::class,
          'dsn' => 'mysql:host=127.0.0.1;dbname=your_database',
          'username' => 'root',
          'password' => '',
          'charset' => 'utf8mb4',
          'poolMaxActive' => 20,
          'poolWaitTimeout' => 5.0,
      ],
      

      使用方式與標準 Yii2 完全相同,連接池自動管理。

      Redis 連接池

      composer require yiisoft/yii2-redis
      

      config/swoole.php 中添加:

      'redis' => [
          'class' => \Dacheng\Yii2\Swoole\Redis\CoroutineRedisConnection::class,
          'hostname' => '127.0.0.1',
          'port' => 6379,
          'poolMaxActive' => 20,
          'poolWaitTimeout' => 5.0,
      ],
      
      'cache' => [
          'class' => \Dacheng\Yii2\Swoole\Cache\CoroutineRedisCache::class,
          'redis' => 'redis',
      ],
      
      'session' => [
          'class' => \Dacheng\Yii2\Swoole\Session\CoroutineSession::class,
          'redis' => 'redis',
      ],
      

      異步隊列

      composer require yiisoft/yii2-queue
      

      配置:

      'bootstrap' => [
          // ...
          'queue',
      ],
      'components' => [
          'queue' => [
              'class' => \Dacheng\Yii2\Swoole\Queue\CoroutineRedisQueue::class,
              'redis' => 'redis',
              'channel' => 'queue',
              'concurrency' => 10,
          ],
      ],
      

      創建任務 jobs/EmailJob.php

      <?php
      namespace app\jobs;
      
      class EmailJob extends \yii\base\BaseObject implements \yii\queue\JobInterface
      {
          public $to;
          public $subject;
          
          public function execute($queue)
          {
              // 發送郵件
              \Yii::$app->mailer->compose()
                  ->setTo($this->to)
                  ->setSubject($this->subject)
                  ->send();
          }
      }
      

      使用:

      Yii::$app->queue->push(new EmailJob([
          'to' => 'user@example.com',
          'subject' => '測試',
      ]));
      

      協程 HTTP 客戶端

      配置:

      'httpClient' => [
          'class' => \Dacheng\Yii2\Swoole\HttpClient\CoroutineClient::class,
          'transport' => [
              'class' => \Dacheng\Yii2\Swoole\HttpClient\CoroutineTransport::class,
          ],
      ],
      

      使用:

      // 單個請求
      $response = Yii::$app->httpClient->get('https://api.example.com/users')->send();
      
      // 批量并發請求
      $requests = [
          'users' => Yii::$app->httpClient->get('https://api.example.com/users'),
          'posts' => Yii::$app->httpClient->get('https://api.example.com/posts'),
      ];
      $responses = Yii::$app->httpClient->batchSend($requests);
      

      完整配置

      config/swoole.php 示例:

      <?php
      
      return [
          'bootstrap' => [
              [
                  'class' => \Dacheng\Yii2\Swoole\Bootstrap::class,
                  'componentId' => 'swooleHttpServer',
              ],
              'queue',
          ],
          'components' => [
              'swooleHttpServer' => [
                  'class' => \Dacheng\Yii2\Swoole\Server\HttpServer::class,
                  'host' => '127.0.0.1',
                  'port' => 9501,
                  'documentRoot' => __DIR__ . '/../web',
                  'dispatcher' => new \Dacheng\Yii2\Swoole\Server\RequestDispatcher(__DIR__ . '/web.php'),
              ],
              'db' => [
                  'class' => \Dacheng\Yii2\Swoole\Db\CoroutineDbConnection::class,
                  'dsn' => 'mysql:host=127.0.0.1;dbname=myapp',
                  'username' => 'root',
                  'password' => '',
                  'poolMaxActive' => 20,
              ],
              'redis' => [
                  'class' => \Dacheng\Yii2\Swoole\Redis\CoroutineRedisConnection::class,
                  'hostname' => '127.0.0.1',
                  'poolMaxActive' => 20,
              ],
              'cache' => [
                  'class' => \Dacheng\Yii2\Swoole\Cache\CoroutineRedisCache::class,
                  'redis' => 'redis',
              ],
              'session' => [
                  'class' => \Dacheng\Yii2\Swoole\Session\CoroutineSession::class,
                  'redis' => 'redis',
              ],
              'queue' => [
                  'class' => \Dacheng\Yii2\Swoole\Queue\CoroutineRedisQueue::class,
                  'redis' => 'redis',
              ],
          ],
      ];
      

      常見問題

      代碼修改后不生效?
      重啟服務器:Ctrl+C 停止后重新啟動(Swoole 常駐內存)

      無法啟動?

      • 檢查 Swoole 是否安裝:php --ri swoole
      • 檢查端口占用:lsof -i:9501

      連接超時?
      增加 poolMaxActivepoolWaitTimeout 參數

      靜態文件 404?
      確認 documentRoot 指向正確的 web 目錄

      生產部署

      Systemd 服務

      創建 /etc/systemd/system/yii2-app.service

      [Unit]
      Description=Yii2 Swoole
      After=network.target
      
      [Service]
      Type=simple
      User=www-data
      WorkingDirectory=/var/www/my-app
      ExecStart=/usr/bin/php /var/www/my-app/yii swoole/start
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
      

      啟動:

      sudo systemctl daemon-reload
      sudo systemctl enable yii2-app
      sudo systemctl start yii2-app
      

      Nginx 反向代理

      server {
          listen 80;
          server_name example.com;
          
          location / {
              proxy_pass http://127.0.0.1:9501;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }
      

      注意事項

      • ?? 避免使用全局變量(多請求共享)
      • ?? 使用協程安全組件(CoroutineSession、CoroutineUser)
      • ?? 代碼修改需要重啟服務器

      了解更多

      如果本項目對你有幫助,歡迎 ? Star!

      posted @ 2025-10-27 14:08  dacheng-gao  閱讀(179)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 暖暖影院日本高清...免费| 青青狠狠噜天天噜日日噜| 视频一区视频二区亚洲视频| 久久高清超碰AV热热久久| 无套内射极品少妇chinese| 乱色欧美激惰| 日韩大片高清播放器| 精品亚洲国产成人性色av| 久久久成人毛片无码| 国产 精品 自在 线免费| 老司机午夜福利视频| 年日韩激情国产自偷亚洲| 国产男女猛烈无遮挡免费视频网址| 国产绿帽在线视频看| 乱码精品一区二区亚洲区| 国产线播放免费人成视频播放| 国产蜜臀一区二区在线播放| 亚洲精品一二三四区| 亚洲欧洲一区二区精品| 亚洲gv猛男gv无码男同| 亚洲欧美人成人综合在线播放| 人妻少妇精品无码专区二区| 日日爽日日操| 韩国无码av片在线观看| 国产精品综合av一区二区国产馆| 丁香婷婷色综合激情五月| 国内少妇人妻丰满av| 四虎永久精品免费视频| 中文字幕有码日韩精品| 狠狠久久五月综合色和啪| 偷拍精品一区二区三区| 国产福利深夜在线播放| 久久精品国产亚洲av品| 国产精品99中文字幕| 国产女同一区二区在线| 日韩无矿砖一线二线卡乱| 四虎精品视频永久免费| 国产精品人妻系列21p| 亚洲国语自产一区第二页| 人妻少妇精品无码专区| 亚洲男人天堂2018|