同步操作将从 三字经/facil.io 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
facil.io is a C micro-framework for web applications. facil.io includes:
facil.io provides high performance TCP/IP network services to Linux / BSD (and macOS) by using an evented design (as well as thread pool and forking support) and provides an easy solution to the C10K problem.
You can read more about facil.io on the facil.io website.
The master branch on the git
repo is the development branch and is likely to be broken at any given time (especially when working on major revisions, as I am at the moment).
Please select a release version for any production needs.
facil.io
Iodine, a Ruby HTTP/Websockets Ruby application server is powered by facil.io
- so everyone using the iodine server is running on facil.io.
Are you using facil.io
? Let me know!
#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_run(.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!\r\n", 14);
}
facil.io
in your projectIt's possible to either start a new project with facil.io
or simply add it to an existing one. GNU make
is the default build system and CMake is also supported.
facil.io
should be C99 compatible.
facil.io
To start a new project using the facil.io
framework, run the following command in the terminal (change appname
to whatever you want):
$ bash <(curl -s https://raw.githubusercontent.com/boazsegev/facil.io/master/scripts/new/app) appname
You can review the script here. In short, it will create a new folder, download a copy of the stable branch, add some demo boiler plate code and run make clean
(which is required to build the tmp
folder structure).
Next, edit the makefile
to remove any generic features you don't need, such as the DUMP_LIB
feature, the DEBUG
flag or the DISAMS
disassembler and start development.
Credit to @benjcal for suggesting the script.
Notice: The master branch is the development branch. Please select the latest release tag for the latest stable release version.
facil.io is a source code library, so it's easy to copy the source code into an existing project and start using the library right away.
The make libdump
command will dump all the relevant files in a single folder called libdump
, and you can copy them all or divide them into header ands source files.
It's also possible to compile the facil.io library separately using the make lib
command.
facil.io
as a CMake submodulefacil.io also supports both git
and CMake submodules. Credit to @OwenDelahoy (PR#8).
First, add the repository as a submodule using git
:
git submodule add https://github.com/boazsegev/facil.io.git
Then add the following line the project's CMakeLists.txt
add_subdirectory(facil.io)
facil.io
with Mesonfacil.io is available at Meson Wrap DB.
First, install the wrap file:
meson wrap install facil
Then add the following line to your project's meson.build
:
facil_dep = subproject('facil').get_variable('facil_dep')
The examples folder includes code examples for a telnet echo protocol, a Simple Hello World server, an example for Websocket pub/sub with (optional) Redis, etc'.
You can find more information on the facil.io website
The contribution guide can be found here.
Sure, why not. If you can add Solaris or Windows support to evio
and sock
, that could mean facil
would become available for use on these platforms as well.
If you encounter any issues, open an issue (or, even better, a pull request with a fix) - that would be great :-)
Hit me up if you want to:
Write tests... I always need more tests...
Help me write HPACK / HTTP2 protocol support.
Help me design / write a generic HTTP routing helper library for the http_s
struct.
If you want to help me write a new SSL/TLS library or have an SSL/TLS solution we can fit into facil
(as source code)... Note: SSL/TLS solutions should fit both client and server modes.
If you want to help promote the library, that would be great as well. Perhaps publish benchmarks or share your story.
Writing documentation into the facil.io
website would be great. I keep the source code documentation fairly updated, but the documentation should be copied to the docs
folder to get the documentation website up and running.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。