Install the following requirements:
brew info zeromq
npm install zmq
npm install socket.io
gem install ffi-rzmq
Within the app directory run the following commands in different panes.
ruby worker.rb
node app.js
ruby ventilator.rb
var app = require('http').createServer(handler), | |
io = require('socket.io').listen(app), | |
fs = require('fs'), | |
zmq = require('zmq'), | |
receiver = zmq.socket('pull'); | |
app.listen(8080); | |
function handler (req, res) { | |
fs.readFile(__dirname + '/index.html', | |
function (err, data) { | |
if (err) { | |
res.writeHead(500); | |
return res.end('Error loading index.html'); | |
} | |
res.writeHead(200); | |
res.end(data); | |
}); | |
} | |
io.configure( function(){ | |
io.set('log level', 3); | |
io.set('transports', [ 'websocket', ]); | |
}); | |
io.sockets.on('connection', function (socket) { | |
receiver.on('message', function(message) { | |
socket.emit('marker', { 'message': escape(message) }); | |
}); | |
}); | |
receiver.bindSync("tcp://*:5558"); |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> | |
<script type="text/javascript" src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script> | |
<script> | |
var socket = io.connect('http://localhost:8080'); | |
socket.on('marker', function (data) { | |
console.log(data.message); | |
}); | |
</script> |
require 'rubygems' | |
require 'ffi-rzmq' | |
context = ZMQ::Context.new(1) | |
# Socket to send messages on | |
sender = context.socket(ZMQ::PUSH) | |
sender.bind("tcp://*:5557") | |
# The first message is "0" and signals start of batch | |
sender.send_string('0') | |
# Send 50 tasks | |
50.times do |workload| | |
$stdout << "#{workload}." | |
sender.send_string(workload.to_s) | |
sleep(0.2) | |
end | |
Kernel.sleep(1) # Give 0MQ time to deliver |
require 'rubygems' | |
require 'ffi-rzmq' | |
context = ZMQ::Context.new(1) | |
# Socket to receive messages on | |
receiver = context.socket(ZMQ::PULL) | |
receiver.connect("tcp://localhost:5557") | |
# Socket to send messages to | |
sender = context.socket(ZMQ::PUSH) | |
sender.connect("tcp://localhost:5558") | |
# Process tasks forever | |
while true | |
receiver.recv_string(msec = '') | |
$stdout << "#{msec}." | |
sender.send_string(msec) | |
end |