Maison développement back-end tutoriel php Framework de coroutine de microservice PHP Swoft

Framework de coroutine de microservice PHP Swoft

Jun 17, 2020 pm 05:17 PM
php应用

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.不要再控制器写基类来写公共的变量,这样会造成数据污染,当下一个请求进来依然会请求到这个变量,因为常驻内存并且单利所以不会释放掉。

   官方文档也有提示

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/swoft
cd swoft
composer install
cp .env.example .env   #编辑 .env 文件,根据需要调整相关环境配置
Copier après la connexion

如果出现下面错误说明redis扩展没有,因为swoft需要redis扩展。

当然使用docker方式会更加简单,执行下面命令

docker run -p 18306:18306 --name swoft swoft/swoft
Copier après la connexion

在浏览器中输入 http://127.0.0.1:18306 就可以打开Swoft本地页面。

关闭和开启运行命令 docker start/stop swoft

Swoft目录及文件说明

进入容器查看swoft目录

Framework de coroutine de microservice PHP 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
Copier après la connexion
Framework de coroutine de microservice PHP Swoft

SwoftBean容器

   Bean容器是Swoft的核心,每一个Bean就是一个类对象的实例,容器就是一个工厂来存放和管理Bean。在HttpServer启动时候会扫描带有@Bean注解的类。传统的PHP是没有常驻内存的,每次请求都会重新初始化各种资源,每个对象也要重新实例化去申请内存,处理完请求后又被消耗,十分浪费资源。而Swoft在HttpServer启动后会将这些对象实例化并存放在内存中,下次请求就直接取出使用,减少对象创建资源的消耗。

   Bean容器底层是一个BeanFactory管理容器(Container)。

Swoft注解(Annotations)机制

注解是Swoft里面很多重要功能特别是AOP,IoC容器的基础。熟悉Java的朋友应该更加了解注解。 

那么注解是什么样呢?下面是Swoft的一部分代码在类、方法或成员变量上方的注释部分就有注解。

Framework de coroutine de microservice PHP 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');
    }
Copier après la connexion
Framework de coroutine de microservice PHP Swoft

   注解是什么呢?有什么作用呢?

    注解其实是通过反射把注释当成代码的一部分,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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Application PHP : utiliser la date actuelle comme nom de fichier Application PHP : utiliser la date actuelle comme nom de fichier Jun 20, 2023 am 09:33 AM

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 : Utiliser Firebase Cloud Messaging pour implémenter des fonctions de transmission de messages planifiées dans les applications PHP Tutoriel : Utiliser Firebase Cloud Messaging pour implémenter des fonctions de transmission de messages planifiées dans les applications PHP Jul 25, 2023 am 11:21 AM

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

Programmation générique en PHP et ses applications Programmation générique en PHP et ses applications Jun 22, 2023 pm 08:07 PM

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

Opération d'expression régulière Redis dans les applications PHP Opération d'expression régulière Redis dans les applications PHP May 16, 2023 pm 05:31 PM

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 Push pour implémenter la fonction de transmission de messages dans une application PHP Tutoriel : Utiliser l'extension Baidu Push pour implémenter la fonction de transmission de messages dans une application PHP Jul 26, 2023 am 09:25 AM

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 d'authentification par signature et son application en PHP Méthode d'authentification par signature et son application en PHP Aug 06, 2023 pm 07:05 PM

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é.

Journal des opérations Redis dans l'application PHP Journal des opérations Redis dans l'application PHP May 15, 2023 pm 08:10 PM

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

Application de PHP dans le développement de sites Web au niveau de l'entreprise Application de PHP dans le développement de sites Web au niveau de l'entreprise Oct 27, 2023 pm 06:52 PM

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

See all articles