facil.io's API is divided into different modules, each of them belonging to one of two groups:
The Core Modules:
These modules are required for facil.io to operate properly and they include:
The facil
library - this is the hub for everything network related except socket read/write calls.
the facil
library and it's API is at the heart of everything and it is the glue that holds the different modules together.
The sock
library - an abstraction layer over POSIX sockets, which solves many of the issues and pitfalls related to socket programming.
The defer
library - a simple event / action queue. It's used internally but can be used directly as well.
The evio
library - the evented one-shot I/O module. This module is mostly for internal uses and shouldn't be accessed directly. It's API, although stable, should be considered volatile.
The FIOBJ
object library - a dynamic type system designed for handling network data (which is, by nature, dynamic).
The fio_mem
library - a simple concurrent memory allocator optimized for typical network use-cases. It can be disabled or replaced with jemalloc / tcmalloc and friends.
The Extension Modules:
These modules can be safely ignored or removed if not utilized by an application. These modules include:
http
extension - this is compound module is everything HTTP.websockets
extension - this is part of the HTTP module and extends it to support Websocket connections.The pubsub
extension - this allows messages to be exchanged using the Publish–Subscribe Pattern.
This powerful tool, which integrates seamlessly with the Websocket library, can allow an application to scale horizontally across machines, as can be demonstrated by the use of the Redis pub/sub engine.
The redis_engine
extension to the pub/sub service.
The CLI (fio_cli
) helper for handling command line arguments.
The parsers some of the extensions, such as the Redis pub/sub engine and the HTTP / Websocket extensions make use of parsers that can be used independently of the facil.io framework.