/skull

A fast to start, easy to maintain, high productive serving framework

Primary LanguageCMIT LicenseMIT

Build Status GitHub license Platform GitHub release Docker Pulls GitHub closed pull requests GitHub language count GitHub code size in bytes

Skull

Skull is an event-driven serving framework with multiple modern designs to allow user:

  • Fast to create a prototype
  • Easy to maintain even a huge project
  • Write code in lock-free environment

It helps people to build an application/server extremely fast and strong, high scalability and flexibility in application layer, and with strong performance in engine level. Read more here.

Skull can be used in generic serving layer or embedded device. E.g. web logic server, game server, etc. Want an example? Check this DNSTurbo project, and watch its Trailer on Youtube for a quick start :)

Releases

Changelog

Latest Feature Demo

Memory tracing reports:

  • Memory Usage
  • Cross-Scope Malloc/Free
  • Memory Leak

skull-trace

Documentations

How to Build

Use Ubuntu18.04 as an example. (Tested on Debian jessie/stretch, Ubuntu 14.04/16.04/18.04, alpine 3.6/3.8, RHEL6/7 and Raspbian jessie/stretch)

Basic System Requirements

Skull requires:

  • Platform: Linux
  • C/C++: Compiler supports at least c99/c++11 standards or higher
  • Python: Python3

Install Dependencies

# Install System Dependencies
sudo apt-get install autoconf libtool valgrind expect python3-dev python3-pip;
sudo pip3 install PyYAML pympler WebOb;

# Clone and Build Dependencies (For example: project folder is 'skull')
cd skull && git submodule update --init --recursive;

# Compile and install dependencies
make -j4 dep; sudo make install-dep;

Build and Install

make -j4
sudo make install

Notes:

  • To disable jemalloc, use make -j4 disable_jemalloc=true to build it
  • For some Linux Releases, we might need to use CFLAGS, CXXFLAGS, LDFLAGS to finish the build

More Options:

  • python_path: By default it's python3, but we can override it to another path for testing purpose

Docker Images

Also, the Docker images are ready now, if people don't want to waste time to set up a brand new environment, we can run the Docker image directly within 1 min :)

Assume that we've already installed Docker, then apply the following commands to pull and run the image to bring user into a development ready environment super fast:

-bash$ docker pull finaldie/skull:1.2-build
-bash$ docker run -it finaldie/skull:1.2-build

And the below table is the current images:

Tag Dockerfile Notes
1.4 (Dockerfile) 1.4 Debian runtime image
1.4-build (Dockerfile) 1.4 Debian dev/building image
1.4-ubuntu (Dockerfile) 1.4 Ubuntu runtime image
1.4-ubuntu-build (Dockerfile) 1.4 Ubuntu dev/building image
1.4-alpine (Dockerfile) 1.4 Alpine runtime image
1.4-alpine-build (Dockerfile) 1.4 Alpine dev/building image

A Quick Demo

After installing Skull into the system, run the following steps to create a Skull project, have fun :)

Create a Skull Project

skull demo 1

Notes:

  • By default, a new module contains the example code which is used to echo-back message
  • Above creation is for C++ module, type py in language selection step if needed

Playing with Skull

skull demo 2

Existing Services

Name Description
DNS Client Async DNS client for A/AAAA record
Http Client Async http client service, easy to send/receive http request/response

Other Resources

Name Description
Skull-Perf Cases Including some basic perf cases
DNSTurbo Smart DNS Client based on Skull. Trailer

Contribution and Discussion

To discuss any issues, there are some ways we can use:

To fix a bug or add a new feature, just Fork the repo, then apply the fixes/features via a PR.