您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP之微服务协程框架Swoft

2024/12/12 7:21:15发布20次查看
简介
有了swoole这样强大的扩展之后,越来越多的框架都是基于swoole被开发出来,swoft就是其中一款不错的php框架。swoft 是一款基于 swoole 原生协程的注解式框架,自带常驻内存以及 swoole 其它功能的封装。swoft中内置了协程客户端。同时swoft里面有了很多新的概念,比如aop等。
官网地址:https://www.swoft.org/
 使用swoft框架注意事项
因为swoft是基于swoole,所以和普通的php框架还是很不一样的,有些是需要注意的。
1.不要再代码中执行sleep()以及其他睡眠函数,这样会导致整个进程阻塞。
2.不要使用exit/die函数,这样会导致worker进程直接退出。
3.进程隔离需要注意的,当修改了全局变量的值,会不生效,因为全局变量在不同的进程中,内存空间是隔离的。使用swoft框架需要了解进程隔离问题。不同的进程中php变量不是共享,即便是全局变量。如果不同的进程需要共享数据,可以使用redis,mysql,消息队列,文件,swoole/table,apcu(php自带的缓存扩展),shmget(进程通信(ipc)共享内存)等工具。同时不同进程的文件句柄也是隔离的,所以在a进程创建的socker连接打开的文件在b进程内是无效的。
4.进程克隆,当server启动时候,主进程会克隆当前进程状态,此后开始进程内的数据互相独立,互不影响。
5.不要再控制器写基类来写公共的变量,这样会造成数据污染,当下一个请求进来依然会请求到这个变量,因为常驻内存并且单利所以不会释放掉。
 官方文档也有提示
https://www.swoft.org/documents/v2/dev-guide/dev-note/
swoft框架安装
 安装环境要求:
1. gcc版本大于等于4.8。
2. php版本大于7.1。
3. composer包管理工具。
4. 安装redis异步客户端hiredis,在最新版本的swoole4.2.6之后已经内置了,不需要安装。
5. swoole扩展,这个是必须的。
6.链接迭代器依赖库pcre。
7. swoole需要开启协程和异步redis。
安装
git clone https://github.com/swoft-cloud/swoftcd swoftcomposer installcp .env.example .env #编辑 .env 文件,根据需要调整相关环境配置
如果出现下面错误说明redis扩展没有,因为swoft需要redis扩展。
当然使用docker方式会更加简单,执行下面命令
docker run -p 18306:18306 --name swoft swoft/swoft
在浏览器中输入 http://127.0.0.1:18306 就可以打开swoft本地页面。
关闭和开启运行命令 docker start/stop swoft
swoft目录及文件说明
进入容器查看swoft目录
root@880c142615c3:/var/www/swoft# tree -l 2.|-- contributing.md|-- dockerfile|-- license|-- readme.md|-- readme.zh-cn.md|-- app #应用目录| |-- annotation  #定义注解相关目录| |-- application.php| |-- aspect| |-- autoloader.php| |-- common| |-- console| |-- exception| |-- helper#助手函数目录| |-- http| |-- listener #事件监听器目录| |-- migration| |-- model #模型、逻辑等代码目录| |-- process| |-- rpc#rpc服务代码目录| |-- task  #任务投递管理目录,这里可以做异步任务或者定时器的工作| |-- tcp| |-- validator| |-- websocket #websocket服务代码目录| `-- bean.php|-- bin| |-- bootstrap.php| `-- swoft #swoft入口文件|-- composer.cn.json|-- composer.json|-- composer.lock|-- config| |-- base.php| |-- db.php| `-- dev|-- database| |-- autoloader.php| `-- migration|-- dev.composer.json|-- docker-compose.yml|-- phpstan.neon.dist|-- phpunit.xml|-- public| |-- favicon.ico| `-- image|-- resource #应用资源目录| |-- language| `-- views|-- runtime #临时文件目录(日志、上传文件、文件缓存等)| |-- logs| |-- sessions| |-- swoft.command| `-- swoft.pid|-- test  #单元测试目录 | |-- apitest| |-- bootstrap.php| |-- run.php| |-- testing| `-- unit`-- vendor |-- autoload.php |-- bin |-- composer |-- doctrine |-- monolog |-- myclabs |-- nikic |-- phar-io |-- php-di |-- phpdocumentor |-- phpoption |-- phpspec |-- phpunit |-- psr |-- sebastian |-- swoft |-- symfony |-- text |-- theseer |-- toolkit |-- vlucas `-- webmozart
swoftbean容器
 bean容器是swoft的核心,每一个bean就是一个类对象的实例,容器就是一个工厂来存放和管理bean。在httpserver启动时候会扫描带有@bean注解的类。传统的php是没有常驻内存的,每次请求都会重新初始化各种资源,每个对象也要重新实例化去申请内存,处理完请求后又被消耗,十分浪费资源。而swoft在httpserver启动后会将这些对象实例化并存放在内存中,下次请求就直接取出使用,减少对象创建资源的消耗。
bean容器底层是一个beanfactory管理容器(container)。
swoft注解(annotations)机制
注解是swoft里面很多重要功能特别是aop,ioc容器的基础。熟悉java的朋友应该更加了解注解。 
那么注解是什么样呢?下面是swoft的一部分代码,在类、方法或成员变量上方的注释部分就有注解。
namespace app\tcp\controller;use app\tcp\middleware\demomiddleware;use swoft\tcp\server\annotation\mapping\tcpcontroller;use swoft\tcp\server\annotation\mapping\tcpmapping;use swoft\tcp\server\request;use swoft\tcp\server\response;use function strrev;/** * class democontroller * * @tcpcontroller(middlewares={demomiddleware::class}) #这个就是注解 */class democontroller{ /** * @tcpmapping("list", root=true) * @param response $response */ public function list(response $response): void { $response->setdata('[list]allow command: list, echo, demo.echo'); }
注解是什么呢?有什么作用呢?
注解其实是通过反射把注释当成代码的一部分,php可以通过reflectionclass来获取一个类的信息,从而了解类里的信息,比如获取类中的所有方法、成员变量,并包括私有方法等,并根据这些信息实现一些操作。像很多php框架,比如laravel框架就利用php的反射机制来实现依赖注入。
其实注解是配置的另一种方式,这里注解就可以起到一个配置作用。比如定义路由,定义配置定时任务,权限控制等。
在swoft中要是使用注解,需引入相关注解(annotation)类,且必须以 /** 开始并以 */ 结束,否则会导致无法解析!
aop切面编程
aop介绍
1. aspect(切面):通常是一个类,里面可以定义切入点和通知。
2. jointpoint(连接点):程序执行过程中明确的点,一般是方法的调用。
3. advice(通知):aop在特定的切入点执行的增强处理,有before,after,afterreturning,afterthrowing,around。
4. pointcut(切入点):就是嗲有通知的连接点,在程序中主要体现为书写切入点表达式。
     swoft新版的aop设计建立在php parser上面。
php-parser的项目主页是:https://github.com/nikic/php-parser
            推荐教程:《php教程》
以上就是php之微服务协程框架swoft的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product