Facil.io ist ein C Micro-Framework für Webanwendungen. facil.io beinhaltet:
Facil.io bietet mithilfe eines ereigneten Designs (sowie eines Thread -Pools und der Gabelunterstützung) einen leistungsstarken TCP / IP -Netzwerkdienste für Linux / BSD (und macOS) und bietet eine einfache Lösung für das C10K -Problem.
Weitere Informationen zu Facil.io finden Sie auf der Website facil.io.
Der Master -Zweig im git Repo ist der Entwicklungszweig und wird wahrscheinlich zu einem bestimmten Zeitpunkt gebrochen (insbesondere bei wichtigen Überarbeitungen, wie ich es im Moment bin).
Bitte wählen Sie eine Release -Version für die Produktionsanforderungen aus.
facil.io Iodin, ein Ruby HTTP/WebSockets Ruby Application Server wird von facil.io betrieben - so wird jeder, der den Iodserver verwendet, auf Facil.io ausgeführt.
Verwenden Sie facil.io ? Lass es mich wissen!
#include "http.h" /* the HTTP facil.io extension */
// We'll use this callback in `http_listen`, to handles HTTP requests
void on_request ( http_s * request );
// These will contain pre-allocated values that we will use often
FIOBJ HTTP_X_DATA ;
// Listen to HTTP requests and start facil.io
int main ( int argc , char const * * argv ) {
// allocating values we use often
HTTP_X_DATA = fiobj_str_new ( "X-Data" , 6 );
// listen on port 3000 and any available network binding (NULL == 0.0.0.0)
http_listen ( "3000" , NULL , . on_request = on_request , . log = 1 );
// start the server
facil_start (. threads = 1 );
// deallocating the common values
fiobj_free ( HTTP_X_DATA );
}
// Easy HTTP handling
void on_request ( http_s * request ) {
http_set_cookie ( request , . name = "my_cookie" , . name_len = 9 , . value = "data" ,
. value_len = 4 );
http_set_header ( request , HTTP_HEADER_CONTENT_TYPE ,
http_mimetype_find ( "txt" , 3 ));
http_set_header ( request , HTTP_X_DATA , fiobj_str_new ( "my data" , 7 ));
http_send_body ( request , "Hello World!rn" , 14 );
}facil.io in Ihrem Projekt Es ist möglich, entweder ein neues Projekt mit facil.io zu starten oder es einfach zu einem vorhandenen hinzuzufügen. GNU make ist das Standard -Build -System und CMake wird ebenfalls unterstützt.
facil.io sollte C99 kompatibel sein.
facil.io starten Führen Sie den folgenden Befehl im Terminal aus, um ein neues Projekt mit dem Framework facil.io auszuführen ( appname ändern, was auch immer Sie wollen):
$ bash <(curl -s https://raw.githubusercontent.com/boazsegev/facil.io/master/scripts/new/app) appname
Sie können das Skript hier überprüfen. Kurz gesagt, es erstellt einen neuen Ordner, laden Sie eine Kopie des stabilen Zweigs herunter, fügen Sie einige Demo -Kesselplattencode hinzu und rennen Sie make clean (was zum Erstellen der tmp -Ordnerstruktur erforderlich ist).
Bearbeiten Sie als Nächstes die makefile , um alle generischen Funktionen zu entfernen, die Sie nicht benötigen, z. B. die Funktion DUMP_LIB , die DEBUG -Flagge oder das DISAMS -Disassembler und die Entwicklung der Entwicklung.
Kredit an @Benjcal für die Vorschläge des Skripts.
Hinweis: Der Master -Zweig ist der Entwicklungszweig. Bitte wählen Sie das neueste Versions -Tag für die neueste stabile Versionsversion.
Facil.io ist eine Quellcode -Bibliothek, daher ist es einfach, den Quellcode in ein vorhandenes Projekt zu kopieren und die Bibliothek sofort zu verwenden.
Mit dem Befehl make libdump werden alle relevanten Dateien in einen einzelnen Ordner namens libdump fallen und Sie können sie alle kopieren oder in Header- und Quelldateien unterteilen.
Es ist auch möglich, die Facil.io -Bibliothek mit dem Befehl make lib zu kompilieren.
facil.io als CMake -Submodul Facil.io unterstützt auch sowohl git als auch CMake -Submodules. Gutschrift an @owendelahoy (PR#8).
Fügen Sie zunächst das Repository als Submodul mit git hinzu:
git submodule add https://github.com/boazsegev/facil.io.git
Fügen Sie dann die folgende Zeile der CMakeLists.txt des Projekts hinzu.txt
add_subdirectory(facil.io)
facil.iofacil.io ist bei Meson Wrap DB erhältlich.
Installieren Sie zunächst die Wrap -Datei:
meson wrap install facil
Fügen Sie dann die folgende Zeile zum meson.build Ihres Projekts hinzu:
facil_dep = subproject('facil').get_variable('facil_dep')
Der Beispiel -Ordner enthält Codebeispiele für ein Telnet -Echo -Protokoll, einen einfachen Hello World -Server, ein Beispiel für WebSocket Pub/Sub mit (optional) Redis usw. '.
Weitere Informationen finden Sie auf der Website facil.io
Der Beitragsleitfaden finden Sie hier.
Sicher, warum nicht. Wenn Sie evio und sock Solaris oder Windows unterstützen können, könnte dies bedeuten, dass facil auch für diese Plattformen zur Verfügung steht.
Wenn Sie auf Probleme stoßen, öffnen Sie ein Problem (oder noch besser eine Pull -Anfrage mit einem Fix) - das wäre großartig :-)
Schlagen Sie mich, wenn Sie wollen:
Schreiben Sie Tests ... Ich brauche immer mehr Tests ...
Hilf mir, HPack / HTTP2 -Protokollunterstützung zu schreiben.
Hilf mir, eine generische HTTP -Routing -Helferbibliothek für die http_s -Struktur zu entwerfen / zu schreiben.
Wenn Sie mir helfen möchten, eine neue SSL/TLS -Bibliothek zu schreiben oder über eine SSL/TLS -Lösung zu verfügen, können wir in facil passen (als Quellcode) ... Hinweis: SSL/TLS -Lösungen sollten sowohl Client- als auch Servermodi passen.
Wenn Sie bei der Förderung der Bibliothek helfen möchten, wäre das auch großartig. Vielleicht veröffentlichen Sie Benchmarks oder teilen Sie Ihre Geschichte.
Das Schreiben von Dokumentationen in die Website facil.io wäre großartig. Ich halte die Quellcode -Dokumentation ziemlich aktualisiert, aber die Dokumentation sollte in den docs -Ordner kopiert werden, um die Dokumentationswebsite in Betrieb zu nehmen.