external | ||
include | ||
src | ||
.gitignore | ||
.gitmodules | ||
class_diagram.puml | ||
CMakeLists.txt | ||
config.json | ||
Doxyfile | ||
main.cpp | ||
README.md |
A C++ Gemini server
Introduction
As I saw other implementations in Rust but no C++ to compete, I felt that I had to do something ;-). It is also a chance for me and a friend (Brumaire) to practice C++ and to try to get as much performance as possible (my speciality is HPC so… Yeah).
Design
I use PlantUML to do the class diagram for the design. It's a work in progress.
Goal
What we want is a high performance server using asynchrony at first, and then maybe multi-threading to have the maximum possible performance.
Configuration
WIP
The configuration of the server is made through a JSON file config.json
. The JSON parser is simdjson directly integrated
in our source code.
Structure of the file
- content
- path : string, folder to the content of your site.
- cache
- enable_cache: bool, to enable cache of files or not
- cache_size : unsigned int, the maximum size in bytes to put in cache
- ssl
- pem_path : string
- cert_path : string
Dependencies
It uses a bundled version of spdlog
as a git submodule, but it does not use the fmt
lib that is inside spdlog
.
Documentation
The doc of the code is made with doxygen, the Doxyfile
is at the root of the repo.
TODO/features
- Possibility of an applicative gateway (like CGI for example)
- Content in RAM cache
- Asynchronous (boost ASIO deals with it)