celluloid/dcell
{ "createdAt": "2011-10-26T06:39:47Z", "defaultBranch": "master", "description": "UNMAINTAINED: See celluloid/celluloid#779 - Actor-based distributed objects in Ruby based on Celluloid and 0MQ", "fullName": "celluloid/dcell", "homepage": "http://celluloid.io", "language": "Ruby", "name": "dcell", "pushedAt": "2018-08-21T17:01:19Z", "stargazersCount": 592, "topics": [], "updatedAt": "2025-11-12T15:07:42Z", "url": "https://github.com/celluloid/dcell"}“Objects can message objects transparently that live on other machines over the network, and you don’t have to worry about the networking gunk, and you don’t have to worry about finding them, and you don’t have to worry about anything. It’s just as if you messaged an object that’s right next door.” —Steve Jobs describing the NeXT Portable Distributed Object system
DCell is a simple and easy way to build distributed applications in Ruby. Somewhat similar to DRb, DCell lets you easily expose Ruby objects as network services, and call them remotely just like you would any other Ruby object. However, unlike DRb all objects in the system are concurrent. You can create and register several available services on a given node, obtain handles to them, and easily pass these handles around the network just like any other objects.
DCell is a distributed extension to [Celluloid][celluloid], which provides concurrent objects for Ruby with many of the features of Erlang, such as the ability to supervise objects and restart them when they crash, and also link to other objects and receive event notifications of when they crash. This makes it easier to build robust, fault-tolerant distributed systems.
DCell uses the [0MQ][zeromq] messaging protocol which provides a robust, fault-tolerant brokerless transport for asynchronous messages sent between nodes. DCell is built on top of the [Celluloid::ZMQ][celluloid-zmq] library, which provides a Celluloid-oriented wrapper around the underlying [ffi-rzmq][ffi-rzmq] library.
Please see the DCell Wiki for more detailed documentation and usage notes.
Like DCell? [Join the Celluloid Google Group][googlegroup]
[celluloid] !: http://celluloid.io/ [zeromq] !: http://www.zeromq.org/ [celluloid-zmq] !: https://github.com/celluloid/celluloid-zmq [ffi-rzmq] !: https://github.com/chuckremes/ffi-rzmq [googlegroup] !: http://groups.google.com/group/celluloid-ruby
Is it any good?
Section titled “Is it any good?”Is It “Production Ready™”?
Section titled “Is It “Production Ready™”?”Not entirely, but eager early adopters are welcome!
Installation
Section titled “Installation”Add this line to your application’s Gemfile:
gem 'dcell'And then execute:
$ bundleOr install it yourself as:
$ gem install dcellInside of your Ruby program do:
require 'dcell'…to pull it in as a dependency.
Example
Section titled “Example”Copy and paste this into itchy.rb (or run bundle exec examples/itchy.rb):
require 'dcell'
DCell.start :id => "itchy", :addr => "tcp://127.0.0.1:9001"
class Itchy include Celluloid
def initialize puts "Ready for mayhem!" @n = 0 end
def fight @n = (@n % 6) + 1 if @n <= 3 puts "Bite!" else puts "Fight!" end endend
Itchy.supervise_as :itchysleepYou can now launch itchy with:
ruby itchy.rbNow copy and paste the following into scratchy.rb (also in examples)
require 'dcell'
DCell.start :id => "scratchy", :addr => "tcp://127.0.0.1:9002"itchy_node = DCell::Node["itchy"]
puts "Fighting itchy! (check itchy's output)"
6.times do itchy_node[:itchy].fight sleep 1endNow run scratchy side-by-side with itchy. You should see this on itchy:
$ bundle exec examples/itchy.rbReady for mayhem!I, [2012-12-25T22:52:45.362355 #74272] INFO -- : Connected to scratchyBite!Bite!Bite!Fight!Fight!Fight!This is a basic example how individual DCell::Nodes have registered Celluloid actors which can be accessed remotely by other DCell::Nodes.
Supported Ruby Versions
Section titled “Supported Ruby Versions”This library supports and is tested against the following Ruby versions:
- Ruby (MRI) 2.0, 2.1, 2.2, 2.3
- JRuby 1.7, 9000
Contributing
Section titled “Contributing”- Fork this repository on GitHub
- Make your changes and send us a pull request
- If we like them we’ll merge them
- If we’ve accepted a patch, feel free to ask for commit access
Copyright
Section titled “Copyright”Copyright (c) 2012-2016 Tony Arcieri. Distributed under the MIT License. See LICENSE.txt for further details.
