[C ++ Advanced Tutorial] Entwickeln eines Server -Frameworks von Grund auf (Sylar)
Unterstützt Streaming-Protokollschreibstil und Formatierungsprotokollstil, unterstützt die Anpassung der Protokollformat, die Log-Ebene, die Mehrfach-Log-Trennung und andere Funktionen, Streaming-Protokoll-Nutzung: , Protokollebene, Protokollname, Dateiname, Zeilennummer usw.
Übernehmen Sie die Idee der Konvention aufgrund der Konfiguration. Definition ist verfügbar. Keine Notwendigkeit, separat zu analysieren. Unterstützt Änderungsbenachrichtigungsfunktion. Verwenden Sie YAML -Dateien als Konfigurationsinhalt. Unterstützt Datentypen in Ebenenformaten, unterstützt STL -Container (Vektor, Liste, Set, Karte usw.), unterstützt angepasste Typen (erfordert Serialisierung und Deserialisierungsmethoden) wie folgt:
static sylar::ConfigVar< int >::ptr g_tcp_connect_timeout =
sylar::Config::Lookup ( " tcp.connect.timeout " , 5000 , " tcp connect timeout " );Ein TCP-Timeout-Parameter ist definiert.
tcp:
connect:
timeout: 10000Das Thread -Modul verkauft einige häufig verwendete Funktionen in PTHREAD, wie Thread, Semaphor, Mutex, RWMutex, Spinlock usw., was die Entwicklung von Threads für den täglichen Gebrauch erleichtern kann. Darüber hinaus liefert C ++ 11 keine Lese- und Schreiben von Mutex, rwmutex, spinlock usw., und in hohen Parallelitätsszenarien werden diese Objekte häufig verwendet. Also habe ich mich entschlossen, Phread alleine zu verkapulieren
Coroutine: Benutzer-Modi-Thread, gleichwertig wie Threads in Threads, ist leichter. Der Socket -Haken ist in der nachfolgenden Konfiguration konfiguriert, wodurch komplexe asynchrone Aufrufe in synchronen Operationen eingebunden werden können. Reduzieren Sie die Komplexität des Schreibens der Geschäftslogik. Derzeit wird die Coroutine basierend auf ucontext_t implementiert und auf nachfolgende Weise unter Verwendung fcontext_t in boost.context implementiert.
Der Coroutine -Scheduler verwaltet die Planung von Coroutinen und wird intern als Thread -Pool implementiert, wodurch Coroutinen zwischen mehreren Threads wechseln und auch angeben können, dass Coroutinen in festen Threads ausgeführt werden. Es ist ein NM -Coroutine -Planungsmodell mit N -Threads und M -Coroutinen. Verwenden Sie jeden Thread wieder.
Inherit- und Coroutine -Scheduler, Capsulate EPOLL (Linux) und unterstützt die Timer -Funktion (mit der Verwendung von EPOLD zur Implementierung von Timer, Milliseconds -Ebene) und unterstützt die Hinzufügung, Löschung und Stornierung von Socket -Lese- und Schreibzeit. Unterstützt Einmalzeitgeber, Zyklus-Timer, Zustands-Timer und andere Funktionen
Das zugrunde liegende Hakensystem und Sockel-bezogene APIs, Socket-APIs im Zusammenhang mit IO und Sleep Series APIs. Die Einschaltsteuerung des Hakens ist fadenkörnig. Freie Wahl. Durch das Hakenmodul können einige APIs ohne asynchrone Funktionen verwendet werden, um eine asynchrone Leistung anzuzeigen. Zum Beispiel (MySQL)
Kapuliert die Socket -Klasse, bietet allen Socket -API -Funktionen, enthält die Adressklasse und bietet IPv4-, IPv6- und UNIX -Adressen. Es bietet auch Domain -Namen und IP -Auflösungsfunktionen.
Bytearray Binär -Serialisierungsmodul liefert gemeinsame Operationen zu binären Daten. Lesen und schreiben Sie grundlegende Typen int8_t, int16_t, int32_t, int64_t usw., unterstützen Sie varint, std :: string zum Lesen und Schreiben von Unterstützung, Unterstützung der Byte -Konvertierung, Unterstützung der Serialisierung zu Dateien und Deserialisierung von Dateien.
Basierend auf der Socket -Klasse fasst es eine allgemeine TCPServer -Serverklasse zusammen, bietet eine einfache API, ist einfach zu bedienen und kann schnell eine oder mehrere Adressen binden, Dienste starten, Ports anhören, Verbindungen akzeptieren, Socket -Verbindungen und andere Funktionen verarbeiten. Die Server -Implementierung bestimmter Geschäftsfunktionen kann durch Erben dieser Klasse schnell implementiert werden.
Eingekapselte Streaming Unified Interface. In einheitliche Schnittstellen in einheitliche Dateien und Sockets einkapseln. Verwenden Sie bei der Verwendung einen einheitlichen Stil. Basierend auf einem einheitlichen Stil kann es eine flexiblere Expansion bieten. Socketstream wird derzeit implementiert
Ragel (Finite -State -Maschine, Leistung vergleichbar mit der Montage), implementiert eine einfache Protokollimplementierung von HTTP/1.1 und Parsen von URI. Basierend auf Socketstream werden HTTPConnection (HTTP -Client) und HTTPSession (HTTP -Serververbindung) implementiert. HTTPServer wird basierend auf TCPServer implementiert. Bietet eine vollständige Funktion der HTTP -Client -API -Anforderungsfunktion und die Funktion HTTP Basic API Server
Nach dem Servlet von Java wird eine Reihe von Servlet -Schnittstellen implementiert, ServletDispatch und Funktionenservlet. NotFoundServlet. Unterstützt URIs präzise Matching, Fuzzy -Matching und andere Funktionen. Geben Sie zusammen mit dem HTTP -Modul HTTP -Serverfunktionen an
Kontaktinformationen: QQ: 564628276 E-Mail: [email protected] WeChat: Sylar-yin QQ Group: 8151915 (Sylar Technology Group) Personal Homepage