• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
An Introduction to Faye
 

An Introduction to Faye

on

  • 4,768 views

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.

Statistics

Views

Total Views
4,768
Views on SlideShare
4,753
Embed Views
15

Actions

Likes
8
Downloads
32
Comments
0

5 Embeds 15

http://coderwall.com 8
http://www.linkedin.com 3
https://www.linkedin.com 2
http://www.hanrss.com 1
http://nodeslide.herokuapp.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    An Introduction to Faye An Introduction to Faye Presentation Transcript

    • Fayesimple pub/sub messaginghttp://faye.jcoglan.com/
    • • Publish-subscribe messaging system• Based on the Bayeux protocol• Servers/clients in Ruby and Javascript
    • npm install fayegem install faye
    • Server
    • var Faye = require(faye)var server = new Faye.NodeAdapter({ mount: /faye })server.listen(8000)
    • require fayeserver = Faye::RackAdapter.new(:mount => /faye)server.listen(8000)
    • Client
    • 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!})
    • <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>
    • 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! })}
    • Example App
    • • Simple chat-room application • Sinatra • Faye
    • require sinatraget / do erb :indexend
    • var Faye = require(faye)var server = new Faye.NodeAdapter({ mount: /faye })server.listen(8000)
    • <!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>
    • 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)})
    • Demo
    • Server
    • Events• handshake• subscribe• unsubscribe• publish• disconnect
    • 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 +"")})
    • 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
    • Extensions• Override default behaviour... • incoming() • outgoing()
    • Engines• Change the back-end... • faye-redis
    • 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)
    • require fayerequire faye-redisserver = Faye::RackAdapter.new( :mount => /faye, :timeout => 25, :engine => { :type => Faye::Redis, :host => localhost, :port => 6379 })server.listen(8000)