学习经验分享 |
|
centos环境准备
| Swoole-4.4.4(推荐在linux上安装,不推荐在windows) Mysql 5.7 Ngnix 1.16 Php 7.2.21 用x-shell连接虚拟机的centos
ftp连接上传文件
|
xshell连接虚拟机中的centos | 查看固定ip地址: 查看的方式就是通过命令 ip addr
vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=ec4396d1-23f3-4522-aea3-eaaca3efc9ec DEVICE=ens33 ONBOOT=yes ZONE=public IPADDR=192.168.153.129 NETMASK=255.255.255.0 GATEWAY=192.168.153.2
过 ping 192.168.153.129 试试
宝塔的安装命令 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh |
Swoole初体验 什么是swoole | 异步网络通信引擎,可以编写高性能异步并发tcp,udp,socket,http,websocket |
php结构 |
PHP结构: SAPI:针对于不同的环境提供不同的接口,进行初始化的动作 Main:执行脚本 ZendVM:是PHP语言的核心实现,代码编译 Extension:提供扩展 |
Php运行模式 | Php-cgi 1)每次访问都会新开一个进程,都会重新加载一次php.ini 2)使用完就会销毁
Fastcgi 服务启动后,php.ini配置文件只会加载一次,不会重复,不会有多余的IO开销(如:打开文件) 不会全部销毁
Swoole 把事先laravel项目启动时,需要的文件放在常驻内存,使用时直接输出 |
swoole为什么可以加速laravel(本质是加速php) Swoole为什么可以加速php |
Laravel第一步先加载所有的服务提供者,因为服务提供者加载很多的文件,所以第一次的时候运行会慢,而且运行一次又会销毁,造成资源的大量浪费
用swoole第一次运行之后会加载作为常驻内存 |
swoole加速php laravel的原因 | 传统的php运行模式,把配置信息每次都加载到内存中; Laravel的生命周期,在启动的时候,会加载很多服务提供者,会加载大量的php文件; laravel在启动之后会创建一个application类,所有服务提供者加载完之后的变量,把application放在swoole中,当做常驻内存。 原来每次访问laravel的时候不得不重新加载laravel的服务提供者,而现在用swoole只需要从内存中读取。 |
了解框架的生命周期 | Laravel 根据生命周期可以理解就是初始化$app然后解析出$kernel,再使用$kernel中的handle方法来完成整个项目的程序执行。 在整个项目中实际上重复运行$kernel,是基本不会去改变的,因此我们可以对于$kernel放在swoole中作为常驻内存,使用的时候直接读取即可。
TP
|
Swoole创建web服务器 |
代码做了几件事情,1. 创建http 服务,2. 监听请求,3. 运行 |
swoole加速laravel框架 |
对应的测试路由
|
问题出现:(数据输出方式不一样) Swoole对于数据的输出需要采用swoole的方式进行数据输出,与laravel数据输出会不一样 |
修改后:
|
分析laravel处理send()输出信息的源码 | laravel的 Illuminate\http\Response.php 这个类进行查看方法send方法
通过查看代码可以发现并没有存在send方法,那么根据继承可以去父级中查找 Symfony\Component\HttpFoundation\Response ;
|
使用swoole与 不使用swoole速度上的对比 (怎么进行对比) | 浏览器中有属性可以查看 - 页面响应时间(Network的Time属性)- 21ms VS 213ms |
处理参数接收的问题 | 目前会存在一个问题就是,访问路由 / 则可以,但是访问 /swoole 则不行 |
需要了解框架是如何去加载访问url(源码解析) | 根据调试发现$_SERVER没有参数值,及问题就是这里;主要是因为swoole在使用的时候会回收系统的超全局的变量,对于swoole自己官方提供的$request的方式可以获取请求的系统超全局的变量,那么完善的话我们就可以直接把swoole中的$request中的变量参数重新填充即可
|
访问swoole的地址 | 192.168.153.129:9501 |
| Swoole功能型 Laravel_extend 兼容当前框架使用 能够把可变因素变为方法或者类的方法处理 强调尽量考虑单一原则,符合设计模式,升级更加方便而快捷,升级成本低,个人主义 这是一个组件 Swoole业务型 Laravel_shop 不喜欢设计太过于单一,因是团队开发,代码阅读高。 |
| |
Manage基础完善与测试 ShineYork\LaravelExtend\Swoole\Server\Manager |
|
基础内容完善 初步处理配置与命令 开发swoole加速组件
| // laravel-extend/Swoole/Config/swoole.php 配置文件
return [ 'listen' => [ 'ip' => env('SWOOLE_LISTEN_IP', '127.0.0.1'), 'port' => env('SWOOLE_LISTEN_PORT', 5200) ], ]; //控制台输出命令 laravel-extend/Swoole/Console/HttpSwoole 命令文件(还需要完善) 执行完所有的请求 站在服务角度:启动 停止 重启 重新加载
// laravel-extend/Swoole/Http 请求文件 namespace ShineYork\LaravelExtend\Swoole\Http; class SRequest{ } }
// laravel-extend/Swoole/Http 响应文件 namespace ShineYork\LaravelExtend\Swoole\Http; class SResponse{ } }
// laravel-extend/Swoole/Server namespace ShineYork\LaravelExtend\Swoole\Server; class Swoole{ } } // laravel-extend/Swoole/SwooleServiceProvider(还可以完善) 请注意我们在执行命令的时候实际上它会运行到laravel的服务提供者,这里我推荐在laravel的服务提供者中对于swoole进行初始化的工作,之所以选择服务提供者是因为console是命令,在单一的职责这一块主要是执行操作; 而服务提供者则职责在于加载和注册这两项,因此我们完全可以在服务提供者中对于swoole服务进行初始化的工作,并且我们也完全可以把swoole服务放置于laravel的ioc中保管,并可以提供一个门面获取调用;
// laravel-extend/Swoole/Facades/Swoole.php 再提供一个门面指定一下这个类,因此可以创建这个类
|
使用swoole面向对象的编程方式 不使用闭包
(当前对象 绑定的方法) |
|
| |
Ngnix反向代理 | 在操作访问80端口的时候,能够跳到swoole服务,开启swoole服务
|
反向代理 vs 正向代理 | 反向代理: 代理解决,通过平台方不需要自己操心 浏览器 代理翻墙 服务器 正向代理: 自己到客户端设置可以访问的ip地址 浏览器 代理翻墙 服务器 |
Laravel-s组件 vs laravel-swoole组件 | Laravel结合swoole写的组件
|
简述laravel-s的实现 | 启动方式 Php .\bin\laravel start的方式启动的 这种启动方式脱离了laravel的artisian方式启动swoole,并把laravel注入到服务提供者中
源码:
Php artisian的实现:
|
简述laravel-swoole的实现 | 实现方式主要是通过laravel的artisan的方式实现的,类似于我们自己写的extend/swoole,就是基于这个组件开发的。 |
Inotify | 是swoole常驻内存,修改代码时,会立即生效,不需要重启 |
面试
处理swoole与laravel结合的问题 swoole与框架结合的问题 |
创建swoole http server 设置监听事件 启动
结合框架的命令 -- symfony命令去实现
4)问题--请求,响应 |
|
|
laravel项目(二)
最新推荐文章于 2023-06-24 17:27:27 发布