Skip to content

Instantly share code, notes, and snippets.

@joyrexus
Created January 28, 2014 17:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joyrexus/8672771 to your computer and use it in GitHub Desktop.
Save joyrexus/8672771 to your computer and use it in GitHub Desktop.
RPCs with actorify
###
# quick demo using actorify for remote method invocation
#
###
net = require 'net'
actorify = require 'actorify'
# datastore of users
users =
Bob:
first: 'Bob'
last: 'Johnson'
age: 54
sex: 'male'
Mary:
first: 'Mary'
last: 'Jackson'
age: 44
sex: 'female'
Dick:
first: 'Dick'
last: 'Jones'
age: 34
sex: 'male'
# server
serve = (sock) ->
actor = actorify(sock)
getUser = (user, reply) -> reply null, users[user]
getLast = (user, reply) -> reply null, users[user].last
actor.on('get user', getUser)
actor.on('get last', getLast)
server = net.createServer(serve)
.listen(3000)
# client
sock = net.connect 3000
actor = actorify sock
getUser = (name) ->
print = (err, user) ->
console.log "#{user.first} is #{user.age} years old"
actor.send('get user', name, print)
getUser(name) for name in ['Bob', 'Mary', 'Dick']
getLast = (first) ->
print = (err, last) ->
console.log first, last
actor.send('get last', first, print)
getLast(name) for name in ['Bob', 'Mary', 'Dick']
(function() {
var actor, actorify, getLast, getUser, name, net, serve, server, sock, users, _i, _j, _len, _len1, _ref, _ref1;
net = require('net');
actorify = require('actorify');
// user database
users = {
Bob: {
first: 'Bob',
last: 'Johnson',
age: 54,
sex: 'male'
},
Mary: {
first: 'Mary',
last: 'Jackson',
age: 44,
sex: 'female'
},
Dick: {
first: 'Dick',
last: 'Jones',
age: 34,
sex: 'male'
}
};
// server
serve = function(sock) {
var actor, getLast, getUser;
actor = actorify(sock);
getUser = function(user, reply) {
reply(null, users[user]);
};
getLast = function(user, reply) {
reply(null, users[user].last);
};
actor.on('get user', getUser);
actor.on('get last', getLast);
};
server = net.createServer(serve).listen(3000);
// client
sock = net.connect(3000);
actor = actorify(sock);
getUser = function(name) {
var print;
print = function(err, user) {
console.log("" + user.first + " is " + user.age + " years old");
};
actor.send('get user', name, print);
};
_ref = ['Bob', 'Mary', 'Dick'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
name = _ref[_i];
getUser(name);
}
getLast = function(first) {
var print;
print = function(err, last) {
console.log(first, last);
};
actor.send('get last', first, print);
};
_ref1 = ['Bob', 'Mary', 'Dick'];
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
name = _ref1[_j];
getLast(name);
}
}).call(this);
{
"name": "actorify-rpc-demo",
"version": "0.0.1",
"description": "Demo how to use actorify for RPC calls.",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"actorify": "~0.1.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment