320 likes | 468 Views
Stay Connected Mobile Pushing Apps mit WebSockets Alexander Schulze Predrag 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
E N D
Stay Connected Mobile PushingApps mit WebSockets Alexander SchulzePredrag Stojadinovic jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket Solution
Die heutige Session • Agenda • Kommunikation mit WebSocketsWo, Was, Warum, Wie, Wohin • WebSocket Server und Browser Client • WebSocket Kommunikation für mobile Apps • Android Demos und Code Beispiele jWebSocket – Stay Connected
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
Grundlage WebSockets • WebSockets sind bidirektional und permanent • Effiziente Echtzeit-Kommunikation stattumständlichem Request/Response-Protokoll • WebSockets helfen Interoperabilität herzustellen • Standardisierter Handshake und Paketaustauschfür stationäre und mobile Plattformen • Web und Mobile Apps brauchen... • sichere, zuverlässige und schnelle Kommunikation jWebSocket – StayConnected
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
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
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
WebSockets ? • WebSockets – Was ist das ? • Bidirektionales Full-Duplex Protokollzwischen 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
TCP statt HTTP • Umfangreiche Freiheiten • Keinerlei Bindung an bestimmte Datenformate • Keinerlei Vorgaben für Inhalte oder Verarbeitung • Aber auch hohe Verantwortung • Datenformate und Kommunikationslogikmüssen selbst implementiert werden • Ebenso alle Sicherheitsmechanismen ! jWebSocket – Stay Connected
Verbindungsaufbau • Handshake Client GET {path} HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: {hostname}:{port} Origin: http://{host}[:{port}] Sec-WebSocket-Key1: {sec-key1} Sec-WebSocket-Key2: {sec-key2} 8 Bytes generated {sec-key3} Server HTTP/1.1 101 WebSocketProtocolHandshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://{hostname}[:{port} Sec-WebSocket-Location: ws://{hostname}:{port}/ 16 Bytes MD5 Checksum jWebSocket – Stay Connected
Verbindungsaufbau • Handshake(Same OriginPolicy, IETF Draft #76) Client GET /services/chat/;room=Foyer HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: jwebsocket.org Origin: http://jwebsocket.org Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5 Sec-WebSocket-Key2: 12998 5 Y3 1 .P00 ^n:ds[4U Server HTTP/1.1 101 WebSocketProtocolHandshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://jwebsocket.org Sec-WebSocket-Location: ws://jwebsocket.org/services/chat 8jKS'y:G*Co,Wxa- jWebSocket – Stay Connected
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
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
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
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
HTML5 Browser • WebSockets im Browser varlWebSocketClient = new WebSocket("ws://jwebsocket.org:8787"); // tries to openthe TCP connection and to exchangehandshake lWebSocketClient.onopen = function(aEvent) { // connection has successfullybeenestablished } lWebSocketClient.onmessage = function(aEvent) { // a data packet has completelybeenreceived in aEvent.data } lWebSocketClient.onclose = function(aEvent) { // theconnection has beenterminated } lWebSocketClient.send("Hello World!"); // sends a UTF-8 text message to theserver lWebSocketClient.close(); // terminatestheconnection jWebSocket – Stay Connected
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
Token • jWebSocket Token Modell • Alle Knoten in einem WebSocket Netzwerksind 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
jWebSocket Server • Server Infrastruktur • Engines • Tokens • Server • Filter • Plug-Ins • Listener jWebSocket – Stay Connected
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
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
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
Low-Level-Interface • Java Client für Android, Symbian und BlackBerry 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); } jWebSocket – Stay Connected
Listener • Gleiches API wie bei den Web Clients public interface WebSocketClientListener { void processOpened(WebSocketClientEvent aEvent); void processPaket(WebSocketClientEvent aEvent, WebSocketPacket aPacket); void processClosed(WebSocketClientEvent aEvent); } jWebSocket – Stay Connected
Java WebSocket Client public class MyWebSocketTokenClient implements WebSocketTokenClientListener { public MyWebSocketClient() { try { client = new BaseTokenClient(); client.addListener(this); } catch (Exception ex) { // exception handling } } public void processOpened(WebSocketClientEvent aEvent) { System.out.println("Opened."); } public void processPacket(WebSocketClientEvent aEvent, WebSocketPacket aPacket) { // optionally evaluate the raw datapacket } public void processToken(WebSocketClientEvent aEvent, Token aToken) { System.out.println("Received Token: “ + aToken.toString()); } public void processClosed(WebSocketClientEvent aEvent) { System.out.println("Closed."); } public void connect(String aURL) { try { client.open(aURL); } catch (WebSocketException ex) { // exception handling } } public void disconnect() { try { client.close(); } catch (WebSocketException ex) { // exception handling } } } jWebSocket – Stay Connected
Android Demo App • MainActivity • Listview • ConfigActivity • URL • Username • Password jWebSocket – Stay Connected
Android Fundamentals • WebSocket App • Verbindung aufbauen • Nachrichten empfangen • Nachrichten senden • Nachrichten broadcasten • Verbindung trennen jWebSocket – Stay Connected
Android Canvas Demo • Online-Collaboration • Mehrere Benutzer arbeitenam gleichen Dokument • Beispiel:SharedCanvas jWebSocket – Stay Connected
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
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
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
Vielen Dank für Ihre Aufmerksamkeit ! Fragen & Antworten Alexander Schulze Predrag Stojadinovic Forum & Download http://jwebsocket.org @jWebSocket jWebSocket – Stay Connected