Student implements a framework for building asynchronous (event-driven) network applications that will be compatible with all major Ruby implementations - JRuby, MRI, Rubinius. The framework will support multiple networking adapters and provide compatibility layer for EventMachine based applications.
There are many ways to implement asynchronous applications using low-level libraries - nio4r, java nio, netty, libuv and others. The challenge is to choose the right one and be able to switch it based on a deployment model.
Framework with consistent API will be implemented that will allow swapping underlaying low-level libraries for it's operations. The framework will be compatible with all major Ruby implementations. With this in mind, the developer does not have to choose what library the application will be written for and will have the possibility to move to different deployment model in the future.
- support for all ruby implementations - JRuby, MRI, Rubinius
- nested protocol handlers like Netty (?)
- compatibility layer for legacy EventMachine based application
- swappable adapters
- java nio/nio2
- netty/mina
- nio4r
- eventmachine (?)
- binding to libuv
- binding to libev/libevent and libaio
- binding to Boos.Asio
- binding to QT Async IO
- all bindings should be be developed using ffi to support all Ruby implementations
- support for networking adapters
- support for SSL/TLS for all adapters
- support for filesystem adapters
- support for timers (multiple adapters?)
- support for running time consuming operations on background (multiple adapters?)
As a developer I choose drivers my application uses and add 2+ gems to my project - the library itself and required adapters. I will develop my application with a consistent API. When I need, I may change the adapter gems and the application will run the same. Moving among Ruby implementation may require changing drivers, but will not require changes in the application itself.
Interesting concept!!