利用swoole启动一个http服务
$server = new Swoole\Http\Server('0.0.0.0', 9502);
$server->set(['enable_coroutine' => true]);
$global_var = 0;
// 协程
$server->on('Request', function ($request, $response) use (&$global_var) {
// 因为浏览器会默认发送一个ico请求
if($request->server['path_info']=='/favicon.ico' || $request->server['request_uri']=='/favicon.ico'){
$response->end();
return;
}
// 因为是常驻内存,所以该变量不会释放,每次请求都会增加
// 如果叠加这个变量,要注意内存会不会溢出
$global_var += 1;
list($controller, $action) = explode('/', trim($request->server['request_uri'],'/'));
$response->header('content-Type', 'text/html;charset=utf-8');
$response->end("controller 是 {$controller},action 是 {$action}。请求次数是{$global_var}");
});
$server->start();
然后执行
php swoole.php
然后会阻塞在这里,常驻内存
通过ps命令可以看到,有1个父进程,4个子进程,每个子进程有一个协程管理器:
常驻内存的好处是:
- php文件不需要每次去加载。因为我们不会去改框架的代码,所以我们只需要将php框架的部分代码放在最外层,启动的时候加载一次就好了;然后业务代码啥的放在Reqeust事件里面,每次都去加载。
- redis、mysql等连接不需要每次去连接
但是需要注意的是,内存有可能会内存溢出。