⚠️ 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.
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?
- HTTP — minimal libyimmo_http web server
- WebSockets — minimal libyimmo_ws socket server
- WSGI (or try the docker image)
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.
- HTTP 1.0
- HTTP 1.1
- RFC6455 WebSockets
- WSGI
- MQTT (partial)
- HTTP2 (WIP)
This library is built using C11 (but attempts to accommodate other C standards using a autoconf macros and compiler extensions).
Libyimmo requires the following third party libraries:
- libev for event management
- libbsat for timeout management
- a UUID library — either linux-ng or OSSP (ax_check_uuid_api.m4 for details)
- libyaml for [optional?] yaml config parsing
Before anything else is done, your source directory has to be initialized:
./autogen.sh
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
Moved here.