An Introduction to Faye

  • 4,995 views
Uploaded on

A basic introduction to Faye (http://faye.jcoglan.com/) the pubsub messaging system. Given during a brown bag/learning lunch session at work.

A basic introduction to Faye (http://faye.jcoglan.com/) the pubsub messaging system. Given during a brown bag/learning lunch session at work.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,995
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
38
Comments
0
Likes
9

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Fayesimple pub/sub messaginghttp://faye.jcoglan.com/
  • 2. • Publish-subscribe messaging system• Based on the Bayeux protocol• Servers/clients in Ruby and Javascript
  • 3. npm install fayegem install faye
  • 4. Server
  • 5. var Faye = require(faye)var server = new Faye.NodeAdapter({ mount: /faye })server.listen(8000)
  • 6. require fayeserver = Faye::RackAdapter.new(:mount => /faye)server.listen(8000)
  • 7. Client
  • 8. var Faye = require(faye)var client = new Faye.Client(http://localhost:8000/faye)// subscribe to a channelclient.subscribe(/messages, function(message) { console.log(We got a message: + message.text)})// publish to a channelclient.publish(/messages, { text: HAI!})
  • 9. <script type="text/javascript" src="http://localhost:8000/faye/client.js"></script><script type="text/javascript"> var client = new Faye.Client(http://localhost:8000/faye) client.subscribe(/messages, function(message) { alert(We got a message: + message.text) })</script>
  • 10. require fayerequire eventmachineEM.run { client = Faye::Client.new(http://localhost:8000/faye) # subscribe to a channel client.subscribe(/messages) do |message| puts message.inspect end # publish to a channel client.publish(/messages, { text => HAI! })}
  • 11. Example App
  • 12. • Simple chat-room application • Sinatra • Faye
  • 13. require sinatraget / do erb :indexend
  • 14. var Faye = require(faye)var server = new Faye.NodeAdapter({ mount: /faye })server.listen(8000)
  • 15. <!DOCTYPE html><html><head> <title>Chattr</title> <link rel="stylesheet" href="chattr.css" type="text/css" media="screen" /></head><body> <h1>Lets Chat...</h1> <ul id="chat"></ul> <form id="new_message" action="#" method="get" accept-charset="utf-8"> <input type="text" name="message" id="message" value="" /> <input type="submit" name="send" id="send" value="Send" /> </form> <script src="jquery.min.js" charset="utf-8"></script> <script src="http://localhost:8000/faye/client.js" charset="utf-8"></script> <script src="chattr.js" charset="utf-8"></script></body></html>
  • 16. var client = new Faye.Client(http://localhost:8000/faye)// Publish a message...$(#new_message).bind(submit,function() { var now = new Date() var message = { content: $(#message).val(), timestamp: now.getHours() + ":" + now.getMinutes() } client.publish(/messages, message) $(#message).val() return false})// Subscribe to message feed...client.subscribe(/messages, function(message) { var str = str += <li> str += <span class="created_at">+ message.timestamp +</span> str += + message.content str += </li> $(#chat).append(str)})
  • 17. Demo
  • 18. Server
  • 19. Events• handshake• subscribe• unsubscribe• publish• disconnect
  • 20. var Faye = require(faye)var server = new Faye.NodeAdapter({ mount: /faye })server.listen(8000)server.bind(handshake, function(client_id) { console.log("[handshake] - client: "+ client_id +"")})server.bind(subscribe, function(client_id, channel) { console.log("[subscribe] - client: "+ client_id +", channel: "+ channel +"")})server.bind(unsubscribe, function(client_id, channel) { console.log("[unsubscribe] - client: "+ client_id +", channel: "+ channel+"")})server.bind(publish, function(client_id, channel, data) { console.log("[publish] - client: "+ client_id +", channel: "+ channel +"") console.log("[publish] - data:") console.log(data)})server.bind(disconnect, function(client_id) { console.log("[disconnect] - client: "+ client_id +"")})
  • 21. require fayerequire loggerFaye::WebSocket.load_adapter(thin)faye = Faye::RackAdapter.new(:mount => /faye, :timeout => 25)log = Logger.new(STDOUT)log.level = Logger::INFOfaye.bind(:handshake) do |client_id| log.info("[handshake] - client: #{client_id}")endfaye.bind(:subscribe) do |client_id,channel| log.info("[subscribe] - client: #{client_id}, channel: #{channel}")endfaye.bind(:unsubscribe) do |client_id,channel| log.info("[unsubscribe] - client: #{client_id}, channel: #{channel}")endfaye.bind(:publish) do |client_id,channel,data| log.info("[publish] - client: #{client_id}, channel: #{channel}, data: #{data.inspect}")endfaye.bind(:disconnect) do |client_id| log.info("[disconnect] - client: #{client_id}")endrun faye
  • 22. Extensions• Override default behaviour... • incoming() • outgoing()
  • 23. Engines• Change the back-end... • faye-redis
  • 24. var faye = require(faye)var faye_redis = require(faye-redis)var server = new faye.NodeAdapter({ mount: /faye, timeout: 25, engine: { type: faye_redis, host: localhost, port: 6379 }})server.listen(8000)
  • 25. require fayerequire faye-redisserver = Faye::RackAdapter.new( :mount => /faye, :timeout => 25, :engine => { :type => Faye::Redis, :host => localhost, :port => 6379 })server.listen(8000)