Skip to content

andrew-canaday/libyimmo

Repository files navigation

libyimmo

Configure, Make, and Check Server Tests Yimmo-WSGI Docker Image Create Release on Tag

Disclaimer

⚠️ WARNING: This is my long running, spare time, for fun, project. Most of it works pretty well (it's pretty fast!), but it also bears the marks of being my on-again/off-again, personal C-refresher/protocol exploration playground...

🙌 I use gunicorn for my production WSGI workloads and libwebsockets for websockets. Check 'em out!


I'm not accepting PR's, at the moment — there's a bit of refactor in flight and some procedural things to resolve re: code contributions.

Please feel free to have a peek! It's GPL'd, so you are free to fork it and hack around!

(Just mind the cobwebs).


👍 Issues are welcome, though! If you're tinkering with the library and discover a bug, have a feature request, or want to surface a usability issue, please feel free! (Documentation issues are also welcome, though the odds are high it's already on one TODO list or another).

Bonus points: if you add a label.

Introduction

Yimmo (Yup, I Made My Own) is a streaming socket framework. The I/O architecture is a traditional reactor pattern which uses libev for I/O readiness notifications.

💡 Want to get the gist in a hurry?

License

This project is licensed under version 3 of the GNU GPL (see LICENSE).

ℹ️ NOTES:

Many auxiliary files are licensed under more permissive licenses, e.g.:

  • scripts, Dockerfiles, and silly things like that (MIT)
  • example code (MIT)

Licenses should be declared pretty explicitly, but I'm sure I missed some (also on the TODO list...along with some specific GPL exemption declarations — this should all be in place for the 0.1.0 release).

Except where otherwise explicitly stated, the files contained herein are subject to the terms defined by the GNU General Public License v3, as published by the Free Software Foundation.

Documentation

Features

  • HTTP 1.0
  • HTTP 1.1
  • RFC6455 WebSockets
  • WSGI

Planned/Partial

  • MQTT (partial)
  • HTTP2 (WIP)

Building

This library is built using C11 (but attempts to accommodate other C standards using a autoconf macros and compiler extensions).

Dependencies

Libyimmo requires the following third party libraries:

Setup

Before anything else is done, your source directory has to be initialized:

./autogen.sh

Compiling

Libyimmo compilation follows the standard GNU idiom:

# To see a list of configuration options:
./configure --help

# PRO TIP: do your builds outside of the project root!
mkdir -p ./build && cd ./build
../configure --prefix=/usr/local && make && make check && make install

Gisty Benchmarks

Moved here.