real-time web application with socket.io, node.js, and redis

Post on 17-May-2015

18.503 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

JSDC 2013

TRANSCRIPT

Real-time Web Application with Socket.IO, Node.js, and Redis

York Tsai, JSDC 2013

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

Never Live Demo!

● http://jsdc.york.tw/● I hope this work on my (and yours) computer ...

You may Have Heard About

● Forever Iframe● XMLHttpRequest Long Polling● Cometd● Websocket● http://en.wikipedia.org/wiki/Comet_(programming

)● TL;DR

Socket.IO

● Cross browser (including IE 6)● Real-time and bi-directional persistent

connection (WebSocket)● Very simple to use● Javascript!

Start a Server

Sending and Receiving Events

Select Receivers for Events

Broadcasting

Rooms

Single Target

Multiple Applications?

Namespacing

How About New Connections?

Data Persistence

● Need a persistence layer● Get data from the persistence layer whenever a

new connection established

IntegrationI have component X,Y,Z want to send/receive data

from user's browser

Pub/Sub or Message Queue

Messaging system usually supports both

Pub/Sub

Digram from Python's Website

Redis

● Super-fast in-memory data structure server● Pub/Sub● Rich client libraries● Zero install and easy to operate

3 Commands

● SUBSCRIBE channel● UNSUBSCRIBE channel● PUBLISH channel message

In addition...

● Connect multiple node.js server to one redis channel

● Scalability!

Two Connections per Server

Redis-backed Pub/Sub

● Two clients required: one for pub, one for sub● Use one channel, add metadata to your

message

Redis-backed Pub/Sub

Frequently Asked Questions

SSL?

Yes!

SSL Server

SSL Client

Cross domain?

Yes! (If use WebSocket or JSONP)

Authentication?

Authentication

● Cookie & Session● Cookie does not cross domain, use SSL +

Access Token instead

Load Balancing?

Yes! (If use Nginx >= 1.3.13)

Sample Nginx Configuration

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

Scalability

● Single thread● 2500~3500 connections per process● As many processes as you want

Configurations

● store (default: MemoryStore, single process only)

● transports (default: websocket, htmlfile, xhr-polling, jsonp-polling)

● authorization (default: false)

Configurations - transports

Thank You!The slide is also the live demo itself. Please check

the following repo!

https://github.com/yorktsai/jsdc2013

top related