Euclid
An event-driven framework
Install / Use
/learn @hal9000xp/EuclidREADME
E(u)clid
Version: Apr 2014 Author: Eldar Gaynetdinov License: ISC
DESCRIPTION:
E(u)clid (further in text called Euclid) is the minimalist style framework which provides the following features:
- event-driven engine based on epoll (SSL connections also supported)
- client and limited server behaviour
- buffering network IO
- global and connection based timers
- modularity
- logging
- limited support of HTTP 1.1 (permanent connections also supported)
- fixed point arithmetic
- YAML based config parser
- linked lists, hash tables etc
PHILOSOPHY:
Keep it thin. Don't use a lot of libraries except glibc. At the moment there are only three exeptions (OpenSSL, zlib, crc32). Provide enough functionality and scalability but stay in the minimalist style.
WHY IT EXISTS?
This is the public part of my personal project which I will use for algorithmic trading at NYSE, NASDAQ, CME etc. I don't like huge libraries and frameworks. That's why I decided to write this lightweight framework. I share it because somebody may find this framework interesting and useful. The name Euclid is inspired by Darren Aronofsky's film Pi. After I wrote event-driven engine I noticed similarity between (Eu)clid and (Ev)ent. That's why I call it E(u)clid.
BUILD:
You need a Linux environment with installed OpenSSL and zlib dev packages.
- To build debug version:
$ make
- To build release version:
$ make release
- To build debug version which is intended for proxy module:
$ make test_many_conns
NOTE: http proxy module is intended for testing this framework. But I still didn't implement support for many connections. That means it's needed O(n) to traverse all the connections. That's why in normal mode, I don't support many connections.
- To cleanup:
$ make clean
GETTING STARTED
-
$ make test_many_conns
-
point out your browser to: localhost:1111
NOTE: http proxy supports SSL connections and HTTP method CONNECT. So it's possible to use this proxy for another protocols (try to use Pidgin IM through this proxy).
-
$ ./euclid module:proxy no_debug_log
-
Enjoy!
To move logging to file. Invoke this before running ./euclid
$ ./core/make_tmpfs_logging_dir.sh
It creates a temporary directory in tmpfs. It's useful with debug logging.
SECURITY WARNING:
Please, generate and add your own private key and cert to core/core.cfg by adding:
####### net_cert_file: [path to cert file].crt
net_key_file: [path to key file].key #######
Otherwise, a throwaway key is used for tests. See core/core.cfg :
####### net_cert_test_file: core/server_test.crt
net_key_test_file: core/server_test.key #######
Also, you will get a warning message when Euclid started.
