16
WebSockets avec Node.js Martin Jordan Menubarbe Sylvio Paturaux Florian

WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

WebSockets avec Node.js

Martin Jordan Menubarbe Sylvio Paturaux Florian

Page 2: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

SOMMAIRE 2

Qu’est-ce que les WebSockets ?

Quelques bibliothèques

Comparaison

Démonstration

Page 3: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Connexion ouverte

Handshake

Qu’est-ce que les WebSockets ? 3

Messages Bi-directionnels

Fermeture du canal

Client Serveur

Connexion ouverte et persistante

Connexion fermée

Protocole réseau : couche application

Full-duplex

Sécurisé SSL possible

Implémentation basique dans Node.js

Standardisé RFC 6455

Actuellement version 13

Page 4: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Compatibilités entre navigateurs

4Qu’est-ce que les WebSockets ?

Page 5: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Permettent une utilisation plus facile des WebSockets

Couche d’abstraction, nouvelles fonctionnalités, adaptation client, …

5Les bibliothèques

Présentation des bibliothèques les plus intéressantes

Page 6: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

6WS version 1.1

Module implémentant simplement la RFC 6455

Très rapide, car n’utilise pas de surcouche

Difficile d’utilisation

Page 7: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Langage C++

Compilé comme module V8

Performances

40% moins de mémoire que ws

10% plus rapide que ws

Compatible OS X, Linux et Microsoft

7µWebSockets

Page 8: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Utilise les WebSockets et d’autres protocoles temps réels

Surcouche avec les fonctionnalités

Namespace, Room, liste clients

Utilisé dans

Microsoft Office, Yammer, Zendesk, Trello

8Socket.io version 1.4.5

Page 9: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

9Engine.io version 1.6.8

API côté serveur et client

Gestion des Fallback

Possibilité de changer de moteur WebSocket

Socket.io utilise Engine.io qui utilise lui-même ws

WebSocket

FlashSocket

XHR Polling

JSonP Polling

Fallback

Page 10: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Basé uniquement sur le long polling

Mise en place simple du load balancing

Fonctionne pour la très majeur partie des navigateurs

Propose une implémentation côté client

10Browser Chanel version 2.0

Page 11: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Bibliothèque de haut niveau

Encapsule des Frameworks de transport temps-réels :

11Primus

Détection et des déconnexion-reconnexion

Changement de type de transport de données simplifié

Encodage/decodage binaire simples

• BrowserChannel

• Engine.IO

• Faye

• Lws

• uws

• SockJS

• ws

Page 12: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

12Comparaison

Etude datant de 2014

Page 13: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

13Démonstration

Page 14: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

14Conclusion

Autres bibliothèques

SockJS, Faye

WS et µWS Performances

BrowserChannel Long Polling

Socket.io FallBack et groupes de clients

Primus Simple, stable et haut niveau

Page 15: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Merci

Martin Jordan Menubarbe Sylvio Paturaux Florian

Page 16: WebSockets avec Node · 2016. 6. 2. · Connexion ouverte Handshake Qu’est-ce que les WebSockets ? 3 Messages Bi-directionnels Fermeture du canal Client Serveur Connexion ouverte

Références Spec. : https://www.w3.org/TR/websockets/

RFC 6455 : https://tools.ietf.org/html/rfc6455

Comparaison performances : https://medium.com/@denizozger/finding-the-right-node-js-websocket-

implementation-b63bfca0539#.rurinahb7

Google browserchannel : http://google.github.io/closure-library/api/class_goog_net_BrowserChannel.html

Compatibilités : http://caniuse.com/#feat=websockets

Package : https://www.npmjs.com/package/

LWS : https://libwebsockets.org/

Engine.IO : https://github.com/socketio/engine.io-protocol, http://www.devthought.com/2012/07/07/the-

realtime-engine/

Browser Channel : https://github.com/josephg/node-browserchannel,

http://thegeez.net/2012/04/03/why_browserchannel.html

Primus : https://github.com/primus/primus

Démo : http://tanker.jordan-martin.fr/