You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Pcornat b3454fa2eb
Updating submodules after so long
1 month ago
external Updating submodules after so long 1 month ago
include Beginning of implementation of the network part 6 months ago
src Little mistake 6 months ago
.gitignore init 9 months ago
.gitmodules Improved doxygen theme with doxygen-awesome-css from jothepro on GitHub 6 months ago
CMakeLists.txt Correction and example 6 months ago
Doxyfile Improved doxygen theme with doxygen-awesome-css from jothepro on GitHub 6 months ago
README.md Configuration is partially made. 7 months ago
class_diagram.puml Better diagram 7 months ago
config.json Correction and example 6 months ago
main.cpp Beginning of implementation of the network part 6 months ago

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 (you can still change it in the CMakeLists).

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)