Heim Backend-Entwicklung PHP-Tutorial PHP-Microservice-Coroutine-Framework Swoft

PHP-Microservice-Coroutine-Framework Swoft

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

PHP-Microservice-Coroutine-Framework Swoft

Einführung

Mit leistungsstarken Erweiterungen wie swoole werden immer mehr Frameworks auf Basis von swoole entwickelt, Swoft ist eines davon der guten PHP-Frameworks. Swoft ist ein Annotations-Framework, das auf der nativen Coroutine von Swoole basiert. Es verfügt über einen residenten Speicher und die Kapselung anderer Swoole-Funktionen. In swoft ist ein Coroutine-Client integriert. Gleichzeitig gibt es in SWOFt viele neue Konzepte wie Aop und so weiter.

Offizielle Website-Adresse: https://www.swoft.org/

Dinge, die bei der Verwendung des Swoft-Frameworks zu beachten sind

Weil Swoft basiert Auf Swoole ist es mit gewöhnlichen PHP-Frameworks kompatibel, die immer noch sehr unterschiedlich sind und einige beachten müssen.

1. Führen Sie nicht „sleep()“ und andere Schlaffunktionen im Code aus, da dies dazu führt, dass der gesamte Prozess blockiert wird.

2. Verwenden Sie nicht die Exit/Die-Funktion, da diese dazu führt, dass der Arbeitsprozess direkt beendet wird.

3. Die Prozessisolation muss beachtet werden. Wenn der Wert einer globalen Variablen geändert wird, wird dies nicht wirksam, da sich die globale Variable in verschiedenen Prozessen befindet und der Speicherplatz isoliert ist. Die Verwendung des Swoft-Frameworks erfordert Verständnis für die Probleme der Prozessisolation. PHP-Variablen werden nicht von verschiedenen Prozessen gemeinsam genutzt, auch wenn es sich um globale Variablen handelt. Wenn verschiedene Prozesse Daten gemeinsam nutzen müssen, können Sie Tools wie Redis, Mysql, Message Queue, File, Swoole/Table, APCu (phps eigene Cache-Erweiterung), shmget (Process Communication (IPC) Shared Memory) und andere Tools verwenden. Gleichzeitig werden auch die Dateihandles verschiedener Prozesse isoliert, sodass die von der in Prozess A erstellten Socker-Verbindung geöffneten Dateien in Prozess B ungültig sind.

4. Prozessklonen: Wenn der Server startet, klont der Hauptprozess den aktuellen Prozessstatus. Von da an sind die Daten im Prozess unabhängig voneinander und beeinflussen sich nicht gegenseitig.

5. Schreiben Sie keine Basisklasse in den Controller. Dies führt zu Datenverschmutzung. Wenn die nächste Anforderung eingeht, wird diese Variable weiterhin angefordert hat einfaches Interesse, es wird nicht veröffentlicht.

Offizielle Dokumente enthalten auch Hinweise

https://www.swoft.org/documents/v2/dev-guide/dev-note /

Swoft-FrameworkInstallation

Anforderungen an die Installationsumgebung:

1. Die gcc-Version ist größer oder gleich bis 4,8.

2. PHP-Version ist größer als 7.1.

 3. Composer-Paketverwaltungstool.

4. Installieren Sie den asynchronen Redis-Client Hiredis, der nach der neuesten Version von Swoole 4.2.6 bereits integriert ist und nicht installiert werden muss.

5. Swoole-Erweiterung, das ist ein Muss.

6. Verknüpfen Sie die Iterator-Abhängigkeitsbibliothek pcre.

7. Swoole muss Coroutinen und asynchrone Redis aktivieren.

Installation von

git clone https://github.com/swoft-cloud/swoft
cd swoft
composer install
cp .env.example .env   #编辑 .env 文件,根据需要调整相关环境配置
Nach dem Login kopieren

Wenn der folgende Fehler auftritt, bedeutet dies, dass die Redis-Erweiterung nicht verfügbar ist, da SWoft die Redis-Erweiterung erfordert.

Natürlich ist es einfacher, Docker zu verwenden. Führen Sie den folgenden Befehl aus:

docker run -p 18306:18306 --name swoft swoft/swoft
Nach dem Login kopieren

Geben Sie http:/ ein Der Browser /127.0.0.1:18306 kann die lokale Swoft-Seite öffnen.

Schließen und starten Sie den laufenden Befehl Docker Start/Stopp Swoft

Swoft-Verzeichnis und Dateibeschreibung

Geben Sie den Container ein, um das Swoft-Verzeichnis anzuzeigen

PHP-Microservice-Coroutine-Framework 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
Nach dem Login kopieren
PHP-Microservice-Coroutine-Framework Swoft

SwoftBean-Container

Der Bean-Container ist der Kern von Swoft Instanz eines Klassenobjekts. Ein Container ist eine Fabrik zum Speichern und Verwalten von Beans. Wenn HttpServer startet, scannt es Klassen mit @Bean-Anmerkungen. Herkömmliches PHP verfügt nicht über residenten Speicher. Bei jeder Anforderung werden verschiedene Ressourcen neu initialisiert, und jedes Objekt muss erneut instanziiert werden, um Speicher zu erhalten. Nach der Verarbeitung der Anforderung wird es erneut verbraucht, was eine Verschwendung von Ressourcen darstellt. Swoft instanziiert diese Objekte und speichert sie im Speicher, nachdem HttpServer gestartet wurde. Sie werden herausgenommen und direkt bei der nächsten Anfrage verwendet, wodurch der Verbrauch von Objekterstellungsressourcen reduziert wird.

Die unterste Ebene des Bean-Containers ist ein BeanFactory-Verwaltungscontainer (Container).

Swoft-Annotationsmechanismus (Annotations)

Annotationen sind die Grundlage für viele wichtige Funktionen in Swoft, insbesondere AOP- und IoC-Container. Freunde, die mit Java vertraut sind, sollten mehr über Annotationen wissen.

Wie sehen also Anmerkungen aus? Das Folgende ist ein Teil des Codes von Swoft mit Anmerkungen im Kommentarbereich über der Klasse, Methode oder Mitgliedsvariablen.

PHP-Microservice-Coroutine-Framework 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');
    }
Nach dem Login kopieren
PHP-Microservice-Coroutine-Framework 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教程

Das obige ist der detaillierte Inhalt vonPHP-Microservice-Coroutine-Framework Swoft. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP-Anwendung: Aktuelles Datum als Dateinamen verwenden PHP-Anwendung: Aktuelles Datum als Dateinamen verwenden Jun 20, 2023 am 09:33 AM

In PHP-Anwendungen müssen wir manchmal Dateien mit dem aktuellen Datum als Dateinamen speichern oder hochladen. Obwohl es möglich ist, das Datum manuell einzugeben, ist es bequemer, schneller und genauer, das aktuelle Datum als Dateinamen zu verwenden. In PHP können wir die Funktion date() verwenden, um das aktuelle Datum abzurufen. Die Verwendungsmethode dieser Funktion ist: date(format, timestamp); wobei format die Datumsformatzeichenfolge und timestamp der Zeitstempel ist, der das Datum und die Uhrzeit darstellt. Wenn dieser Parameter nicht übergeben wird, wird er verwendet

Tutorial: Verwenden Sie Firebase Cloud Messaging, um geplante Nachrichten-Push-Funktionen in PHP-Anwendungen zu implementieren Tutorial: Verwenden Sie Firebase Cloud Messaging, um geplante Nachrichten-Push-Funktionen in PHP-Anwendungen zu implementieren Jul 25, 2023 am 11:21 AM

Tutorial: Verwenden von Firebase Cloud Messaging zum Implementieren geplanter Nachrichten-Push-Funktionen in PHP-Anwendungen. Übersicht Firebase Cloud Messaging (FCM) ist ein kostenloser Nachrichten-Push-Dienst von Google, der Entwicklern dabei helfen kann, Echtzeitnachrichten an Android-, iOS- und Webanwendungen zu senden. Dieses Tutorial führt Sie durch die Verwendung von FCM zur Implementierung geplanter Nachrichten-Push-Funktionen über PHP-Anwendungen. Schritt 1: Erstellen Sie zunächst ein Firebase-Projekt in F

Generische Programmierung in PHP und seinen Anwendungen Generische Programmierung in PHP und seinen Anwendungen Jun 22, 2023 pm 08:07 PM

1. Was ist generische Programmierung? Generische Programmierung bezieht sich auf die Implementierung eines gemeinsamen Datentyps in einer Programmiersprache, sodass dieser Datentyp auf verschiedene Datentypen angewendet werden kann, wodurch eine Wiederverwendung und Effizienz des Codes erreicht wird. PHP ist eine dynamisch typisierte Sprache. Sie verfügt nicht über einen starken Typmechanismus wie C++, Java und andere Sprachen, daher ist es nicht einfach, generische Programmierung in PHP zu implementieren. 2. Generische Programmierung in PHP Es gibt zwei Möglichkeiten, generische Programmierung in PHP zu implementieren: die Verwendung von Schnittstellen und die Verwendung von Merkmalen. Erstellen Sie mithilfe einer Schnittstelle eine Schnittstelle in PHP

Redis-Operation mit regulären Ausdrücken in PHP-Anwendungen Redis-Operation mit regulären Ausdrücken in PHP-Anwendungen May 16, 2023 pm 05:31 PM

Redis ist ein leistungsstarkes Schlüsselwertspeichersystem, das eine Vielzahl von Datenstrukturen unterstützt, darunter Zeichenfolgen, Hash-Tabellen, Listen, Mengen, geordnete Mengen usw. Gleichzeitig unterstützt Redis auch reguläre Ausdrucksabgleichs- und Ersetzungsvorgänge für String-Daten, was es äußerst flexibel und bequem bei der Entwicklung von PHP-Anwendungen macht. Um Redis für Operationen mit regulären Ausdrücken in PHP-Anwendungen zu verwenden, müssen Sie zuerst die Erweiterung phpredis installieren. Diese Erweiterung bietet eine Möglichkeit, mit dem Redis-Server zu kommunizieren.

Tutorial: Verwenden Sie die Baidu Push-Erweiterung, um die Nachrichten-Push-Funktion in einer PHP-Anwendung zu implementieren Tutorial: Verwenden Sie die Baidu Push-Erweiterung, um die Nachrichten-Push-Funktion in einer PHP-Anwendung zu implementieren Jul 26, 2023 am 09:25 AM

Tutorial: Verwenden Sie die Baidu Cloud Push-Erweiterung (BaiduPush), um die Nachrichten-Push-Funktion in PHP-Anwendungen zu implementieren. Einführung: Mit der schnellen Entwicklung mobiler Anwendungen wird die Nachrichten-Push-Funktion in Anwendungen immer wichtiger. Um sofortige Benachrichtigungs- und Nachrichten-Push-Funktionen zu realisieren, bietet Baidu einen leistungsstarken Cloud-Push-Dienst, nämlich Baidu Cloud Push (BaiduPush). In diesem Tutorial erfahren Sie, wie Sie die Baidu Cloud Push Extension (PHPSDK) verwenden, um die Nachrichten-Push-Funktionalität in PHP-Anwendungen zu implementieren. Wir werden Baidu Cloud verwenden

Signaturauthentifizierungsmethode und ihre Anwendung in PHP Signaturauthentifizierungsmethode und ihre Anwendung in PHP Aug 06, 2023 pm 07:05 PM

Methode und Anwendung der Signaturauthentifizierung in PHP Mit der Entwicklung des Internets ist die Sicherheit von Webanwendungen immer wichtiger geworden. Die Signaturauthentifizierung ist ein gängiger Sicherheitsmechanismus, mit dem die Legitimität von Anfragen überprüft und unbefugter Zugriff verhindert wird. In diesem Artikel werden die Signaturauthentifizierungsmethode und ihre Anwendung in PHP vorgestellt und Codebeispiele bereitgestellt. 1. Was ist Signaturauthentifizierung? Die Signaturauthentifizierung ist ein Überprüfungsmechanismus, der auf Schlüsseln und Algorithmen basiert. Die Anforderungsparameter werden verschlüsselt, um einen eindeutigen Signaturwert zu generieren. Anschließend entschlüsselt der Server die Anforderung und überprüft die Signatur mithilfe desselben Algorithmus und Schlüssels.

Redis-Vorgangsprotokoll in der PHP-Anwendung Redis-Vorgangsprotokoll in der PHP-Anwendung May 15, 2023 pm 08:10 PM

Redis-Betriebsprotokolle in PHP-Anwendungen In PHP-Anwendungen wird Redis immer häufiger als Lösung zum Zwischenspeichern oder Speichern von Daten verwendet. Redis ist eine leistungsstarke Schlüsselwertspeicherdatenbank, die schnell, skalierbar und hochverfügbar ist und über vielfältige Datenstrukturen verfügt. Wenn wir Redis verwenden, benötigen wir ein Redis-Betriebsprotokoll, um den Betrieb der Anwendung besser zu verstehen und die Datensicherheit zu gewährleisten. Das Redis-Betriebsprotokoll kann alle Clients auf dem Redis-Server aufzeichnen

Anwendung von PHP in der Website-Entwicklung auf Unternehmensebene Anwendung von PHP in der Website-Entwicklung auf Unternehmensebene Oct 27, 2023 pm 06:52 PM

Als eine der beliebtesten serverseitigen Skriptsprachen wird PHP häufig bei der Entwicklung von Websites auf Unternehmensebene verwendet. Seine Flexibilität, Skalierbarkeit und Benutzerfreundlichkeit machen PHP zur Sprache der Wahl für die Website-Entwicklung auf Unternehmensebene. In diesem Artikel wird die Anwendung von PHP bei der Website-Entwicklung auf Unternehmensebene erläutert. Zunächst einmal spielt PHP eine Schlüsselrolle bei der Entwicklung von Websites auf Unternehmensebene. Es kann zum Aufbau einer Vielzahl von Funktionen verwendet werden, darunter Benutzerauthentifizierung, Datenspeicherung, Datenanalyse und Berichterstellung. PHP kann nahtlos in Datenbanken integriert werden und unterstützt Mainstream-Daten

See all articles