Browse Source

Update Imi (#5180)

* Optimize db pool config

* Use singleton controller

* Fix

* Fix

* Optimize db pool config

* Use singleton controller

* Fix

* Fix

* Fix deadlock
Yurun 5 years ago
parent
commit
0d8e1f0d85

+ 13 - 6
frameworks/PHP/imi/ApiServer/Controller/IndexController.php

@@ -4,7 +4,7 @@ namespace ImiApp\ApiServer\Controller;
 use ImiApp\Model\World;
 use ImiApp\Model\Fortune;
 use Imi\Controller\HttpController;
-use Imi\Db\Annotation\Transaction;
+use Imi\RequestContext;
 use Imi\Server\View\Annotation\View;
 use Imi\Server\Route\Annotation\Action;
 use Imi\Server\Route\Annotation\Controller;
@@ -32,7 +32,7 @@ class IndexController extends HttpController
      */
     public function plaintext()
     {
-        return $this->response->withHeader('Content-Type', 'text/plain')->write('Hello, World!');
+        return RequestContext::get('response')->withHeader('Content-Type', 'text/plain')->write('Hello, World!');
     }
 
     /**
@@ -52,11 +52,14 @@ class IndexController extends HttpController
      */
     public function query($queries)
     {
-        $queryCount = 1;
         if($queries > 1)
         {
             $queryCount = min($queries, 500);
         }
+        else
+        {
+            $queryCount = 1;
+        }
         $list = [];
         while ($queryCount--)
         {
@@ -73,7 +76,9 @@ class IndexController extends HttpController
      */
     public function fortunes()
     {
-        $this->response = $this->response->withHeader('Content-Type', 'text/html; charset=UTF-8');
+        RequestContext::use(function(&$context){
+            $context['response'] = $context['response']->withHeader('Content-Type', 'text/html; charset=UTF-8');
+        });
         $list = Fortune::select();
         $rows = [];
         foreach($list as $item)
@@ -89,17 +94,19 @@ class IndexController extends HttpController
 
     /**
      * @Action
-     * @Transaction
      *
      * @return void
      */
     public function update($queries)
     {
-        $queryCount = 1;
         if($queries > 1)
         {
             $queryCount = min($queries, 500);
         }
+        else
+        {
+            $queryCount = 1;
+        }
         $list = [];
         while ($queryCount--)
         {

+ 3 - 0
frameworks/PHP/imi/ApiServer/config/config.php

@@ -23,4 +23,7 @@ return [
             ],
         ]
     ],
+    'controller'    =>  [
+        'singleton' => true,
+    ],
 ];

+ 12 - 8
frameworks/PHP/imi/config/config.php

@@ -1,10 +1,4 @@
 <?php
-$dbPoolConfig = [
-    // 池子中最多资源数
-    'maxResources' => 10000,
-    // 池子中最少资源数
-    'minResources' => 0,
-];
 $dbResourceConfig = [
     'host'        => 'tfb-database',
     'username'    => 'benchmarkdbuser',
@@ -48,7 +42,12 @@ return [
             'sync' => [
                 'pool'    =>    [
                     'class'        =>    \Imi\Db\Pool\SyncDbPool::class,
-                    'config'    =>    $dbPoolConfig,
+                    'config'    =>    [
+                        // 池子中最多资源数
+                        'maxResources' => 512,
+                        // 池子中最少资源数
+                        'minResources' => 0,
+                    ],
                 ],
                 // resource也可以定义多个连接
                 'resource'    =>    $dbResourceConfig,
@@ -57,7 +56,12 @@ return [
             'async' => [
                 'pool'    =>    [
                     'class'        =>    \Imi\Db\Pool\CoroutineDbPool::class,
-                    'config'    =>    $dbPoolConfig,
+                    'config'    =>    [
+                        // 池子中最多资源数
+                        'maxResources' => 512,
+                        // 池子中最少资源数
+                        'minResources' => 16,
+                    ],
                 ],
                 // resource也可以定义多个连接
                 'resource'    =>    $dbResourceConfig,