Real-time Web Application with Socket.IO, Node.js, and Redis
-
Upload
york-tsai -
Category
Technology
-
view
18.505 -
download
5
description
Transcript of Real-time Web Application with Socket.IO, Node.js, and Redis
![Page 1: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/1.jpg)
Real-time Web Application with Socket.IO, Node.js, and Redis
York Tsai, JSDC 2013
![Page 2: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/2.jpg)
Who is York
● http://www.linkedin.com/pub/york-tsai/13/bb/8a8● https://twitter.com/yorktsai● https://www.facebook.com/yorktsai● VP Engineering @ EZTABLE
![Page 3: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/3.jpg)
Never Live Demo!
● http://jsdc.york.tw/● I hope this work on my (and yours) computer ...
![Page 4: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/4.jpg)
![Page 5: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/5.jpg)
You may Have Heard About
● Forever Iframe● XMLHttpRequest Long Polling● Cometd● Websocket● http://en.wikipedia.org/wiki/Comet_(programming
)● TL;DR
![Page 6: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/6.jpg)
Socket.IO
● Cross browser (including IE 6)● Real-time and bi-directional persistent
connection (WebSocket)● Very simple to use● Javascript!
![Page 7: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/7.jpg)
Start a Server
![Page 8: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/8.jpg)
Sending and Receiving Events
![Page 9: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/9.jpg)
![Page 10: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/10.jpg)
Select Receivers for Events
![Page 11: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/11.jpg)
Broadcasting
![Page 12: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/12.jpg)
Rooms
![Page 13: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/13.jpg)
Single Target
![Page 14: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/14.jpg)
Multiple Applications?
![Page 15: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/15.jpg)
Namespacing
![Page 16: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/16.jpg)
How About New Connections?
![Page 17: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/17.jpg)
Data Persistence
● Need a persistence layer● Get data from the persistence layer whenever a
new connection established
![Page 18: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/18.jpg)
IntegrationI have component X,Y,Z want to send/receive data
from user's browser
![Page 19: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/19.jpg)
Pub/Sub or Message Queue
Messaging system usually supports both
![Page 20: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/20.jpg)
Pub/Sub
Digram from Python's Website
![Page 21: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/21.jpg)
Redis
● Super-fast in-memory data structure server● Pub/Sub● Rich client libraries● Zero install and easy to operate
![Page 22: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/22.jpg)
3 Commands
● SUBSCRIBE channel● UNSUBSCRIBE channel● PUBLISH channel message
![Page 23: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/23.jpg)
In addition...
● Connect multiple node.js server to one redis channel
● Scalability!
![Page 24: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/24.jpg)
Two Connections per Server
![Page 25: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/25.jpg)
Redis-backed Pub/Sub
● Two clients required: one for pub, one for sub● Use one channel, add metadata to your
message
![Page 26: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/26.jpg)
Redis-backed Pub/Sub
![Page 27: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/27.jpg)
Frequently Asked Questions
![Page 28: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/28.jpg)
SSL?
Yes!
![Page 29: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/29.jpg)
SSL Server
![Page 30: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/30.jpg)
SSL Client
![Page 31: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/31.jpg)
Cross domain?
Yes! (If use WebSocket or JSONP)
![Page 32: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/32.jpg)
Authentication?
![Page 33: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/33.jpg)
Authentication
● Cookie & Session● Cookie does not cross domain, use SSL +
Access Token instead
![Page 34: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/34.jpg)
Load Balancing?
Yes! (If use Nginx >= 1.3.13)
![Page 35: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/35.jpg)
Sample Nginx Configuration
![Page 36: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/36.jpg)
Load Balancing using ELB
● ELB (Elastic Load Balancer)'s HTTP(S) proxy does not understand websocket requests
● Use TCP/SSL, instead of HTTP/HTTPS● No session stickyness● No X-Forwarded-For header
![Page 37: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/37.jpg)
Scalability
● Single thread● 2500~3500 connections per process● As many processes as you want
![Page 38: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/38.jpg)
Configurations
● store (default: MemoryStore, single process only)
● transports (default: websocket, htmlfile, xhr-polling, jsonp-polling)
● authorization (default: false)
![Page 39: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/39.jpg)
Configurations - transports
![Page 40: Real-time Web Application with Socket.IO, Node.js, and Redis](https://reader031.fdocuments.us/reader031/viewer/2022020110/5557d3d2d8b42ab6258b48d7/html5/thumbnails/40.jpg)
Thank You!The slide is also the live demo itself. Please check
the following repo!
https://github.com/yorktsai/jsdc2013