João Moura
  a.k.a D3TR1
João Moura
   a.k.a D3TR1

      @joaomdmoura
    joaomdmoura.com
github.com/joaomdmoura
WebSocket
WebSocket
Socketstream + coffeescript
            X
    RoR ( Juggernaut )
Oque é socket?
Oque é socket?
- Duas vias de comunicação, uma de acesso e
outra de saída
Oque é socket?
- Duas vias de comunicação, uma de acesso e
outra de saída
Oque é socket?
- Duas vias de comunicação, uma de acesso e
outra de saída

- São vias de comunicação constante e
ineterrupta
websocket?
websocket?
É uma tecnologia projetada para browsers que
permite uma conexão bidirecional através de
   um protocolo TCP ( Transmition Control
                 Protocol )
websocket?
É uma tecnologia projetada para browsers que
permite uma conexão bidirecional através de
   um protocolo TCP ( Transmition Control
                 Protocol )
websocket?
É uma tecnologia projetada para browsers que
permite uma conexão bidirecional através de
   um protocolo TCP ( Transmition Control
                 Protocol )

            WTH?!?!1
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo comum
Fluxo websocket
Fluxo websocket
Fluxo websocket
Fluxo websocket
Fluxo websocket
Fluxo websocket
Fluxo websocket
Fluxo websocket
Possibilidades
Possibilidades
Contribui com o conceito de SPA permitindo
criar aplicações ainda mais dinâmicas com
melhor desempenho
Possibilidades
Contribui com o conceito de SPA permitindo
criar aplicações ainda mais dinâmicas com
melhor desempenho

Exemplos:
Possibilidades
Contribui com o conceito de SPA permitindo
criar aplicações ainda mais dinâmicas com
melhor desempenho

Exemplos:
- Aplicações chat
- Multiplayer online games
- Sites com conteúdo dinâmico
Possibilidades
Contribui com o conceito de SPA permitindo
criar aplicações ainda mais dinâmicas com
melhor desempenho

Exemplos:
- Aplicações chat
- Multiplayer online games
- Sites com conteúdo dinâmico
http://www.toyota.com/itsacar/
Frameworks
Frameworks
  Ruby on Rails ( RoR )
  SocketStream ( SS )
Frameworks
                      Ruby on Rails ( RoR )
                      SocketStream ( SS )

              RoR                                SS
 Utilizar a gem Juggernaut (node.js)         HTML || Jade
    Framework mais robusto             Javascript || CoffeeScript
Camada a mais de processamento               Stylus || Less
       Versatibilidade de BD               Maior velocidade
            Redis based                         NoSQL
                                             Node.js based
                                              Redis based
                                           jQuery Templates
                                              Shared Code
RoR
RoR
- Scaffold da aplicação
- Instalação do Juggernaut ( https://github.com/maccman/juggernaut )
    Dependências:
    - Redis ( advanced key-value store. It is often referred to as a data structure server since keys
can contain strings, hashes, lists, sets and sorted sets. )

      - Node.js
      - NPM ( Node Package Manager )
RoR
- Scaffold da aplicação
- Instalação do Juggernaut ( https://github.com/maccman/juggernaut )
    Dependências:
    - Redis ( advanced key-value store. It is often referred to as a data structure server since keys
can contain strings, hashes, lists, sets and sorted sets. )

      - Node.js
      - NPM ( Node Package Manager )

                        npm install -g juggernaut
                         gem install juggernaut
RoR
               redis-server
                juggernaut

         http://localhost:8080
<script src="http://localhost:8080/application.js"
 type="text/javascript" charset="utf-8"></script>


                  RAILS S

         http://localhost:3000
RoR
                  Juggernaut
CLIENT
<script type="text/javascript" charset="utf-8">
  var jug = new Juggernaut;
  jug.subscribe("SAMPAJS", function(data){
    console.log("DATA: " + data);
  });
</script>
RoR
                  Juggernaut
SERVER
require "juggernaut"

Juggernaut.publish("SAMPAJS", "Bem Vindos")

// OU

Juggernaut.publish("SAMPAJS", {:data => "Bem Vindos"})

// OU

Juggernaut.publish(["SAMPAJS", "SAMPAJS2"], ["Bem", "Vindos"])
RoR
                      Juggernaut

var jug = new Juggernaut;

jug.on("connect", function(){
  alert(“CONECTADO”)
});

jug.on("disconnect", function(){
  alert(“DESCONECTADO”)
});

jug.subscribe("SAMPAJS", function(data){
  console.log("DATA: " + data);
});
RoR
                       Juggernaut
class PlayersController < ApplicationController
  require "juggernaut"
  def update_user

     @user = { :class => "user",
               :method => "update_user",
               :data => params[:player] }
        
        Juggernaut.publish( "mobe",
                            @user ,
                            :except => params[:juggernaut_id] )
    
    render :text => "User updated"
    
  end
end
RoR
                           Juggernaut

/* JUGGERNAUT */

"   "    // USER MOVE SERVER
"   "    jug.subscribe( "mobe", function ( data )
"   "    {
"   "    " _class = data [ "class" ];
"   "    " if ( _class == "user" )
"          "" socket.callback ( user, data )
"       "});

" " // USER CHAT SERVER!
" " jug.subscribe( "mobe_chat", function ( data )
" " {
    "" socket.callback ( chat, data )
"   "});
RoR
                          Juggernaut
update_user : function( player )"
" {
" " console.log( "update_user" );
" " /* Enconding User JSON to Object */
" " player = dojo.fromJson( player );
" " var _class = this;

"   "   dojo.forEach( this.players, function( user , i )
"   "   {
"   "   " console.log( "update_user_looping" );
"   "   " if ( user[ "data" ][ "id" ] == player[ "id" ] )
"   "   " {
"   "   " " _class.remove_user( player );
"   "   " " _class.add_user( player );
"   "   " }
"   "   });
"   }
SS
SS
- Gerar nova aplicação aplicação
- Instalação do SS ( https://github.com/socketstream/socketstream )
    Dependências:
    - Redis
    - Node.js
    - NPM ( Node Package Manager )
SS
- Gerar nova aplicação aplicação
- Instalação do SS ( https://github.com/socketstream/socketstream )
    Dependências:
    - Redis
    - Node.js
    - NPM ( Node Package Manager )


               npm -g install socketstream
SS
    redis-server


 socketstream start


http://localhost:3000
SS
   Estrutura
/app         /lib         /config           /public
   /client      /client     app.coffee        /assets
      app?      /css        db.coffee
   /css         /server     events.coffee
   /server                  http.coffee
   /shared
   /views
SS
CLIENT
SS.socket.on 'disconnect', ->   console.log 'Server is down'
SS.socket.on 'reconnect', ->    console.log 'Server is up'

exports.init = ->
" SS.server.app.init ( response ) ->
" " console.log response
" "
" SS.client.user.init( “SAMPAJS”, “BEM VINDO AO SAMPAJS” )
SS
SERVER
exports.actions =
" init: (cb) ->
" " cb "Socket Connection is Okay!"


CLIENT
  user
   exports.init = ( user, message )->
     SS.publish.broadcast SAMPAJS,
     " " " {
     " " " " user: user,
     " " " " message: message
     " " " }
   SS.events.on 'SAMPAJS', ( params ) ->
      console.log “#{params[“user”]}, #{params[“message”]}”
Return
Return
#prontofalei
Return
#prontofalei
Return
                 #prontofalei



Ambos tem suas vantagens, oque vai orientar sua
  decisão são as características do seu projeto
Obrigado!
  Have a nice day!
Obrigado!
      Have a nice day!


      @joaomdmoura
    joaomdmoura.com
github.com/joaomdmoura

WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )

  • 2.
    João Moura a.k.a D3TR1
  • 3.
    João Moura a.k.a D3TR1 @joaomdmoura joaomdmoura.com github.com/joaomdmoura
  • 4.
  • 5.
  • 6.
  • 7.
    Oque é socket? -Duas vias de comunicação, uma de acesso e outra de saída
  • 8.
    Oque é socket? -Duas vias de comunicação, uma de acesso e outra de saída
  • 9.
    Oque é socket? -Duas vias de comunicação, uma de acesso e outra de saída - São vias de comunicação constante e ineterrupta
  • 10.
  • 11.
    websocket? É uma tecnologiaprojetada para browsers que permite uma conexão bidirecional através de um protocolo TCP ( Transmition Control Protocol )
  • 12.
    websocket? É uma tecnologiaprojetada para browsers que permite uma conexão bidirecional através de um protocolo TCP ( Transmition Control Protocol )
  • 13.
    websocket? É uma tecnologiaprojetada para browsers que permite uma conexão bidirecional através de um protocolo TCP ( Transmition Control Protocol ) WTH?!?!1
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
    Possibilidades Contribui com oconceito de SPA permitindo criar aplicações ainda mais dinâmicas com melhor desempenho
  • 35.
    Possibilidades Contribui com oconceito de SPA permitindo criar aplicações ainda mais dinâmicas com melhor desempenho Exemplos:
  • 36.
    Possibilidades Contribui com oconceito de SPA permitindo criar aplicações ainda mais dinâmicas com melhor desempenho Exemplos: - Aplicações chat - Multiplayer online games - Sites com conteúdo dinâmico
  • 37.
    Possibilidades Contribui com oconceito de SPA permitindo criar aplicações ainda mais dinâmicas com melhor desempenho Exemplos: - Aplicações chat - Multiplayer online games - Sites com conteúdo dinâmico http://www.toyota.com/itsacar/
  • 38.
  • 39.
    Frameworks Rubyon Rails ( RoR ) SocketStream ( SS )
  • 40.
    Frameworks Ruby on Rails ( RoR ) SocketStream ( SS ) RoR SS Utilizar a gem Juggernaut (node.js) HTML || Jade Framework mais robusto Javascript || CoffeeScript Camada a mais de processamento Stylus || Less Versatibilidade de BD Maior velocidade Redis based NoSQL Node.js based Redis based jQuery Templates Shared Code
  • 41.
  • 42.
    RoR - Scaffold daaplicação - Instalação do Juggernaut ( https://github.com/maccman/juggernaut ) Dependências: - Redis ( advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. ) - Node.js - NPM ( Node Package Manager )
  • 43.
    RoR - Scaffold daaplicação - Instalação do Juggernaut ( https://github.com/maccman/juggernaut ) Dependências: - Redis ( advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. ) - Node.js - NPM ( Node Package Manager ) npm install -g juggernaut gem install juggernaut
  • 44.
    RoR redis-server juggernaut http://localhost:8080 <script src="http://localhost:8080/application.js" type="text/javascript" charset="utf-8"></script> RAILS S http://localhost:3000
  • 45.
    RoR Juggernaut CLIENT <script type="text/javascript" charset="utf-8"> var jug = new Juggernaut; jug.subscribe("SAMPAJS", function(data){ console.log("DATA: " + data); }); </script>
  • 46.
    RoR Juggernaut SERVER require "juggernaut" Juggernaut.publish("SAMPAJS", "Bem Vindos") // OU Juggernaut.publish("SAMPAJS", {:data => "Bem Vindos"}) // OU Juggernaut.publish(["SAMPAJS", "SAMPAJS2"], ["Bem", "Vindos"])
  • 47.
    RoR Juggernaut var jug = new Juggernaut; jug.on("connect", function(){ alert(“CONECTADO”) }); jug.on("disconnect", function(){ alert(“DESCONECTADO”) }); jug.subscribe("SAMPAJS", function(data){ console.log("DATA: " + data); });
  • 48.
    RoR Juggernaut class PlayersController < ApplicationController   require "juggernaut"   def update_user      @user = { :class => "user", :method => "update_user",                :data => params[:player] }                  Juggernaut.publish( "mobe", @user , :except => params[:juggernaut_id] )          render :text => "User updated"        end end
  • 49.
    RoR Juggernaut /* JUGGERNAUT */ " " // USER MOVE SERVER " " jug.subscribe( "mobe", function ( data ) " " { " " " _class = data [ "class" ]; " " " if ( _class == "user" ) " "" socket.callback ( user, data ) " "}); " " // USER CHAT SERVER! " " jug.subscribe( "mobe_chat", function ( data ) " " {     "" socket.callback ( chat, data ) " "});
  • 50.
    RoR Juggernaut update_user : function( player )" " { " " console.log( "update_user" ); " " /* Enconding User JSON to Object */ " " player = dojo.fromJson( player ); " " var _class = this; " " dojo.forEach( this.players, function( user , i ) " " { " " " console.log( "update_user_looping" ); " " " if ( user[ "data" ][ "id" ] == player[ "id" ] ) " " " { " " " " _class.remove_user( player ); " " " " _class.add_user( player ); " " " } " " }); " }
  • 51.
  • 52.
    SS - Gerar novaaplicação aplicação - Instalação do SS ( https://github.com/socketstream/socketstream ) Dependências: - Redis - Node.js - NPM ( Node Package Manager )
  • 53.
    SS - Gerar novaaplicação aplicação - Instalação do SS ( https://github.com/socketstream/socketstream ) Dependências: - Redis - Node.js - NPM ( Node Package Manager ) npm -g install socketstream
  • 54.
    SS redis-server socketstream start http://localhost:3000
  • 55.
    SS Estrutura /app /lib /config /public /client /client app.coffee /assets app? /css db.coffee /css /server events.coffee /server http.coffee /shared /views
  • 56.
    SS CLIENT SS.socket.on 'disconnect', -> console.log 'Server is down' SS.socket.on 'reconnect', -> console.log 'Server is up' exports.init = -> " SS.server.app.init ( response ) -> " " console.log response " " " SS.client.user.init( “SAMPAJS”, “BEM VINDO AO SAMPAJS” )
  • 57.
    SS SERVER exports.actions = " init:(cb) -> " " cb "Socket Connection is Okay!" CLIENT user exports.init = ( user, message )-> SS.publish.broadcast SAMPAJS, " " " { " " " " user: user, " " " " message: message " " " } SS.events.on 'SAMPAJS', ( params ) -> console.log “#{params[“user”]}, #{params[“message”]}”
  • 58.
  • 59.
  • 60.
  • 61.
    Return #prontofalei Ambos tem suas vantagens, oque vai orientar sua decisão são as características do seu projeto
  • 62.
    Obrigado! Havea nice day!
  • 63.
    Obrigado! Have a nice day! @joaomdmoura joaomdmoura.com github.com/joaomdmoura