Das imi-Coroutine-Entwicklungsframework ist ein auf Swoole basierendes PHP-Coroutine-Entwicklungsframework. Es unterstützt die Dienstentwicklung von Mainstream-Protokollen wie Http, Http2, WebSocket, TCP, UDP und MQTT. Es eignet sich besonders für Internet-Microservices, Instant Messaging und IM , Internet der Dinge und andere Szenarien! .
Kernkomponenten:
HttpApi, WebSocket, TCP, UDP, MQTT-Server
MySQL-Verbindungspool (Master-Slave + Lastausgleich)
Redis-Verbindungspool (Master-Slave + Lastausgleich)
Super einfach zu verwendendes ORM (Db, Redis, Tree)
Heißes Update im Millisekundenbereich
AOP
Bohnenbehälter
Cache
Lesen und Schreiben der Konfiguration (Config)
Aufzählung
Ereignis
Fassade
Bestätigen
Sperren
Protokoll
Asynchrone Aufgaben (Aufgabe)
Umweltanforderungen:
Redis、MySQL
Aktualisierungsprotokoll für das IMI-Coroutine-Entwicklungsframework:
v2.0.11
Erweitern
Hot Update unterstützt das Neuladen von Konfigurationsdateien
Server::getConnections(), Server::getConnectionCount()(#203) hinzugefügt
Unterstützt das dynamische Schreiben von Daten in das Modell, unterstützt jedoch nicht toArray() und Serialisierung
Die SQL-Überwachung unterstützt das Abfangen von Ausnahmen
Der Start der Workerman-Umgebung unterstützt die Ausgabe von Netzwerkinformationen
with() ordnet Vorladeattribute zu
Diese Version implementiert die Funktion „Modellbezogene Abfrage mit“, die die Anzahl der Abfragen reduzieren und die Leistung zugeordneter Abfragen verbessern kann.
Unterstützt die Einstellung „with=true“ in zugehörigen Anmerkungen, um das automatische Vorladen zu ermöglichen
Unterstützt die Einstellung withFields={"Specify serialized Fields"} in Assoziationsanmerkungen
Unterstützt den Aufruf der Methode with() nach Model::query(), um den vorab geladenen zugehörigen Attributnamen anzugeben
Unterstützt den Aufruf der with()-Methode nach Model::query(), um den Rückruf anzugeben, der dem vorab geladenen zugehörigen Attributnamen entspricht.
Unterstützt den Aufruf von withField() nach Model::query(), um das abgefragte Modell und die abgefragten Felder während der Serialisierung anzugeben
Model::queryRelationsList() unterstützt vorinstallierte Abfragen
Optimierung
Entwicklungserfahrung verbessern (#197)
Optimieren Sie die Dateiscanleistung unter Swoole
Kompatibel mit Szenarien, in denen der Swoole-Kurzname deaktiviert ist
Optimieren Sie AppContexts::APP_PATH so, dass es als absoluter Pfad behandelt wird
Optimieren Sie die Fehlertoleranz von Ausnahmen, die durch JSON-Fehler ausgelöst werden
Verbesserungen beim Unit-Testen (#202)
Rekonstruieren Sie das HTTP-Routing, um die Leistung zu verbessern (#200)
Optimieren Sie die Eingabeaufforderung, wenn der ArrayList-Typ nicht übereinstimmt
Legen Sie beim Generieren eines Modells die Getter-Methode des JSON-Typfelds auf eine Referenzrückgabe fest, um die Datenänderung zu erleichtern.
Optimieren Sie etwas Code
reparieren
Beheben Sie das Problem, dass die Konfigurationen @app.overrideDefaultIgnoreNamespace und @app.overrideDefaultIgnorePaths nicht wirksam werden
Das Problem wurde behoben, dass initUri() ausgelöst wurde, wenn Request setUri() ausführte.
Behebung des Problems beim Konvertieren von Berechtigungskomponenten in Baumform (#201)
Das Problem wurde behoben, bei dem SessionId als normale Sitzung behandelt wird, wenn es sich um eine leere Zeichenfolge handelt
Fehler beim Parsen leerer SessionJson behoben
SwooleRedisServerUtil reparieren
Fix: WorkermanUDP kann packetData nicht aus dem Anforderungskontext abrufen
Das Problem wurde behoben, dass die angegebenen Feldparameter der Annotationen ManyToMany, PolymorphicToMany und PolymorphicManyToMany ungültig waren.