Swoft入门及技术指南

初识Swoft


参考素材
swoft官网:http://swoft.org/
在线官方文://档:http://www.swoft.org/documents/v2/

http://swoft.org/documents
参考文档:

最新版本

目前最新版本2.0.x


辅助工具
 

 

Swoft运行模式

参见:谈网络通信处理的原理的演进及编程实现详解 https://blog.csdn.net/yan_dk/article/details/89520632

传统PHP-Fpm 模式

传统 Nginx + PHP-Fpm 模式的配合已经运行得足够好,但是由于php-fpm本身是同步阻塞进程模型,在请求结束后释放所有的资源(包括框架初始化创建的一系列对象,导致PHP进程空转(创建<-->销毁<-->创建)消耗大量的CPU资源,从而导致单机的吞吐能力有限。请求夯住,会导致 CPU 不能释放资源, 大大浪费了 CPU 使用率。

 

基于Swoole扩展--Swoft

Swoft是首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。

安装Swoft

使用Composer安装

安装composer,参见:https://blog.csdn.net/yan_dk/article/details/90228559

 composer create-project swoft/swoft swoft2

注意:php环境配置>7.1,安装redis、swoole扩展。

然后在安装目录再执行composer安装组件

# cd swoft2

# composer update

成功后,看到项目swoft2下已经生成vendor目录,里面有各种支持的组件模块。

启动运行Swoft

-- 启动 HTTP 服务 
php ./bin/swoft http:start 
-- 以守护进程模式启动* 
php ./bin/swoft http:start -d
 -- 停止 HTTP 服务* 
php ./bin/swoft http:stop 
-- 重启 HTTP 服务* 
php ./bin/swoft http:restart
swoft2# php ./bin/swoft http:start
我们看到默认监听端口为18306,我们服务器应当开放防火墙18306端口,就可以访问。
浏览器访问http://ip:18306
访问websocket,启动指令为
# php bin/swoft ws:start
 

 注:swoft目前在windows环境暂不能运行,部署同步到linux服务器4上,本地只是通过IDE环境编辑上传服务器运行。推荐使用Phpstorm编辑器,可以设定自动上传,本地开发的代码与服务器端代码同步,如下图

示例

示例1(修改路由)

我们修改一下首页控制器,app/HomeController.php

 

...
class HomeController{
...
/**
     * @RequestMapping("/test")
     *
     * @return Response
     */
    public function test(): Response  {
        return context()->getResponse()->withContent('I am test');
    }
...
}

 我们增加了一个注解路由“/test”

浏览器再访问http://ip:18306/test

Swoft生命周期

 通过了解swoft生命周期,运行模式能够更好的有利于利用swoft框架的开发,参考

官方文档,并且带着大家简单阅读下源码了解下运行机制。

  1. 首先会调用相关处理器做相关的初始化工作

ENV环境文件初始化

注解信息扫描收集

配置初始化

注册类到bean容器当中

收集事件监听器

启动console控制台启动相应的服务

 


class SwoftApplication implements SwoftInterface, ApplicationInterface{
...
protected function processors(): array
    {
        return [
            new EnvProcessor($this),
            new ConfigProcessor($this),
            new AnnotationProcessor($this),
            new BeanProcessor($this),
            new EventProcessor($this),
            new ConsoleProcessor($this),
        ];
    }
...
}

 

2、注解信息扫描收集

      在swoft当中大量使用了注解,从路由的配置到中间件配置等都依赖注解机制,所以注解需要在服务启动之前扫描到配置了注解的类,收集注解信息。

class AnnotationProcessor extends Processor{
...
// Find AutoLoader classes. Parse and collect annotations.
        AnnotationRegister::load([
            'inPhar'               => \IN_PHAR,
            'basePath'             => $app->getBasePath(),
            'notifyHandler'        => [$this, 'notifyHandler'],
            'disabledAutoLoaders'  => $app->getDisabledAutoLoaders(),
            'disabledPsr4Prefixes' => $app->getDisabledPsr4Prefixes(),
        ]);
...
}

 

 持续完善,待续...

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云焰

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值