精通Swoole的HTTP服务编写 - 深入解析与教程

silverwq
2022-10-13 / 0 评论 / 180 阅读 / 正在检测是否收录...

利用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

然后会阻塞在这里,常驻内存
l93x0t6c.png
通过ps命令可以看到,有1个父进程,4个子进程,每个子进程有一个协程管理器:
l93x5fg5.png

常驻内存的好处是:

  1. php文件不需要每次去加载。因为我们不会去改框架的代码,所以我们只需要将php框架的部分代码放在最外层,启动的时候加载一次就好了;然后业务代码啥的放在Reqeust事件里面,每次都去加载。
  2. redis、mysql等连接不需要每次去连接

但是需要注意的是,内存有可能会内存溢出。

0

评论 (0)

取消