3. XMPP
Extensible Messaging and Presence Protocol
Core of Jabber IM technology
http://xmpp.org
AMQP
Advanced Message Queuing Protocol
An Open Standard for Messaging Middleware
http://amqp.org
42. Rails Plugin
require 'json'
require 'mq'
Thread.new{ EM.run{} }
class Foo
# queues message to be handed to external process
def self.queue(message)
payload = [message.to_json].pack(“m*”)
MQ.new.queue('messages').publish(payload)
end
end
43. Background Process/Task
require 'mq'
require 'xmpp4r-simple'
Thread.new{ EM.run{} }
class Foo
# redirect payload to recipient for processing
def self.run
@client ||=
Jabber::Simple.new(quot;test@example.comquot;, quot;passwordquot;)
MQ.new.queue('messages').subscribe do |payload|
@client.deliver(@recipient, payload)
end
end
end
44. External Process
require 'json'
require 'xmpp4r-simple'
class Foo
# periodically checks for and handles any messages
def self.run
@client ||=
Jabber::Simple.new(quot;test@example.comquot;, quot;passwordquot;)
EM.add_periodic_timer(3) do
@client.received_messages do |msg|
payload = msg.body
message = JSON.load(payload.unpack(quot;m*quot;).first)
# do something with message
end
end
end
end
46. use whichever you prefer and meets
your needs
use existing solution, don’t write what
you don’t have to
don’t be afraid to combine them
have fun, experiment, fuck up