Stay Connected Mobile Pushing Apps mit WebSockets Alexander Schulze Predrag Stojadinovic jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket Solution
Jan 09, 2016
Stay ConnectedMobile Pushing Apps mit WebSockets
Alexander SchulzePredrag Stojadinovic
jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket Solution
Die heutige Session
• Agenda• Kommunikation mit WebSockets
Wo, Was, Warum, Wie, Wohin
• WebSocket Server und Browser Client
• WebSocket Kommunikation für mobile Apps
• Android Demos und Code Beispiele
jWebSocket – Stay Connected 208.09.2010
Apps im Wandel
• Mehr Kommunikation statt reiner Information• Entertainment, sofortiger Erlebnisaustausch
• Wir werden immer mehr online sein• Text, Fotos, Videos, Music, Geo-Location etc.
• Angebote für stationäre und mobile Geräte• Browser-, Desktop- und Mobile-Apps verschmelzen
• WebSockets helfen die User besser zu verbinden
jWebSocket – Stay Connected 308.09.2010
Grundlage WebSockets
• WebSockets sind bidirektional und permanent• Effiziente Echtzeit-Kommunikation statt
umständlichem Request/Response-Protokoll
• WebSockets helfen Interoperabilität herzustellen• Standardisierter Handshake und Paketaustausch
für stationäre und mobile Plattformen
• Web und Mobile Apps brauchen...• sichere, zuverlässige und schnelle Kommunikation
jWebSocket – Stay Connected 408.09.2010
Was wir haben: HTTP
• HTTP - designed zur Übertragung von Dokumenten
• Alle umständlichen, nearly realtime Tricks wie...• Polling, Reverse-AJAX
• Chunking, Comet etc...
• ...sind letztlich nicht standardisierte Hacks!
• HTTP bleibt ein Request/Response Mechanismus
jWebSocket – Stay Connected 508.09.2010
Nearly Realtime Mechanismen
• Polling• Senden regelmäßiger Anfragen mit sofortiger Antwort
• Viele Verbindungen, hohes Volumen, niedrige Effizienz(insbesondere bei niedriger Datenrate)
• Long Polling• Regelmäßige Anfragen mit Offenhalten der Verbindung
• Hohes Volumen, 2 Kanäle pro Client, Puffer-Problem, viele Verbindungen (insbesondere bei hoher Datenrate)
jWebSocket – Stay Connected 608.09.2010
Kosten
• Kalkulation Volumen und Bandbreite HTTP• Annahme: 800 Bytes für Requests + Response (bis 2KB)
• 1.000 Clients x 800 Bytes = 800 KB => 6,4 Mbit/s
• 10.000 Clients x 800 Bytes = 8 MB => 64 Mbit/s
• 100.000 Clients x 800 Bytes = 80 MB => 640 Mbit/s
• Und das nur für‘s Protokoll – ohne Nutzdaten !
jWebSocket – Stay Connected 708.09.2010
WebSockets ?
• WebSockets – Was ist das ?• Bidirektionales Full-Duplex Protokoll
zwischen Browser Clients und WebSocket Server
• Ebenso für Desktop oder Mobile Apps verwendbar
• Designed für permanente/langhaltende Verbindungen
• Standardisiert in HTML5, W3C-API, IETF-Protokoll(http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76)
• WebSockets sind TCP – nicht HTTP – basiert !
jWebSocket – Stay Connected 808.09.2010
TCP statt HTTP
• Umfangreiche Freiheiten• Keinerlei Bindung an bestimmte Datenformate
• Keinerlei Vorgaben für Inhalte oder Verarbeitung
• Aber auch hohe Verantwortung• Datenformate und Kommunikationslogik
müssen selbst implementiert werden
• Ebenso alle Sicherheitsmechanismen !
jWebSocket – Stay Connected 908.09.2010
Verbindungsaufbau
• Handshake
jWebSocket – Stay Connected 1008.09.2010
Client
GET {path} HTTP/1.1Upgrade: WebSocketConnection: UpgradeHost: {hostname}:{port}Origin: http://{host}[:{port}]Sec-WebSocket-Key1: {sec-key1}Sec-WebSocket-Key2: {sec-key2}
8 Bytes generated {sec-key3}
Verbindungsaufbau
• Handshake (Same Origin Policy, IETF Draft #76)
jWebSocket – Stay Connected 1108.09.2010
Client
GET /services/chat/;room=Foyer HTTP/1.1Upgrade: WebSocketConnection: UpgradeHost: jwebsocket.orgOrigin: http://jwebsocket.orgSec-WebSocket-Key1: 4 @1 46546xW%0l 1 5Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
^n:ds[4U
Server
HTTP/1.1 101 WebSocket Protocol HandshakeUpgrade: WebSocketConnection: UpgradeSec-WebSocket-Origin: http://jwebsocket.orgSec-WebSocket-Location: ws://jwebsocket.org/ services/chat
8jKS'y:G*Co,Wxa-
Bidirektionaler Datenaustausch
• Textframes (freigegeben)
• 0x00 <UTF8-Textdaten> 0xFF
• Keine theoretische Längenbegrenzung, JavaScript: 4 GB
• Binärframes (noch nicht freigegeben)
• 0x80-0xFF <Länge> <Binäre Daten>
• Das WebSocket Protokoll lebt!• Aktuell IEFT Draft #76 (Änderungen erwartet)
jWebSocket – Stay Connected 1208.09.2010
WebSockets TCP vs. HTTP
• Kalkulation Volumen und Bandbreite WebSockets• Feststellung: 2 Bytes für Requests + Response
• 1.000 Clients x 2 Bytes = 2 KB => 0,016 Mbit/s
• 10.000 Clients x 2 Bytes = 20 KB => 0,16 Mbit/s
• 100.000 Clients x 2 Bytes = 200 KB => 1,6 Mbit/s
• Protokoll-Overhead: Ein-vierhundert-stel !jWebSocket – Stay Connected 1308.09.2010
WebSockets – Warum?
• Schneller, billiger, offener• Schlankere Kommunikation (TCP vs. HTTP overhead)
WebSockets ersetzen XHR und Comet schrittweise
• Belegt nur einen Kanal (bidirektional, full-duplex)
• Ressourcenschonend und kostenreduzierend,doppelt so viele Clients gleichzeitig pro Server
• Keine Protokollvorgaben oderBindung an bestimmte Datenformate
jWebSocket – Stay Connected 1408.09.2010
WebSockets - Wofür
• WebSockets sind die perfekte Basis für...• Online-Games und Online-Collaboration
• Remote Control und Monitoring
• Streaming und Chat
• Soziale Netzwerke
• Cluster und Grids
jWebSocket – Stay Connected 1508.09.2010
HTML5 Browser
• WebSockets im Browser
jWebSocket – Stay Connected 1608.09.2010
var lWebSocketClient = new WebSocket("ws://jwebsocket.org:8787"); // tries to open the TCP connection and to exchange handshake
lWebSocketClient.onopen = function(aEvent) { // connection has successfully been established}lWebSocketClient.onmessage = function(aEvent) { // a data packet has completely been received in aEvent.data}lWebSocketClient.onclose = function(aEvent) { // the connection has been terminated}lWebSocketClient.send("Hello World!"); // sends a UTF-8 text message to the server
lWebSocketClient.close(); // terminates the connection
Kompatibilität
• X-Browser und X-Plattform kompatibel• Nativ in Chrome 4/5/6, Firefox 4, Safari 5,
IE 6/7/8, Opera 9/10 und ältere Browsermit FlashBridge
• Clients für Android, Symbian und Blackberry, iPhone ab Dezember 2010
jWebSocket – Stay Connected 1708.09.2010
Token
• jWebSocket Token Modell• Alle Knoten in einem WebSocket Netzwerk
sind von Geburt an erstmal dumm
• Alle Beteiligten müssen sich auf eine gemeinsame Sprache einigen, um eingehende Pakete zu „verstehen“
• Zum Beispiel JSON, XML oder auch CSV
• Abstrakt: Datenobjekte, in jWebSocket „Token“
jWebSocket – Stay Connected 1808.09.2010
jWebSocket Server
• Server Infrastruktur• Engines
• Tokens
• Server
• Filter
• Plug-Ins
• Listener
jWebSocket – Stay Connected 1908.09.2010
jWebSocket JavaScript Client
• Client Infrastruktur• Basis WebSocket Client
• Token Client
• Erweiterbar mit Plug-Ins
• Features• Connection Management
• Session Management
• Authentifizierung und Autorisierung
jWebSocket – Stay Connected 2008.09.2010
WebSockets – Wie?
• Fertige Libraries verfügbar (Open Source, LGPL)• Browser Client in JavaScript
jWebSocket.js inkl. FlashBridge und JSON Support
• jWebSocket Serverals .jar, .war, .exe oder Service
• Client für Java SE z.B. für Swing Desktop Apps
• Clients für Android, Symbian und BlackBerry(iPhone ab Dezember 2010)
jWebSocket – Stay Connected 2108.09.2010
Android - Dalvik VM
• Android Apps in Java• Im Prinzip Java 1.5, inkl. Collections, Annotations etc.
• Google‘s eigene Dalvik VM: optimiert für mobile Geräte,sehr kompakt, aber leider nicht byte-code kompatibel
• Wie schon unter Java ME leidlich erfahren:Write Once Run Everwhere gehört der Vergangenheit an
• Spezielle Android Builds der Libraries erforderlich, eigene re-compilieren, Third-Party Libs im Source
jWebSocket – Stay Connected 2208.09.2010
Low-Level-Interface
• Java Client für Android, Symbian und BlackBerry
jWebSocket – Stay Connected 2308.09.2010
public interface WebSocketClient { void open(String aURL) throws WebSocketException; void send(WebSocketPacket aPacket) throws WebSocketException; void close() throws WebSocketException; boolean isConnected();
void addListener(WebSocketClientListener aListener); void removeListener(WebSocketClientListener aListener);
void notifyOpened(WebSocketClientEvent aEvent); void notifyPacket(WebSocketClientEvent aEvent, WebSocketPacket(aPacket); void notifyClosed(WebSocketClientEvent aEvent);}
Listener
• Gleiches API wie bei den Web Clients
jWebSocket – Stay Connected 2408.09.2010
public interface WebSocketClientListener {
void processOpened(WebSocketClientEvent aEvent);
void processPaket(WebSocketClientEvent aEvent, WebSocketPacket aPacket);
void processClosed(WebSocketClientEvent aEvent);
}
Android Demo App
• MainActivity• Listview
• ConfigActivity• URL
• Username
• Password
jWebSocket – Stay Connected 2608.09.2010
Android Fundamentals
jWebSocket – Stay Connected 2708.09.2010
• WebSocket App• Verbindung aufbauen
• Nachrichten empfangen
• Nachrichten senden
• Nachrichten broadcasten
• Verbindung trennen
Android Canvas Demo
• Online-Collaboration• Mehrere Benutzer arbeiten
am gleichen Dokument
• Beispiel:SharedCanvas
jWebSocket – Stay Connected 2808.09.2010
Android - Fotos übertragen
• Imagetransfer• jWebSocket FileSystem Plug-In
• Benachrichtigung bei Änderungen
• Binärdaten werden Base64codiert, Optimierung mit neuemBinärprotokoll umgehend erwartet
• http://jwebsocket.org/Snapshot Demo!
jWebSocket – Stay Connected 2908.09.2010
Ausblick
• Wir haben noch viel vor...• SSO und Authentification/Autorisation API
• Remote Procedure Calls (RPC)
• Cloud API, Smart Grids und Cluster
• Shared Objects und FileSharing API
• JDBC Bridge und Database API
• Externe Service Nodes
jWebSocket – Stay Connected 3008.09.2010
In eigener Sache
• Das jWebSocket Team sucht Unterstützung!• Java EE, SE, ME, JavaScript, Objective C...• Android, Symbian, BlackBerry, iPhone...• Ideen für innovative Apps willkommen!
• Wir bieten...• Umfangreiche Erfahrungen eines
internationalen Teams• Erstklassigen Support für eigene Projekte• Unterstützung beim Aufbau eigener Reputation
jWebSocket – Stay Connected 3108.09.2010