最近在做 基于 swoole 的web开发框架, 本身用的是DI依赖注入,在onRequest回调中对路由进行解析,然后实例化控制器等操作。问题在于当请求1与请求2来的时候控制器内存没有被释放,导致2次请求用的是同一次内存中的对象。
代码如下:
// 变量解释
$app (这是一个单例)
$server->on('request',function($request,$response) use($app){
$uri = $request->server['request_uri'] ;
list($controller,$action) = Route::parseUri($uri);
$controller = $app->make($controller); // 该步骤会把controller绑定到$app上下次make直接获取到同一个对象
$response->end( $controller->{$action}());
})
// controller
class Controller {
public $i = 0;
public fucntion index(){
$this->i ++ ;
return $this->i ;
}
}
// 第一次 输出 1,
// 第二次输出 2 ,
问:如何管理好对象的实例化与释放 不然每个请求对象长久的保存在内存中内存要爆炸啊。
使用ob_start 和 ob_系列函数,另外,一些对象的实例,不需要的时候unset掉!