SlideShare ist ein Scribd-Unternehmen logo
1 von 121
João Moura
João Moura
     @joaomdmoura
    joaomdmoura.com
github.com/joaomdmoura
Socket Applications
What?
What?
Examples
What?
Examples
Chat, a Livestream of feed, Games or even public
APIs
What?
Examples
Chat, a Livestream of feed, Games or even public
APIs

Usual Solution
What?
Examples
Chat, a Livestream of feed, Games or even public
APIs

Usual Solution
Ajax requests in regular times to an server
( Pooling )
What?
Examples
Chat, a Livestream of feed, Games or even public
APIs

Usual Solution
Ajax requests in regular times to an server
( Pooling )
Problems
Problems
- Don’t support multiples simultaneously
connections.
Problems
- Don’t support multiples simultaneously
connections.

- Synchronous I/O, the real problem, if the server
are saving an archive or doing a query in database
this process have to wait before continue.
Solution
Solution
Multi-thread model with an asynchronous I/O
Solution
Multi-thread model with an asynchronous I/O


Reactor Pattern
Solution
Multi-thread model with an asynchronous I/O


Reactor Pattern
Instead of waiting on a response from network, use
that time to process another request.
An constant, bi-directional and
asynchronous communication flow
Action
Action
Request


Action
Request


Action             Process
Request


Action             Process
Request

          Pack
Action             Process
Socket Connection
Socket Connection


Action
Socket Connection
          Request / Pack
Action
Socket Connection
          Request / Pack
Action                       Process
Socket Connection
          Request / Pack
Action                       Process
Why?
Why?
   The deal is not about being connected
anymore, it’s about doing it faster, better and
                  different
- Amazon: 100 ms of extra load time caused a 1%
drop in sales (source: Greg Linden, Amazon).
- Amazon: 100 ms of extra load time caused a 1%
drop in sales (source: Greg Linden, Amazon).

- Google: 500 ms of extra load time caused 20%
fewer searches (source: Marrissa Mayer, Google).
- Amazon: 100 ms of extra load time caused a 1%
drop in sales (source: Greg Linden, Amazon).

- Google: 500 ms of extra load time caused 20%
fewer searches (source: Marrissa Mayer, Google).

- Yahoo!: 400 ms of extra load time caused a 5–9%
increase in the number of people who clicked
“back” before the page even loaded (source: Nicole
Sullivan, Yahoo!).
It contribute to SPA concept and increases
the performance and the UX.

Example
http://www.toyota.com/itsacar/
IMPORTANT!
IMPORTANT!
THERE IS NO SILVER
     BULLET!
How?
How?
It’s up to you!
How?
It’s up to you!
Tools ( gems, frameworks, external services )
Tools ( gems, frameworks, external services )

- Pusher
- Socket.IO
- EventMachine
- Cramp
Tools ( gems, frameworks, external services )

- Pusher             - Juggernaut
- Socket.IO          - ØMQ
- EventMachine       - Einhorn
- Cramp              - SocketStream
Redis
Redis
“Redis is an open source, 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.”
Show me the code!
Code!
Code!
Cause I love Ruby and Javascript!
Code!
        Cause I love Ruby and Javascript!

Rails ( Ruby )
Code!
         Cause I love Ruby and Javascript!

Rails ( Ruby )
Juggernaut gem - https://github.com/maccman/juggernaut
Code!
         Cause I love Ruby and Javascript!

Rails ( Ruby )
Juggernaut gem - https://github.com/maccman/juggernaut


Node.js ( Javascript )
Code!
          Cause I love Ruby and Javascript!

Rails ( Ruby )
Juggernaut gem - https://github.com/maccman/juggernaut


Node.js ( Javascript )
SocketStream framework - https://github.com/
socketstream/socketstream
WAT!
WAT!
~$ irb
>> aNameError: undefined local variable or method `a' for
main:Object!   from (irb):1! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = bNameError: undefined local variable or method `b' for
main:Object!   from (irb):2! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
~$ irb
>> aNameError: undefined local variable or method `a' for
main:Object!   from (irb):1! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = bNameError: undefined local variable or method `b' for
main:Object!   from (irb):2! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'




>> a = a => nil
~$ irb
>> aNameError: undefined local variable or method `a' for
main:Object!   from (irb):1! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = bNameError: undefined local variable or method `b' for
main:Object!   from (irb):2! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'




>> a = a => nil
~$ jsc> [] + []> [] +
{}[object Object]> {}
+ []0> {} + {}NaN
~$ jsc> [] + []> [] +
{}[object Object]> {}
+ []0> {} + {}NaN
~$ jsc
~$ jsc
> Array(16),,,,,,,,,,,,,,,
~$ jsc
> Array(16),,,,,,,,,,,,,,,

>
Array(16).join("wat")watwatwatwatwatwatwatwatwatwatwatwatwatwa
twat
~$ jsc
> Array(16),,,,,,,,,,,,,,,

>
Array(16).join("wat")watwatwatwatwatwatwatwatwatwatwatwatwatwa
twat

> Array(16).join("wat" +
1)wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1
~$ jsc
> Array(16),,,,,,,,,,,,,,,

>
Array(16).join("wat")watwatwatwatwatwatwatwatwatwatwatwatwatwa
twat

> Array(16).join("wat" +
1)wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1

> Array(16).join("wat" - 1) + "
Batman!"NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman!
~$ jsc
> Array(16),,,,,,,,,,,,,,,

>
Array(16).join("wat")watwatwatwatwatwatwatwatwatwatwatwatwatwa
twat

> Array(16).join("wat" +
1)wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1wat1

> Array(16).join("wat" - 1) + "
Batman!"NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman!
RoR w/ Juggernaut
RoR w/ Juggernaut

- Application Scaffold
RoR w/ Juggernaut

- Application Scaffold
- Juggernaut Installation
RoR w/ Juggernaut

- Application Scaffold
- Juggernaut Installation
- Dependencies:
RoR w/ Juggernaut

- Application Scaffold
- Juggernaut Installation
- Dependencies:
- Redis
RoR w/ Juggernaut

- Application Scaffold
- Juggernaut Installation
- Dependencies:
- Redis
- Node.js
RoR w/ Juggernaut

- Application Scaffold
- Juggernaut Installation
- Dependencies:
- Redis
- Node.js
- NPM ( Node Package Manager )
RoR w/ Juggernaut

- Application Scaffold
- Juggernaut Installation
- Dependencies:
- Redis
- Node.js
- NPM ( Node Package Manager )


       npm install -g juggernaut
        gem install juggernaut
> redis-server
 > juggernaut
  http://localhost:8080

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



 > rails -s
 http://localhost:3000
Client

<script type="text/javascript">

  var jug = new Juggernaut;

  jug.subscribe("RubyDay", function(data){
    console.log("DATA: " + data);
  });

</script>
Server
require "juggernaut"

Juggernaut.publish("RubyDay", "Welcome")

// OR

Juggernaut.publish("RubyDay", {:data => "Welcome"})

// OR

Juggernaut.publish(["RubySpace", "RubyMine"], {:data =>
"Welcome"})
class PeopleController < ApplicationController
  require "juggernaut"
  def say_hello
   @user = {
               :name => “You”,
               :email => “lol@lol.com”
             }
        
     Juggernaut.publish( "RubyDay", @user ,
         :except => params[:juggernaut_id] )
     Juggernaut.publish( "RubyMine", @user ,
         :except => params[:juggernaut_id] )
    render :text => "SENT!"
    
  end
end
!    !     // RubyDay Users Channel
!    !     jug.subscribe( "RubyDay", function ( data )
!    !     {
!    !     !    console.log(data[ “name” ])
!      !   });
!    !     // RubyMine Users Channel
!    !     jug.subscribe( "RubyMine", function ( data )
!    !     {
    !!     console.log(data[ “email” ])
!      !   });
SocketStream
SocketStream
- Generate a new applications- Installing SS ( https://
github.com/socketstream/socketstream )    Dependencies: -
Redis            - Node.js             - NPM ( Node Package
Manager )
SocketStream
- Generate a new applications- Installing SS ( https://
github.com/socketstream/socketstream )    Dependencies: -
Redis            - Node.js             - NPM ( Node Package
Manager )




     > npm -g install socketstream
Install the bundled (optional) dependencies
> cd <name_of_your_project>
> npm install
To start your app simply type:
> node app.js

http://localhost:3000
Structure:
Structure:

/app /
client
app? /
css /
server /
shared /
views
Structure:

/app /       /lib /
client       client /
app? /       css /
css /        server
server /
shared /
views
Structure:

/app /       /lib /     /config
client       client /   app.coffee
app? /       css /      db.coffee
css /        server     events.coffee
server /                http.coffee
shared /
views
Structure:

/app /       /lib /     /config          /public   /
client       client /   app.coffee      assets
app? /       css /      db.coffee
css /        server     events.coffee
server /                http.coffee
shared /
views
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	

       	





 Server

exports.actions =! init: (cb) ->! !                                                                                        cb "Socket
Connection is Okay!"
Client
  Index


  SS.socket.on 'disconnect', -> console.log 'Server is down'SS.socket.on 'reconnect', -> console.log 'Server is up'exports.init = ->	

   SS.client.user.init( “João”, “Welcome to Ruby
  Day!” )

  SS.events.on 'RubyDay', ( params ) ->
   console.log “#{params[“user”]}, #{params[“message”]}”




  User
   exports.init = ( user, message )->
   SS.publish.broadcast RubyDay,
   !    !    !    {
   !    !    !    !    user: user,
   !    !    !    !    message: message
   !    !    !    }
Client
  Index


  SS.socket.on 'disconnect', -> console.log 'Server is down'SS.socket.on 'reconnect', -> console.log 'Server is up'exports.init = ->	

   SS.client.user.init( “João”, “Welcome to Ruby
  Day!” )

  SS.events.on 'RubyDay', ( params ) ->
   console.log “#{params[“user”]}, #{params[“message”]}”




  User
   exports.init = ( user, message )->
   SS.publish.broadcast RubyDay,
   !    !    !    {
   !    !    !    !    user: user,
   !    !    !    !    message: message
   !    !    !    }
Return
Return

 Both have your advantages, what is make you
choose how you should use is the characteristics
               of your project
OpenSource
OpenSource

Sweet - joaomdmoura.github.com/sweet
OpenSource

Sweet - joaomdmoura.github.com/sweet
Gioco - joaomdmoura.github.com/gioco
OpenSource

Sweet - joaomdmoura.github.com/sweet
Gioco - joaomdmoura.github.com/gioco
FriendsShit - friendsshit.com
Thank you!
Thank you!

@joaomdmourajoaomdmoura.comgithub.com/
            joaomdmoura
Thank you!
            Have a nice day!


@joaomdmourajoaomdmoura.comgithub.com/
            joaomdmoura

Weitere ähnliche Inhalte

Was ist angesagt?

Building a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryBuilding a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryTatsuhiko Miyagawa
 
AnyMQ, Hippie, and the real-time web
AnyMQ, Hippie, and the real-time webAnyMQ, Hippie, and the real-time web
AnyMQ, Hippie, and the real-time webclkao
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to ServicesCraig Kerstiens
 
Django Performance Recipes
Django Performance RecipesDjango Performance Recipes
Django Performance RecipesJon Atkinson
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of DjangoJacob Kaplan-Moss
 
Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Jacob Kaplan-Moss
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSHannes Hapke
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackIgnacio Martín
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet CampPuppet
 
Exploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsExploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsMarian Marinov
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3makoto tsuyuki
 
Maintainable JavaScript 2012
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012Nicholas Zakas
 
Hybrid Web Applications
Hybrid Web ApplicationsHybrid Web Applications
Hybrid Web ApplicationsJames Da Costa
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Racksickill
 
Master the New Core of Drupal 8 Now: with Symfony and Silex
Master the New Core of Drupal 8 Now: with Symfony and SilexMaster the New Core of Drupal 8 Now: with Symfony and Silex
Master the New Core of Drupal 8 Now: with Symfony and SilexRyan Weaver
 
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017Ryan Weaver
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and PythonPiXeL16
 

Was ist angesagt? (20)

Django in the Real World
Django in the Real WorldDjango in the Real World
Django in the Real World
 
Building a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryBuilding a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQuery
 
AnyMQ, Hippie, and the real-time web
AnyMQ, Hippie, and the real-time webAnyMQ, Hippie, and the real-time web
AnyMQ, Hippie, and the real-time web
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to Services
 
Django Performance Recipes
Django Performance RecipesDjango Performance Recipes
Django Performance Recipes
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of Django
 
Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJS
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
 
Exploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsExploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your plugins
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3
 
Maintainable JavaScript 2012
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012
 
Web::Scraper
Web::ScraperWeb::Scraper
Web::Scraper
 
Plack at OSCON 2010
Plack at OSCON 2010Plack at OSCON 2010
Plack at OSCON 2010
 
Hybrid Web Applications
Hybrid Web ApplicationsHybrid Web Applications
Hybrid Web Applications
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
 
Master the New Core of Drupal 8 Now: with Symfony and Silex
Master the New Core of Drupal 8 Now: with Symfony and SilexMaster the New Core of Drupal 8 Now: with Symfony and Silex
Master the New Core of Drupal 8 Now: with Symfony and Silex
 
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and Python
 

Andere mochten auch

Rankings, you're doing it wrong
Rankings, you're doing it wrongRankings, you're doing it wrong
Rankings, you're doing it wrongJoão Moura
 
Building Products, not Apps
Building Products, not AppsBuilding Products, not Apps
Building Products, not AppsJoão Moura
 
AMS, API, RAILS and a developer, a Love Story
AMS, API, RAILS and a developer, a Love StoryAMS, API, RAILS and a developer, a Love Story
AMS, API, RAILS and a developer, a Love StoryJoão Moura
 
The Hard Task of Develop Products
The Hard Task of Develop ProductsThe Hard Task of Develop Products
The Hard Task of Develop ProductsJoão Moura
 
Network Architecture Based on Gaming
Network Architecture Based on GamingNetwork Architecture Based on Gaming
Network Architecture Based on GamingJoão Moura
 
An overview of applying to other major destinations for JIS students.
An overview of applying to other major destinations for JIS students.An overview of applying to other major destinations for JIS students.
An overview of applying to other major destinations for JIS students.Bridget Downey
 
Ey center-in-islamic-finance-for-africa-new
Ey center-in-islamic-finance-for-africa-newEy center-in-islamic-finance-for-africa-new
Ey center-in-islamic-finance-for-africa-newBenett Momory
 
Stress Test as a Culture
Stress Test as a CultureStress Test as a Culture
Stress Test as a CultureJoão Moura
 
Harness the power of wordpress
Harness the power of wordpressHarness the power of wordpress
Harness the power of wordpressJustin Ferrell
 
liquidity risk management
liquidity risk managementliquidity risk management
liquidity risk managementBenett Momory
 
islamic risk management
islamic risk managementislamic risk management
islamic risk managementBenett Momory
 
Fraccionamiento el carmen arq julio cgr junio 2012
Fraccionamiento el carmen  arq julio cgr junio 2012Fraccionamiento el carmen  arq julio cgr junio 2012
Fraccionamiento el carmen arq julio cgr junio 2012Julio Ark's
 

Andere mochten auch (16)

Rankings, you're doing it wrong
Rankings, you're doing it wrongRankings, you're doing it wrong
Rankings, you're doing it wrong
 
Building Products, not Apps
Building Products, not AppsBuilding Products, not Apps
Building Products, not Apps
 
Resume
ResumeResume
Resume
 
AMS, API, RAILS and a developer, a Love Story
AMS, API, RAILS and a developer, a Love StoryAMS, API, RAILS and a developer, a Love Story
AMS, API, RAILS and a developer, a Love Story
 
Rubrica
RubricaRubrica
Rubrica
 
The Hard Task of Develop Products
The Hard Task of Develop ProductsThe Hard Task of Develop Products
The Hard Task of Develop Products
 
Network Architecture Based on Gaming
Network Architecture Based on GamingNetwork Architecture Based on Gaming
Network Architecture Based on Gaming
 
An overview of applying to other major destinations for JIS students.
An overview of applying to other major destinations for JIS students.An overview of applying to other major destinations for JIS students.
An overview of applying to other major destinations for JIS students.
 
L'univers
L'universL'univers
L'univers
 
Ey center-in-islamic-finance-for-africa-new
Ey center-in-islamic-finance-for-africa-newEy center-in-islamic-finance-for-africa-new
Ey center-in-islamic-finance-for-africa-new
 
Bonds & sukuks
Bonds & sukuksBonds & sukuks
Bonds & sukuks
 
Stress Test as a Culture
Stress Test as a CultureStress Test as a Culture
Stress Test as a Culture
 
Harness the power of wordpress
Harness the power of wordpressHarness the power of wordpress
Harness the power of wordpress
 
liquidity risk management
liquidity risk managementliquidity risk management
liquidity risk management
 
islamic risk management
islamic risk managementislamic risk management
islamic risk management
 
Fraccionamiento el carmen arq julio cgr junio 2012
Fraccionamiento el carmen  arq julio cgr junio 2012Fraccionamiento el carmen  arq julio cgr junio 2012
Fraccionamiento el carmen arq julio cgr junio 2012
 

Ähnlich wie Socket applications

Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyFabio Akita
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRaymond Camden
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryTatsuhiko Miyagawa
 
Cross Domain Web
Mashups with JQuery and Google App Engine
Cross Domain Web
Mashups with JQuery and Google App EngineCross Domain Web
Mashups with JQuery and Google App Engine
Cross Domain Web
Mashups with JQuery and Google App EngineAndy McKay
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyLaunchAny
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesLindsay Holmwood
 
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey BuzdinMarvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey BuzdinJava User Group Latvia
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - DeploymentFabio Akita
 
Sinatra and JSONQuery Web Service
Sinatra and JSONQuery Web ServiceSinatra and JSONQuery Web Service
Sinatra and JSONQuery Web Servicevvatikiotis
 
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜崇之 清水
 
Effectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby ConfEffectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby Confneal_kemp
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmsom_nangia
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmwilburlo
 

Ähnlich wie Socket applications (20)

Sinatra for REST services
Sinatra for REST servicesSinatra for REST services
Sinatra for REST services
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoop
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Cross Domain Web
Mashups with JQuery and Google App Engine
Cross Domain Web
Mashups with JQuery and Google App EngineCross Domain Web
Mashups with JQuery and Google App Engine
Cross Domain Web
Mashups with JQuery and Google App Engine
 
Sprockets
SprocketsSprockets
Sprockets
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in Ruby
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey BuzdinMarvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Sprockets
SprocketsSprockets
Sprockets
 
Load testing with Blitz
Load testing with BlitzLoad testing with Blitz
Load testing with Blitz
 
Sinatra and JSONQuery Web Service
Sinatra and JSONQuery Web ServiceSinatra and JSONQuery Web Service
Sinatra and JSONQuery Web Service
 
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
 
Effectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby ConfEffectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby Conf
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 

Mehr von João Moura

Gamification - Uma nova Fronteira
Gamification - Uma nova FronteiraGamification - Uma nova Fronteira
Gamification - Uma nova FronteiraJoão Moura
 
Desenvolvendo Produtos, Não Aplicativos
Desenvolvendo Produtos, Não AplicativosDesenvolvendo Produtos, Não Aplicativos
Desenvolvendo Produtos, Não AplicativosJoão Moura
 
Construindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load TimeConstruindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load TimeJoão Moura
 
Rankings, você esta fazendo isso errado
Rankings, você esta fazendo isso erradoRankings, você esta fazendo isso errado
Rankings, você esta fazendo isso erradoJoão Moura
 
Gamification Theory and Gioco
Gamification Theory and GiocoGamification Theory and Gioco
Gamification Theory and GiocoJoão Moura
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 

Mehr von João Moura (6)

Gamification - Uma nova Fronteira
Gamification - Uma nova FronteiraGamification - Uma nova Fronteira
Gamification - Uma nova Fronteira
 
Desenvolvendo Produtos, Não Aplicativos
Desenvolvendo Produtos, Não AplicativosDesenvolvendo Produtos, Não Aplicativos
Desenvolvendo Produtos, Não Aplicativos
 
Construindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load TimeConstruindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load Time
 
Rankings, você esta fazendo isso errado
Rankings, você esta fazendo isso erradoRankings, você esta fazendo isso errado
Rankings, você esta fazendo isso errado
 
Gamification Theory and Gioco
Gamification Theory and GiocoGamification Theory and Gioco
Gamification Theory and Gioco
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 

Kürzlich hochgeladen

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Kürzlich hochgeladen (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Socket applications

Hinweis der Redaktion

  1. My name, where and how you can found me, joke in Italian.\n- I&apos;ve been a developer for 6 years\n- Love open source development\n
  2. My name, where and how you can found me, joke in Italian.\n- I&apos;ve been a developer for 6 years\n- Love open source development\n
  3. I&amp;#x2019;m from Brazil! A Great country, let they know a little bit about it.\n
  4. This is S&amp;#xE3;o Paulo, where I live and work, a really big town, actually the sixth largest in the world\n
  5. Actually I&amp;#x2019;m working on CodeMiner42 as Consultant and System Engineer developing Ruby applications, the propose is a true agile software development without bureaucracy and focused in Startups\n
  6. Well now you already know who I&amp;#x2019;m, let&amp;#x2019;s gonna talk about what I came to speak to you guys, Socket Applications. In this talk I will answer three basic questions that we developers should ask ourself before start to use some technology, What, Why and How.\n
  7. There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
  8. There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
  9. There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
  10. There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
  11. There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
  12. \n
  13. Basically we have two problems:\n\nRails and most of used languages to develop web applications don&amp;#x2019;t support multiples simultaneously connections.\nAn there is also the synchronous I/O, the real problem, if the server are saving an archive or doing a query in database this process have to wait before continue.\n
  14. Basically we have two problems:\n\nRails and most of used languages to develop web applications don&amp;#x2019;t support multiples simultaneously connections.\nAn there is also the synchronous I/O, the real problem, if the server are saving an archive or doing a query in database this process have to wait before continue.\n
  15. The solution is use a multi-thread model with an asynchronous I/O, change the procedural structure for another pattern, for a Reactor, an event handling pattern, as used by Event Machine. (Heroku, GitHub, 37signals, Engine Yard, PostRank). The idea behind Reactor pattern is instead of waiting on a response from network, use that time to process another request.\nIntelligently preload data.\n
  16. The solution is use a multi-thread model with an asynchronous I/O, change the procedural structure for another pattern, for a Reactor, an event handling pattern, as used by Event Machine. (Heroku, GitHub, 37signals, Engine Yard, PostRank). The idea behind Reactor pattern is instead of waiting on a response from network, use that time to process another request.\nIntelligently preload data.\n
  17. The solution is use a multi-thread model with an asynchronous I/O, change the procedural structure for another pattern, for a Reactor, an event handling pattern, as used by Event Machine. (Heroku, GitHub, 37signals, Engine Yard, PostRank). The idea behind Reactor pattern is instead of waiting on a response from network, use that time to process another request.\nIntelligently preload data.\n
  18. An this is exactly what socket is about, the word &quot;socket&quot; as we know it, have some aspects there are related with the socket technology, basically a socket connection have the same concept of a socket when plugged, there&apos;s two fluxes , one that transmit the power to the machine and other that send back the power to the plug.\n
  19. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  20. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  21. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  22. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  23. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  24. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  25. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  26. A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&amp;#x2019;t figure out who is every client.\n
  27. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  28. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  29. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  30. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  31. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  32. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  33. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  34. When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won&apos;t see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
  35. Why should I develop applications using socket technology? \n- The internet is not about being connected anymore, it&amp;#x2019;s about do it better, faster and simpler. \n- As faster as new technologies are coming the market are looking for innovation.\n- Users are looking everyday for applications that can offer a new way of getting and share information.\n- I&apos;m not talking only about websites, games or any other specific kind of application, I&apos;m talking about user experience\n- Sockets is one of the technologies that make possible a new range of applications, a network socket is an endpoint of an inter-process communication flow across a computer network.\n
  36. Web developers are still stuck in the request/response mindset. every UI interaction results in a delay before another interaction can be performed. That&apos;s the process we&apos;ve used our entire careers so it&apos;s no wonder most developers are blinkered to the alternatives.\n\nSpeed matters; a lot. Or to be precise, perceived speed matters a lot\n\ndevelopers still insist on using the request/response model. Even the introduction of Ajax hasn&apos;t improved the scene much, replacing blank loading states with spinners.\nUsers would just like to use your application without any interruptions.\n
  37. Web developers are still stuck in the request/response mindset. every UI interaction results in a delay before another interaction can be performed. That&apos;s the process we&apos;ve used our entire careers so it&apos;s no wonder most developers are blinkered to the alternatives.\n\nSpeed matters; a lot. Or to be precise, perceived speed matters a lot\n\ndevelopers still insist on using the request/response model. Even the introduction of Ajax hasn&apos;t improved the scene much, replacing blank loading states with spinners.\nUsers would just like to use your application without any interruptions.\n
  38. Web developers are still stuck in the request/response mindset. every UI interaction results in a delay before another interaction can be performed. That&apos;s the process we&apos;ve used our entire careers so it&apos;s no wonder most developers are blinkered to the alternatives.\n\nSpeed matters; a lot. Or to be precise, perceived speed matters a lot\n\ndevelopers still insist on using the request/response model. Even the introduction of Ajax hasn&apos;t improved the scene much, replacing blank loading states with spinners.\nUsers would just like to use your application without any interruptions.\n
  39. Contribute for Single Page Applications concept.\nMore dynamic application with a better performance.\n
  40. \n
  41. There is a lot of ways to develop a socket application.\nBut you must start to think different, you must understand that isn&amp;#x2019;t all applications that can be converted to a client side app, you must start to think about architecture, about DCI (Data Context and Interaction) and patterns. The most useful pattern now a days are RestFull applications with an json interface\n
  42. There is a lot of ways to develop a socket application.\nBut you must start to think different, you must understand that isn&amp;#x2019;t all applications that can be converted to a client side app, you must start to think about architecture, about DCI (Data Context and Interaction) and patterns. The most useful pattern now a days are RestFull applications with an json interface\n
  43. There is a lot of tools that can provide you a simple or very complex environment to implement or even develop a whole application using frameworks focused in sockets applications.\n\nAn this are just some of the options, some of those are language independent, others use an external service as Pusher, there is the Juggernaut gem ( from Alex Maccaw ), and even a whole framework, the SocketStream a Node.js based solution, and another Cramp build on top of EventMachine for Ruby.\n\nThe most of those solutions have some relation with Redis.\n
  44. There is a lot of tools that can provide you a simple or very complex environment to implement or even develop a whole application using frameworks focused in sockets applications.\n\nAn this are just some of the options, some of those are language independent, others use an external service as Pusher, there is the Juggernaut gem ( from Alex Maccaw ), and even a whole framework, the SocketStream a Node.js based solution, and another Cramp build on top of EventMachine for Ruby.\n\nThe most of those solutions have some relation with Redis.\n
  45. You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.\n\nIn order to achieve its outstanding performance, Redis works with an in-memory dataset. \n\nDepending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.\n
  46. You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.\n\nIn order to achieve its outstanding performance, Redis works with an in-memory dataset. \n\nDepending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.\n
  47. You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.\n\nIn order to achieve its outstanding performance, Redis works with an in-memory dataset. \n\nDepending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.\n
  48. Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &amp;#xD8;MQ but I don&amp;#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&amp;#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
  49. Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &amp;#xD8;MQ but I don&amp;#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&amp;#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
  50. Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &amp;#xD8;MQ but I don&amp;#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&amp;#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
  51. Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &amp;#xD8;MQ but I don&amp;#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&amp;#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
  52. Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &amp;#xD8;MQ but I don&amp;#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&amp;#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
  53. You guys know what WAT means?\n
  54. Lets talk about Ruby\n
  55. Lets talk about Ruby\n
  56. Lets talk about Ruby\n
  57. Lets talk about Javascript\n
  58. Lets talk about Javascript\n
  59. \n
  60. Lets stop talk about languages that sucks lets talk about javascript\n
  61. Lets stop talk about languages that sucks lets talk about javascript\n
  62. Lets stop talk about languages that sucks lets talk about javascript\n
  63. Lets stop talk about languages that sucks lets talk about javascript\n
  64. Lets stop talk about languages that sucks lets talk about javascript\n
  65. Lets stop talk about languages that sucks lets talk about javascript\n
  66. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  67. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  68. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  69. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  70. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  71. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  72. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. SocketStream is an open source Node.js web framework dedicated to building single-page realtime apps.Whether you&apos;re building a group chat app, multiplayer game, trading platform, sales dashboard, or any other realtime web app, SocketStream gets you up and running quickly by providing essential functionality and a rapid development environment.\nOn the client-side, you&apos;re free to use all the technologies you already know and love - such as jQuery, Mustache, Backbone.js, Ember.js, Angular.js\nSocketStream apps can easily be deployed to Nodejitsu, EC2 servers or any other hosting platform supporting websockets (sadly that excludes Heroku for the moment).\nWorks great with Chrome, Safari, Firefox 6 (and above) using native websockets\n\nWhen you run in production mode these files are automatically packed and minified into one CSS, JS and HTML file per-client.\n\nOptionally use Redis for fast session retrieval, pub/sub, list of users online, and any other data your app needs instantly\n
  79. SocketStream is an open source Node.js web framework dedicated to building single-page realtime apps.Whether you&apos;re building a group chat app, multiplayer game, trading platform, sales dashboard, or any other realtime web app, SocketStream gets you up and running quickly by providing essential functionality and a rapid development environment.\nOn the client-side, you&apos;re free to use all the technologies you already know and love - such as jQuery, Mustache, Backbone.js, Ember.js, Angular.js\nSocketStream apps can easily be deployed to Nodejitsu, EC2 servers or any other hosting platform supporting websockets (sadly that excludes Heroku for the moment).\nWorks great with Chrome, Safari, Firefox 6 (and above) using native websockets\n\nWhen you run in production mode these files are automatically packed and minified into one CSS, JS and HTML file per-client.\n\nOptionally use Redis for fast session retrieval, pub/sub, list of users online, and any other data your app needs instantly\n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
  89. \n
  90. \n
  91. \n
  92. My name, where and how you can found me, joke in Italian.\n- I&apos;ve been a developer for 6 years\n- Love open source development\n
  93. My name, where and how you can found me, joke in Italian.\n- I&apos;ve been a developer for 6 years\n- Love open source development\n
  94. My name, where and how you can found me, joke in Italian.\n- I&apos;ve been a developer for 6 years\n- Love open source development\n