SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
“Because as rapid as the arrival of
     networked pull media was,
     the second act - networked push
     media - is coming even faster. ”
                           WIRED Magazine
                           March 1997




Thursday, March 11, 2010
Push
                                A 2010 case study with
                           the NGINX HTTP Push Module,
                               Ruby on Rails, and friends



                                    Luke Melia




Thursday, March 11, 2010
Who’s this guy?
                ★ VP, Engineering at weplay.com
                ★ Agilist
                ★ nyc.rb’er since ~2006
                ★ Ruby in Practice contributor
                ★ Interested in startup tech leadership
                ★ Beach volleyball player
                ★ Dad

Thursday, March 11, 2010
What’s this talk?
              ★ The goal and the problem
              ★ A quick survey of solutions
              ★ About the NGINX HTTP Push Module
              ★ How to use it with Ruby, by example
              ★ Gotchyas
              ★Q &A

Thursday, March 11, 2010
The Goal
    ★ Immediate encouragement
           of positive on-site actions
    ★ “Points!”


Thursday, March 11, 2010
+10


Thursday, March 11, 2010
Constraints
                 ★ Don’t want to figure out points earned
                           while processing the request (offload it to a
                           background work queue)
                 ★ Do want to inform about points earned
                           through another user’s actions
                 ★ Don’t want to wait for a second page load




Thursday, March 11, 2010
Pure push
               doesn’t exist
             on the open web

Thursday, March 11, 2010
XMPP                  WebSockets

                           Push-like
                           solutions
      Streaming                   Comet
Thursday, March 11, 2010
★       Don’t close the connection after
                  sending down the page
          ★       multipart/x-mixed-replace
          ★       Supported in non-Microsoft
                  browsers only


      Streaming
Thursday, March 11, 2010
XMPP
          ★       Designed for presence and messaging
          ★       Browsers don’t speak XMPP natively
          ★       BOSH
          ★       Hemlock: Flex + ejabberd, by NYC’s
                  Mint Digital

Thursday, March 11, 2010
★       Push data over a long held Ajax
                  request using browser-native
                  technologies
          ★       Bayeaux protocol
          ★       Long-polling Ajax


                                         Comet
Thursday, March 11, 2010
WebSockets
          ★       HTML 5
          ★       Full-duplex single socket connection
                  between browser and server
          ★       ex: ws://websockets.org:8787
          ★       very limited browser support today

Thursday, March 11, 2010
XMPP               WebSockets




      Streaming               Comet
Thursday, March 11, 2010
ejabberd                       Sunshowers


                                             Rainbows!
                             Servers              Cramp


     Juggernaut                    NGINX HTTP Push Module

                           Orbited
                             Tornado
                                Diesel          Faye

Thursday, March 11, 2010
NGINX HTTP Push Module

                    ★      Turns NGINX into a Comet server
                    ★      “A useful tool with a boring name.”
                    ★      By Leo P
                    ★      http://pushmodule.slact.net/
                    ★      Currently at 0.692β


Thursday, March 11, 2010
Basic HTTP Push
                                Relay Protocol
                           ★   Subscriber locations
                               ★   HTTP GET with channel ID
                           ★   Publisher locations
                               ★   HTTP POST with channel ID
                           ★   POSTed data is passed through,
                               becoming the response to the
                               subscriber’s GET

Thursday, March 11, 2010
Diagramming the simple case
                                                  BACK-END
                                                  PROCESS



                                 2. HTTP POST

                                                       Publisher endpoint


                                                                            3. POST BODY
                                                     NGINX
                                                                            IS ROUTED BY
                                                                             CHANNEL ID
                                         Subscriber endpoint



                                                               4. RESPONSE IS
                                1. HTTP GET                     DATA FROM
                                                                 POST BODY


                                                End User




Thursday, March 11, 2010
Channel
                           Concurrency Styles

                             ★ Broadcast

                             ★ Last-in, first-out

                             ★ First-in, last-out




Thursday, March 11, 2010
Subscriber config

             # public long‐polling endpoint
             location /rt/notifications {
               push_subscriber;
               set $push_channel_id $arg_id;
               push_subscriber_concurrency last;
             }

Thursday, March 11, 2010
Publisher config
       # internal publish endpoint
       # (keep it private / protected)
       location /rt/publish {
         push_publisher;
         set $push_channel_id $arg_id;
         push_store_messages on;
         push_message_timeout 5m;
         push_max_message_buffer_length 5;
         push_min_message_buffer_length 0;
         push_delete_oldest_received_message on;
       }
Thursday, March 11, 2010
Diagram with storage
                                                    BACK-END
                                                    PROCESS



                                   1. HTTP POST


                             4. MESSAGE                  Publisher endpoint

                                                                               2. POST BODY
                            IS RETRIEVED
                                                                                 IS QUEUED
                            FROM QUEUE                 NGINX
                                                                   Queue
                                                                              BY CHANNEL ID
                           BY CHANNEL ID
                                           Subscriber endpoint



                                                                 5. RESPONSE IS
                                 3. HTTP GET                      DATA FROM
                                                                     QUEUE


                                                  End User




Thursday, March 11, 2010
Code it up.




Thursday, March 11, 2010
Client-side Gotchas
                    ★      Javascript blocking
                           ★   Put it in an iframe
                    ★      Per domain connection limit
                           ★   use subdomain, with JSONP



Thursday, March 11, 2010
Server-side Gotchas
                ★          “Too many open connections”
                      ★    Reduce worker_connections to less
                           than ulimit -n
                      ★    Increase worker_processes to give
                           you enough total connection to
                           serve your users
                      ★    Ours: worker_processes 24
                                 worker_connections 960
Thursday, March 11, 2010
Testing


                    ★      Fake Publisher for in-memory
                           cucumber scenarios
                    ★      Run selenium scenarios through
                           NGINX to incorporate actual
                           push module behavior

Thursday, March 11, 2010
NGINX Configuration
                   Management

                           ★Template   it
                           ★Version
                                  it
                           ★Automate it


Thursday, March 11, 2010
The Future
                           ★   Multiplexing: subscribe
                               to more than one
                               channel
                           ★   Use Redis as a
                               message store
                           ★   Convention-based
                               approach for raising
                               javascript events


Thursday, March 11, 2010
Questions?




Thursday, March 11, 2010

Contenu connexe

Similaire à Http Push

BRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQLBRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQLAndreas Jung
 
Intro to WebSockets and Comet
Intro to WebSockets and CometIntro to WebSockets and Comet
Intro to WebSockets and Cometdylanks
 
HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017
HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017
HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017Codemotion
 
A Network Architecture for the Web of Things
A Network Architecture for the Web of ThingsA Network Architecture for the Web of Things
A Network Architecture for the Web of Thingsbenaam
 
The Reluctant SysAdmin : 360|iDev Austin 2010
The Reluctant SysAdmin : 360|iDev Austin 2010The Reluctant SysAdmin : 360|iDev Austin 2010
The Reluctant SysAdmin : 360|iDev Austin 2010Voxilate
 
How To Build A Web Service
How To Build A Web ServiceHow To Build A Web Service
How To Build A Web ServiceMoses Ngone
 
Distributed Social Networking
Distributed Social NetworkingDistributed Social Networking
Distributed Social NetworkingBastian Hofmann
 
SeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocket
SeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocketSeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocket
SeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocketProcessOne
 
Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands Bastian Hofmann
 
PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)Ivo Jansch
 
Large Files without the Trials
Large Files without the TrialsLarge Files without the Trials
Large Files without the TrialsSally Kleinfeldt
 
Networks Have Layers - Understanding The OSI Model
Networks Have Layers - Understanding The OSI ModelNetworks Have Layers - Understanding The OSI Model
Networks Have Layers - Understanding The OSI ModelBrandon Checketts
 

Similaire à Http Push (16)

BRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQLBRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQL
 
Intro to WebSockets and Comet
Intro to WebSockets and CometIntro to WebSockets and Comet
Intro to WebSockets and Comet
 
Node.js and Ruby
Node.js and RubyNode.js and Ruby
Node.js and Ruby
 
HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017
HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017
HTTP2 in action - Piet Van Dongen - Codemotion Amsterdam 2017
 
A Network Architecture for the Web of Things
A Network Architecture for the Web of ThingsA Network Architecture for the Web of Things
A Network Architecture for the Web of Things
 
The Reluctant SysAdmin : 360|iDev Austin 2010
The Reluctant SysAdmin : 360|iDev Austin 2010The Reluctant SysAdmin : 360|iDev Austin 2010
The Reluctant SysAdmin : 360|iDev Austin 2010
 
Node.js - A Quick Tour II
Node.js - A Quick Tour IINode.js - A Quick Tour II
Node.js - A Quick Tour II
 
Intro To Git
Intro To GitIntro To Git
Intro To Git
 
How To Build A Web Service
How To Build A Web ServiceHow To Build A Web Service
How To Build A Web Service
 
Distributed Social Networking
Distributed Social NetworkingDistributed Social Networking
Distributed Social Networking
 
SeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocket
SeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocketSeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocket
SeaBeyond 2011 ProcessOne - Eric Cestari: XMPP over WebSocket
 
Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands
 
RunDeck
RunDeckRunDeck
RunDeck
 
PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)
 
Large Files without the Trials
Large Files without the TrialsLarge Files without the Trials
Large Files without the Trials
 
Networks Have Layers - Understanding The OSI Model
Networks Have Layers - Understanding The OSI ModelNetworks Have Layers - Understanding The OSI Model
Networks Have Layers - Understanding The OSI Model
 

Dernier

Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 

Dernier (20)

Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 

Http Push

  • 1. “Because as rapid as the arrival of networked pull media was, the second act - networked push media - is coming even faster. ” WIRED Magazine March 1997 Thursday, March 11, 2010
  • 2. Push A 2010 case study with the NGINX HTTP Push Module, Ruby on Rails, and friends Luke Melia Thursday, March 11, 2010
  • 3. Who’s this guy? ★ VP, Engineering at weplay.com ★ Agilist ★ nyc.rb’er since ~2006 ★ Ruby in Practice contributor ★ Interested in startup tech leadership ★ Beach volleyball player ★ Dad Thursday, March 11, 2010
  • 4. What’s this talk? ★ The goal and the problem ★ A quick survey of solutions ★ About the NGINX HTTP Push Module ★ How to use it with Ruby, by example ★ Gotchyas ★Q &A Thursday, March 11, 2010
  • 5. The Goal ★ Immediate encouragement of positive on-site actions ★ “Points!” Thursday, March 11, 2010
  • 7. Constraints ★ Don’t want to figure out points earned while processing the request (offload it to a background work queue) ★ Do want to inform about points earned through another user’s actions ★ Don’t want to wait for a second page load Thursday, March 11, 2010
  • 8. Pure push doesn’t exist on the open web Thursday, March 11, 2010
  • 9. XMPP WebSockets Push-like solutions Streaming Comet Thursday, March 11, 2010
  • 10. Don’t close the connection after sending down the page ★ multipart/x-mixed-replace ★ Supported in non-Microsoft browsers only Streaming Thursday, March 11, 2010
  • 11. XMPP ★ Designed for presence and messaging ★ Browsers don’t speak XMPP natively ★ BOSH ★ Hemlock: Flex + ejabberd, by NYC’s Mint Digital Thursday, March 11, 2010
  • 12. Push data over a long held Ajax request using browser-native technologies ★ Bayeaux protocol ★ Long-polling Ajax Comet Thursday, March 11, 2010
  • 13. WebSockets ★ HTML 5 ★ Full-duplex single socket connection between browser and server ★ ex: ws://websockets.org:8787 ★ very limited browser support today Thursday, March 11, 2010
  • 14. XMPP WebSockets Streaming Comet Thursday, March 11, 2010
  • 15. ejabberd Sunshowers Rainbows! Servers Cramp Juggernaut NGINX HTTP Push Module Orbited Tornado Diesel Faye Thursday, March 11, 2010
  • 16. NGINX HTTP Push Module ★ Turns NGINX into a Comet server ★ “A useful tool with a boring name.” ★ By Leo P ★ http://pushmodule.slact.net/ ★ Currently at 0.692β Thursday, March 11, 2010
  • 17. Basic HTTP Push Relay Protocol ★ Subscriber locations ★ HTTP GET with channel ID ★ Publisher locations ★ HTTP POST with channel ID ★ POSTed data is passed through, becoming the response to the subscriber’s GET Thursday, March 11, 2010
  • 18. Diagramming the simple case BACK-END PROCESS 2. HTTP POST Publisher endpoint 3. POST BODY NGINX IS ROUTED BY CHANNEL ID Subscriber endpoint 4. RESPONSE IS 1. HTTP GET DATA FROM POST BODY End User Thursday, March 11, 2010
  • 19. Channel Concurrency Styles ★ Broadcast ★ Last-in, first-out ★ First-in, last-out Thursday, March 11, 2010
  • 20. Subscriber config # public long‐polling endpoint location /rt/notifications {   push_subscriber;   set $push_channel_id $arg_id;   push_subscriber_concurrency last; } Thursday, March 11, 2010
  • 21. Publisher config # internal publish endpoint # (keep it private / protected) location /rt/publish {   push_publisher;   set $push_channel_id $arg_id;   push_store_messages on;   push_message_timeout 5m;   push_max_message_buffer_length 5;   push_min_message_buffer_length 0;   push_delete_oldest_received_message on; } Thursday, March 11, 2010
  • 22. Diagram with storage BACK-END PROCESS 1. HTTP POST 4. MESSAGE Publisher endpoint 2. POST BODY IS RETRIEVED IS QUEUED FROM QUEUE NGINX Queue BY CHANNEL ID BY CHANNEL ID Subscriber endpoint 5. RESPONSE IS 3. HTTP GET DATA FROM QUEUE End User Thursday, March 11, 2010
  • 23. Code it up. Thursday, March 11, 2010
  • 24. Client-side Gotchas ★ Javascript blocking ★ Put it in an iframe ★ Per domain connection limit ★ use subdomain, with JSONP Thursday, March 11, 2010
  • 25. Server-side Gotchas ★ “Too many open connections” ★ Reduce worker_connections to less than ulimit -n ★ Increase worker_processes to give you enough total connection to serve your users ★ Ours: worker_processes 24 worker_connections 960 Thursday, March 11, 2010
  • 26. Testing ★ Fake Publisher for in-memory cucumber scenarios ★ Run selenium scenarios through NGINX to incorporate actual push module behavior Thursday, March 11, 2010
  • 27. NGINX Configuration Management ★Template it ★Version it ★Automate it Thursday, March 11, 2010
  • 28. The Future ★ Multiplexing: subscribe to more than one channel ★ Use Redis as a message store ★ Convention-based approach for raising javascript events Thursday, March 11, 2010