初识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(),]);
...
}

持续完善,待续...

Swoft入门及技术指南相关推荐

  1. laravel入门及技术指南

    介绍 Laravel 是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简 ...

  2. Python入门及技术指南

    1. Python基础介绍 初识Python 官网:Welcome to Python.org Python文档下载地址:Our Documentation | Python.org 入门 Pytho ...

  3. 《算法竞赛入门经典训练指南》pdf

    下载地址:网盘下载 基本介绍 编辑 内容简介 <算法竞赛入门经典:训练指南>题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点. ...

  4. 【评论分享有礼】毕业遇上疫情怎么办?4条技术指南轻松应对(内含求职、租房攻略)

    摘要:这届应届生实在太难了! 云毕业照.云授学位.云拨穗.云毕业典礼--疫情之下,2020年的毕业季显得有些特别. 这一届毕业生们,既不能和同学们集体狂欢到天明,也面临着非常严峻的就业环境. 疫情之下 ...

  5. 电脑编程入门自学java_电脑编程入门自学Java指南

    随着Java近些年来的强劲发展,想要转行学习Java的初学者也越来越多了.然而,入门自学Java并不是一件轻松的事情.众所周知,万事开头难,尤其是没有编程语言基础的学习者,不仅仅需要付出更多的心血和汗 ...

  6. 计算机视觉--CV技术指南文章汇总

    前言  本文汇总了过去本公众号原创的.国外博客翻译的.从其它公众号转载的.从知乎转载的等一些比较重要的文章,并按照论文分享.技术总结三个方面进行了一个简单分类.点击每篇文章标题可阅读详细内容 欢迎关注 ...

  7. Dram学习笔记(2) 读《终极内存技术指南》笔记 + 纠正一些流传很广的文章错误

    文章目录 0. 引言 1. Dram 名词解释 2. 一些流程步骤的梳理 2.1 内存结构 2.2 一次burst的实现 2.3 一次mask burst的实现 3. 不懂的地方 3.1 数据在内存里 ...

  8. SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson)

    SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson) 一.概述 分布式锁是控制分布式系统之间同步访问共享资源的一种方式.在分布式系统中,常常需要协调他们的动作.如果不 ...

  9. NoSQL入门三步指南

    我一直在研究NoSQL数据库几个月,并希望与我分享我的经验. 如果您打算开始学习NoSQL数据库,那么这篇文章可能会对您有所帮助. 我会尝试链接我认为有用的资源. 步骤1:什么是NoSQL? NoSQ ...

最新文章

  1. 第一次使用MsChart运行提示:ChartImg.axd 执行子请求时出错。
  2. 有一种爱,永远也无法逾越
  3. Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
  4. 实现打印异常日志_老生常谈SpringAop日志收集与处理做的工具包
  5. 看到go语言简介想到的
  6. Python_socketserver
  7. Java 将File转换为MultipartFile类型
  8. 找出有序数组中绝对值最小的数
  9. 2022年第十三届蓝桥杯省赛真题及部分答案解析(Java B组)
  10. 微博java版_新浪微博JAVA通用版
  11. JS-记事本(代码)
  12. keil5安装STC芯片包
  13. 千万不要装今天的windows在线更新:IDT - Audio - IDT High Definition Audio CODEC
  14. 数字图像隐写术之卡方分布
  15. 华为云桌面,带你见识不一样的系统桌面
  16. 适合学生党无线蓝牙耳机,好用又实惠蓝牙耳机推荐
  17. Android播放音频到耳机,Android音乐播放模式切换-外放、听筒、耳机
  18. 一颗病毒大小的新型分子或可帮助人类找到暗物质
  19. go学习 --- godoc工具安装
  20. typedef的用法。

热门文章

  1. COHERENT VERDI 18w激光电源维修注意事项
  2. 呼叫中心系统所使用技术上的几个概念
  3. JPA和领域驱动的设计
  4. rocketmq 启动mqbroker.cmd闪退
  5. java web实现拨打电话_java的webservice实现电话号码查询
  6. 计算机中运算器介绍,运算器,什么是运算器,运算器介绍--电子百科词库--科通芯城,IC及其他电子元器件交易型电商平台100%正品保证...
  7. 多相滤波 信道化接收机 matlab程序,基于复多相滤波器组的信道化接收机
  8. 海康网络摄像头rtsp转hls生成 m3u8,浏览器直播播放。
  9. openlayers 地图限制区域实现方法
  10. python调用百度API实现中英文互译