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
注: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框架的开发,参考
官方文档,并且带着大家简单阅读下源码了解下运行机制。
- 首先会调用相关处理器做相关的初始化工作
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入门及技术指南相关推荐
- laravel入门及技术指南
介绍 Laravel 是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简 ...
- Python入门及技术指南
1. Python基础介绍 初识Python 官网:Welcome to Python.org Python文档下载地址:Our Documentation | Python.org 入门 Pytho ...
- 《算法竞赛入门经典训练指南》pdf
下载地址:网盘下载 基本介绍 编辑 内容简介 <算法竞赛入门经典:训练指南>题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点. ...
- 【评论分享有礼】毕业遇上疫情怎么办?4条技术指南轻松应对(内含求职、租房攻略)
摘要:这届应届生实在太难了! 云毕业照.云授学位.云拨穗.云毕业典礼--疫情之下,2020年的毕业季显得有些特别. 这一届毕业生们,既不能和同学们集体狂欢到天明,也面临着非常严峻的就业环境. 疫情之下 ...
- 电脑编程入门自学java_电脑编程入门自学Java指南
随着Java近些年来的强劲发展,想要转行学习Java的初学者也越来越多了.然而,入门自学Java并不是一件轻松的事情.众所周知,万事开头难,尤其是没有编程语言基础的学习者,不仅仅需要付出更多的心血和汗 ...
- 计算机视觉--CV技术指南文章汇总
前言 本文汇总了过去本公众号原创的.国外博客翻译的.从其它公众号转载的.从知乎转载的等一些比较重要的文章,并按照论文分享.技术总结三个方面进行了一个简单分类.点击每篇文章标题可阅读详细内容 欢迎关注 ...
- Dram学习笔记(2) 读《终极内存技术指南》笔记 + 纠正一些流传很广的文章错误
文章目录 0. 引言 1. Dram 名词解释 2. 一些流程步骤的梳理 2.1 内存结构 2.2 一次burst的实现 2.3 一次mask burst的实现 3. 不懂的地方 3.1 数据在内存里 ...
- SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson)
SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson) 一.概述 分布式锁是控制分布式系统之间同步访问共享资源的一种方式.在分布式系统中,常常需要协调他们的动作.如果不 ...
- NoSQL入门三步指南
我一直在研究NoSQL数据库几个月,并希望与我分享我的经验. 如果您打算开始学习NoSQL数据库,那么这篇文章可能会对您有所帮助. 我会尝试链接我认为有用的资源. 步骤1:什么是NoSQL? NoSQ ...
最新文章
- 第一次使用MsChart运行提示:ChartImg.axd 执行子请求时出错。
- 有一种爱,永远也无法逾越
- Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
- 实现打印异常日志_老生常谈SpringAop日志收集与处理做的工具包
- 看到go语言简介想到的
- Python_socketserver
- Java 将File转换为MultipartFile类型
- 找出有序数组中绝对值最小的数
- 2022年第十三届蓝桥杯省赛真题及部分答案解析(Java B组)
- 微博java版_新浪微博JAVA通用版
- JS-记事本(代码)
- keil5安装STC芯片包
- 千万不要装今天的windows在线更新:IDT - Audio - IDT High Definition Audio CODEC
- 数字图像隐写术之卡方分布
- 华为云桌面,带你见识不一样的系统桌面
- 适合学生党无线蓝牙耳机,好用又实惠蓝牙耳机推荐
- Android播放音频到耳机,Android音乐播放模式切换-外放、听筒、耳机
- 一颗病毒大小的新型分子或可帮助人类找到暗物质
- go学习 --- godoc工具安装
- typedef的用法。
热门文章
- COHERENT VERDI 18w激光电源维修注意事项
- 呼叫中心系统所使用技术上的几个概念
- JPA和领域驱动的设计
- rocketmq 启动mqbroker.cmd闪退
- java web实现拨打电话_java的webservice实现电话号码查询
- 计算机中运算器介绍,运算器,什么是运算器,运算器介绍--电子百科词库--科通芯城,IC及其他电子元器件交易型电商平台100%正品保证...
- 多相滤波 信道化接收机 matlab程序,基于复多相滤波器组的信道化接收机
- 海康网络摄像头rtsp转hls生成 m3u8,浏览器直播播放。
- openlayers 地图限制区域实现方法
- python调用百度API实现中英文互译