Facil.io es un micro-marco C para aplicaciones web. facil.io incluye:
Facil.io proporciona servicios de red TCP / IP de alto rendimiento a Linux / BSD (y MacOS) mediante el uso de un diseño de eventos (así como soporte de grupo de subprocesos y bifurcación) y proporciona una solución fácil para el problema C10K.
Puede leer más sobre Facil.io en el sitio web Facil.io.
La rama maestra en el Repo git es la rama de desarrollo y es probable que se rompa en un momento dado (especialmente cuando trabaja en revisiones importantes, como yo en este momento).
Seleccione una versión de lanzamiento para cualquier necesidad de producción.
facil.io Yodo, un servidor de aplicaciones Ruby HTTP/WebSockets Ruby está alimentado por facil.io , por lo que todos los que usan el servidor de yodo se ejecutan en facil.io.
¿Estás usando facil.io ? ¡Hágamelo saber!
#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 en su proyecto Es posible comenzar un nuevo proyecto con facil.io o simplemente agregarlo a uno existente. GNU make es el sistema de compilación predeterminado y CMake también es compatible.
facil.io debe ser compatible con C99.
facil.io Para iniciar un nuevo proyecto utilizando el marco facil.io , ejecute el siguiente comando en el terminal (cambiar appname a lo que desee):
$ bash <(curl -s https://raw.githubusercontent.com/boazsegev/facil.io/master/scripts/new/app) appname
Puede revisar el guión aquí. En resumen, creará una nueva carpeta, descargará una copia de la rama estable, agregue algún código de placa de caldera de demostración y ejecutará make clean (que se requiere para construir la estructura de la carpeta tmp ).
A continuación, edite el makefile para eliminar cualquier característica genérica que no necesite, como la función DUMP_LIB , el indicador DEBUG o el DISAMS Dissembler y comenzar el desarrollo.
Crédito a @benjcal por sugerir el script.
AVISO: La rama maestra es la rama de desarrollo. Seleccione la última etiqueta de lanzamiento para la última versión de lanzamiento estable.
Facil.io es una biblioteca de código fuente, por lo que es fácil copiar el código fuente en un proyecto existente y comenzar a usar la biblioteca de inmediato.
El comando make libdump arrojará todos los archivos relevantes en una sola carpeta llamada libdump , y puede copiarlos todos o dividirlos en archivos de origen de encabezado y.
También es posible compilar la biblioteca facil.io por separado utilizando el comando make lib .
facil.io como submódulo Cmake Facil.io también es compatible con los submódulos git y CMake. Crédito a @owendelahoy (PR#8).
Primero, agregue el repositorio como un submódulo usando git :
git submodule add https://github.com/boazsegev/facil.io.git
Luego agregue la siguiente línea el CMakeLists.txt del proyecto.txt
add_subdirectory(facil.io)
facil.io con MesonFacil.io está disponible en Meson Wrap DB.
Primero, instale el archivo WRAP:
meson wrap install facil
Luego agregue la siguiente línea al meson.build de su proyecto.
facil_dep = subproject('facil').get_variable('facil_dep')
La carpeta de ejemplos incluye ejemplos de código para un protocolo de eco Telnet, un servidor Hello World simple, un ejemplo para WebSocket Pub/Sub con (opcional) Redis, etc.
Puede encontrar más información en el sitio web de Facil.io
La guía de contribución se puede encontrar aquí.
Claro, ¿por qué no? Si puede agregar soporte de Solaris o Windows a evio y sock , eso podría significar facil estaría disponible para su uso en estas plataformas.
Si encuentra algún problema, abra un problema (o, aún mejor, una solicitud de extracción con una solución), eso sería genial :-)
Golpéame si quieres:
Escribir pruebas ... Siempre necesito más pruebas ...
Ayúdame a escribir soporte del protocolo HPACK / HTTP2.
Ayúdame a diseñar / escribir una biblioteca de ayuda de enrutamiento HTTP genérica para la estructura http_s .
Si desea ayudarme a escribir una nueva biblioteca SSL/TLS o tener una solución SSL/TLS, podemos caber en facil (como código fuente) ... Nota: Las soluciones SSL/TLS deben adaptarse tanto a los modos de cliente como de servidor.
Si desea ayudar a promocionar la biblioteca, también sería genial. Quizás publique puntos de referencia o comparta su historia.
Escribir documentación en el sitio web facil.io sería genial. Mantengo la documentación del código fuente bastante actualizada, pero la documentación debe copiarse en la carpeta docs para que el sitio web de documentación esté en funcionamiento.