Celluloidis an easy-to-use library for building fault-tolerant
concurrent programs in Ruby:
Celluloid::IO provides evented I/O for Celluloid actors, similar to
EventMachine but with a synchronous API:
DCell lets you build distributed actor systems ala DRb that talk over
the 0MQ protocol, using theCelluloid::ZMQ library:
https://github.com/tarcieri/dcell/tree/master/celluloid-zmq
–
Celluloid 0.9.0 contains some of the most requested features:
- Celluloid::Pool provides round-robin load distribution across
configurable pool sizes - Celluloid now attempts a graceful shutdown of all actors at exit
- Celluloid#exclusive prevents Fiber-switching during calls
- Celluloid.exception_handler { |ex| … } lets you hook into custom
error reporting tools like Airbrake
–
Celluloid::IO 0.9.0 represents the first “real” release of this
library and is in a generally usable state for servers. This release
introduces three new classes:
- Celluloid::IO::TCPServer
- Celluloid::IO::TCPSocket
- Celluloid::IO::UDPSocket
These classes have partial duck-type compatibility with their cousins
from the Ruby standard library. They provide non-blocking “evented” IO
inside of Celluloid::IO actors, and blocking IO everywhere else.
This means unlike EventMachine, you don’t have to rewrite every single
library in a callback-driven style to take advantage of non-blocking
I/O. With a small change to support injection of a custom socket type,
any library presently written using the socket types from the Ruby
standard library can take advantage of nonblocking “evented” IO.
A proof-of-concept web server written with Celluloid::IO is available
here:
–
Celluloid::ZMQ 0.9.0 contains a brand-new API which wraps ffi-rzmq in
a similar manner to the way Celluloid::IO wraps Ruby’s standard
sockets. 0MQ sockets automatically take advantage of non-blocking
evented behavior inside of Celluloid::ZMQ actors.
Each of the 0MQ socket types now has its own class:
- Celluloid::ZMQ::PushSocket
- Celluloid::ZMQ::PullSocket
- Celluloid::ZMQ::ReqSocket
- Celluloid::ZMQ::RepSocket
- Celluloid::ZMQ::PubSocket
- Celluloid::ZMQ::SubSocket
DCell 0.9.0 doesn’t contain any major new features or functionality,
but does contain updates to use the new Celluloid::ZMQ API.
–
Full changelogs follow:
Celluloid 0.9.0:
- Celluloid::Pool supervises pools of actors
- Graceful shutdown which calls #terminate on all actors
- Celluloid::Actor.all returns all running actors
- Celluloid#exclusive runs a high priority block which prevents other
methods
from executing - Celluloid.exception_handler { |ex| … } defines a callback for
notifying
exceptions (for use with Airbrake, exception_notifier, etc.)
Celluloid::IO 0.9.0:
- TCPServer, TCPSocket, and UDPSocket classes in Celluloid::IO namespace
with both evented and blocking I/O support - Celluloid::IO::Mailbox.new now takes a single parameter to specify an
alternative reactor (e.g. Celluloid::ZMQ::Reactor)
Celluloid::ZMQ 0.9.0:
- New 0MQ APIs which wrap ffi-rzmq’s
- Terminate the 0MQ context at shutdown
- Use Celluloid::IO 0.9.0’s reactor injection support so we no longer
have to
subclass Celluloid::IO::Mailbox
DCell 0.9.0:
- Use new Celluloid::ZMQ APIs