laravel项目(二)

学习经验分享

 

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反向代理

http://192.168.128:9501

http://192.168.128

在操作访问80端口的时候,能够跳到swoole服务,开启swoole服务

 

反向代理 vs 正向代理

反向代理:

代理解决,通过平台方不需要自己操心

浏览器  代理翻墙  服务器

正向代理:

自己到客户端设置可以访问的ip地址

浏览器  代理翻墙  服务器

Laravel-s组件  vs  laravel-swoole组件

Laravel结合swoole写的组件

 

简述laravel-s的实现

启动方式

  Php .\bin\laravel start的方式启动的

  这种启动方式脱离了laravel的artisian方式启动swoole,并把laravel注入到服务提供者中

 

源码:

  1. 先加载laravel程序
  2. Symfony的console命令配置
  3. Symfony的console命令的执行分发
  4. Start方法(组件的配置文件 + laravel的配置文件)

 

Php artisian的实现:

  1. swoole服务的配置信息
  2. Laravel的配置信息
  1. 构造函数初始化,绑定事件

简述laravel-swoole的实现

实现方式主要是通过laravel的artisan的方式实现的,类似于我们自己写的extend/swoole,就是基于这个组件开发的。

Inotify

是swoole常驻内存,修改代码时,会立即生效,不需要重启

面试

 

处理swoole与laravel结合的问题 swoole与框架结合的问题

  1. swoole加速框架的过程

创建swoole http server

设置监听事件

启动

  1. 设计思路

结合框架的命令 -- symfony命令去实现

  1. 命令类去启动,关闭swoole

4)问题--请求,响应

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值