nginx
Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
cgi,fast-cgi
也叫通用网关接口,是Web服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。
早期的webserver只能处理html等静态文件,无法处理动态语言(比如php程序),于是出现了cgi协议,只要按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。
但是该方法有个缺点,就是webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。很明显这很浪费资源。
于是出现了fast-cgi。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。
php-fpm
全称:php-Fastcgi Process Manager.
php-fpm是 FastCGI 的实现,并提供了进程管理的功能。
进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。
Nginx + php-fpm
nginx 接收请求,然后通过反向代理功能将动态请求转向后端Php-fpm。具体流程如下:
请求
|
nginx
|
加载nginx fast-cgi模块
|
fast-cgi监听127.0.0.1:9000地址
|
请求到达127.0.0.1:9000
|
php-fpm 监听127.0.0.1:9000(master进程)
|
php-fpm 接收到请求,启用worker进程处理请求
|
php-fpm 处理完请求,返回给nginx
|
nginx将结果通过http返回给浏览器
nginx 相关命令
php-fpm 相关命令
文章参考:
四大部件
目录结构
app 应用核心目录
bootstrap 启动目录,用于载入配置文件,中间件等
config 配置文件目录。数据库,文件系统,cache等配置
database 数据库迁移文件以及填充文件
public 对外访问目录。index文件,静态资源等
resource 对应的视图文件以及为编译的前端资源,邮件模板,本地化语言文件
routes 路由目录。包括:web.php,api.php,console.php,changes.php。
storage 文件存储目录。缓存文件,日志,上传文件
tests 测试目录。自动化的测试脚本
Vendor 包含了应用通过composer 加载的依赖
这里只展示跟目录。具体参考:
https://laravelacademy.org/post/21960
请求原理
路由 => 中间件 => 控制器 => 模型 => 控制器 => 视图
通常控制器做处理数据,有点臃肿和庞大,中间可以件一些Sevice层,专门封装相关业务处理。控制器只负责和调用这些封装好的对象。这样做更符合设计原则。
hashtable:将不同的关键字(key)通过映射函数计算得到散列值(Bucket->h) 从而直接索引到对应的Bucket
hash表保存当前循环的指针,所以foreach 比for更快
Bucket:保存数组元素的key和value,以及散列值