Framework de coroutine de microservice PHP Swoft
简介
有了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.不要再控制器写基类来写公共的变量,这样会造成数据污染,当下一个请求进来依然会请求到这个变量,因为常驻内存并且单利所以不会释放掉。
官方文档也有提示

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/swoft cd swoft composer install cp .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教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans les applications PHP, nous devons parfois enregistrer ou télécharger des fichiers en utilisant la date actuelle comme nom de fichier. Bien qu'il soit possible de saisir la date manuellement, il est plus pratique, plus rapide et plus précis d'utiliser la date actuelle comme nom de fichier. En PHP, nous pouvons utiliser la fonction date() pour obtenir la date actuelle. La méthode d'utilisation de cette fonction est : date(format, timestamp) ; où format est la chaîne de format de date et timestamp est l'horodatage représentant la date et l'heure. Si ce paramètre n'est pas passé, il sera utilisé.

Tutoriel : Utilisation de Firebase Cloud Messaging pour implémenter des fonctions d'envoi de messages planifiés dans les applications PHP Présentation Firebase Cloud Messaging (FCM) est un service d'envoi de messages gratuit fourni par Google, qui peut aider les développeurs à envoyer des messages en temps réel aux applications Android, iOS et Web. Ce didacticiel vous amènera à utiliser FCM pour implémenter des fonctions de transmission de messages planifiées via des applications PHP. Étape 1 : Créez d'abord un projet Firebase, en F

1. Qu'est-ce que la programmation générique ? La programmation générique fait référence à l'implémentation d'un type de données commun dans un langage de programmation afin que ce type de données puisse être appliqué à différents types de données, permettant ainsi la réutilisation et l'efficacité du code. PHP est un langage typé dynamiquement. Il ne dispose pas d'un mécanisme de type puissant comme C++, Java et d'autres langages, il n'est donc pas facile d'implémenter une programmation générique en PHP. 2. Programmation générique en PHP Il existe deux manières d'implémenter la programmation générique en PHP : en utilisant des interfaces et en utilisant des traits. Créer une interface en PHP à l'aide d'une interface

Redis est un système de stockage clé-valeur hautes performances qui prend en charge une variété de structures de données, notamment des chaînes, des tables de hachage, des listes, des ensembles, des ensembles ordonnés, etc. Dans le même temps, Redis prend également en charge les opérations de correspondance et de remplacement d'expressions régulières sur les données de chaîne, ce qui le rend très flexible et pratique pour le développement d'applications PHP. Pour utiliser Redis pour les opérations d'expression régulière dans les applications PHP, vous devez d'abord installer l'extension phpredis. Cette extension fournit un moyen de communiquer avec le serveur Redis.

Tutoriel : Utiliser l'extension Baidu Cloud Push (BaiduPush) pour implémenter la fonction de transmission de messages dans les applications PHP Introduction : Avec le développement rapide des applications mobiles, la fonction de transmission de messages devient de plus en plus importante dans les applications. Afin de réaliser des fonctions de notification instantanée et de transmission de messages, Baidu fournit un puissant service cloud push, à savoir Baidu Cloud Push (BaiduPush). Dans ce didacticiel, nous apprendrons comment utiliser Baidu Cloud Push Extension (PHPSDK) pour implémenter la fonctionnalité de transmission de messages dans les applications PHP. Nous utiliserons Baidu Cloud

Méthode et application d'authentification par signature en PHP Avec le développement d'Internet, la sécurité des applications Web est devenue de plus en plus importante. L'authentification par signature est un mécanisme de sécurité courant utilisé pour vérifier la légitimité des demandes et empêcher tout accès non autorisé. Cet article présentera la méthode d'authentification par signature et son application en PHP, et fournira des exemples de code. 1. Qu'est-ce que l'authentification par signature ? L'authentification par signature est un mécanisme de vérification basé sur des clés et des algorithmes. Les paramètres de la demande sont cryptés pour générer une valeur de signature unique. Le serveur déchiffre ensuite la demande et vérifie la signature en utilisant le même algorithme et la même clé.

Journaux d'opérations Redis dans les applications PHP Dans les applications PHP, il est devenu de plus en plus courant d'utiliser Redis comme solution de mise en cache ou de stockage de données. Redis est une base de données de stockage clé-valeur hautes performances, rapide, évolutive, hautement disponible et dotée de diverses structures de données. Lors de l'utilisation de Redis, afin de mieux comprendre le fonctionnement de l'application et pour la sécurité des données, nous avons besoin d'un journal des opérations Redis. Le journal des opérations Redis peut enregistrer tous les clients sur le serveur Redis

En tant que l'un des langages de script côté serveur les plus populaires, PHP est largement utilisé dans le développement de sites Web d'entreprise. Sa flexibilité, son évolutivité et sa facilité d'utilisation font de PHP le langage de choix pour le développement de sites Web au niveau de l'entreprise. Cet article discutera de l'application de PHP dans le développement de sites Web au niveau de l'entreprise. Tout d’abord, PHP joue un rôle clé dans le développement de sites Web d’entreprise. Il peut être utilisé pour créer diverses fonctions, notamment l'authentification des utilisateurs, le stockage de données, l'analyse de données et la génération de rapports. PHP peut être intégré de manière transparente aux bases de données et prend en charge les données courantes
