Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Stay Connected Realtime-Webapplikationen mit jWebSocket Alexander Schulze Predrag Stojadinovic jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket.

Ähnliche Präsentationen


Präsentation zum Thema: "Stay Connected Realtime-Webapplikationen mit jWebSocket Alexander Schulze Predrag Stojadinovic jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket."—  Präsentation transkript:

1 Stay Connected Realtime-Webapplikationen mit jWebSocket Alexander Schulze Predrag Stojadinovic jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket Solution

2 Die heutige Session Agenda Kommunikation mit WebSockets Wo, Was, Warum, Wie, Wohin WebSocket Browser Clients WebSocket Server Apps und Erweiterungen WebSockets für mobile Apps Demos und Code Beispiele jWebSocket – Stay Connected211.10.2010

3 Apps im Wandel Weniger Information - mehr Kommunikation Entertainment, sofortiger Erlebnisaustausch Wir werden immer mehr (mobil) 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 Connected311.10.2010

4 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 Connected411.10.2010

5 Was wir haben: HTTP HTTP - designed zur Übertragung von Dokumenten Alle umständlichen, nearly realtime Tricks wie... Polling, Reverse-AJAX, Comet, Flash-Plug-Ins, Java-Applets etc....sind letztlich nicht standardisierte Hacks! HTTP bleibt ein Request/Response Mechanismus jWebSocket – Stay Connected511.10.2010

6 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 Connected611.10.2010

7 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ürs Protokoll – ohne Nutzdaten ! jWebSocket – Stay Connected711.10.2010

8 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-ietf-hybi-thewebsocketprotocol-02) WebSockets sind TCP – nicht HTTP – basiert ! jWebSocket – Stay Connected811.10.2010

9 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 Connected911.10.2010

10 Verbindungsaufbau Handshake jWebSocket – Stay Connected1011.10.2010 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 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://{hostname}[:{port} Sec-WebSocket-Location: ws://{hostname}:{port}/ 16 Bytes MD5 Checksum

11 Verbindungsaufbau Handshake (Same Origin Policy, IETF Draft #76) jWebSocket – Stay Connected1111.10.2010 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 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://jwebsocket.org Sec-WebSocket-Location: ws://jwebsocket.org/ services/chat 8jKS'y:G*Co,Wxa-

12 Bidirektionaler Datenaustausch Textframes 0x00 0xFF Keine theoretische Längenbegrenzung, JavaScript: 4 GB Binärframes 0x80-0xFF Änderungen! Das WebSocket Protokoll lebt! IEFT Draft #76 -> Draft #02, Sep. 24 inkl. Control- Frames jWebSocket – Stay Connected1211.10.2010

13 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 Connected1311.10.2010

14 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 oder Bindung an bestimmte Datenformate jWebSocket – Stay Connected1411.10.2010

15 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 Service-Dienste jWebSocket – Stay Connected1511.10.2010

16 Paradigmen-Wechsel WebSockets: Nicht nur eine Kommunikations- Technologie, sondern ein Paradigmen-Wechsel Browser: Nicht mehr Tool zur Dokumentendarstellung, sondern intelligentes Anwendungs- Terminal jWebSocket – Stay Connected1611.10.2010

17 HTML5 Browser WebSockets im Browser jWebSocket – Stay Connected1711.10.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

18 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 Browser mit FlashBridge Clients für Android, Symbian und Blackberry, iPhone ab Dezember 2010 jWebSocket – Stay Connected1811.10.2010

19 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 (WebSocket Subprotokoll: jWebSocket-JSON...) Abstrakt: Datenobjekte, in jWebSocket Token jWebSocket – Stay Connected1911.10.2010

20 jWebSocket Server Server Infrastruktur Engines Tokens Server Filter Plug-Ins Listener jWebSocket – Stay Connected2011.10.2010

21 jWebSocket JavaScript Client Client Infrastruktur Basis WebSocket Client Token Client Erweiterbar mit Plug-Ins Features Connection Management Session Management Authentifizierung und Autorisierung jWebSocket – Stay Connected2111.10.2010

22 WebSockets – Wie? Fertige Libraries verfügbar (Open Source, LGPL) Browser Client in JavaScript jWebSocket.js inkl. FlashBridge und JSON Support jWebSocket Server als.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 Connected2211.10.2010

23 jWebSocket - Server Stand-Alone Server Einfachste Installation (download, unzip, run) Nur Webserver nötig (z.B. Apache), für neue Web- Apps als.jar Betriebssystem-unabhängig (exe4j für Windows) Integration in bestehende (Web-)Apps Java Apps oder Web-Apps, z.B. Tomcat oder GlassFish Kombimodelle aus Servlets und WebSockets jWebSocket – Stay Connected2311.10.2010

24 Integration in WebApps Context-Listener in Tomcat jWebSocket – Stay Connected2411.10.2010 public class ContextListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { // start the jWebSocket server sub system JWebSocketFactory.start(""); // assign web socket server to servlet bridge servlet ServletBridge.setServer((TokenServer)JWebSocketFactory.getServer("ts0")); } public void contextDestroyed(ServletContextEvent sce) { // stop the jWebSocket server sub system JWebSocketFactory.stop(); }

25 WebSocket Programmierung Businesslogik auf dem jWebSocket Server Plug-Ins (Server um eigene Funktionen erweitern) für applikationsübergreifende Standard-Funktionen Listener (Server in eigene Applikation einbinden) für anwendungs-/kundenspezifische Funktionen Channels für Message-Routing zwischen Clients und separate Anwendungskontexte jWebSocket – Stay Connected2511.10.2010

26 jWebSocket - Plug-Ins jWebSocket um Standard-Funktionen erweitern System-, Chat-, Streaming- und JDBC-Plug-In RPC/RRPC-, SharedObjects- und FileSharing-PlugIn API für eigene Plug-Ins MyPlugIn.jar als separates Produkt distributierbar, eigener Namespace (org.my.plugin.smsgateway) Leicht integrierbar/konfigurierbar über jWebSocket.xml LGPL Lizenz erlaubt auch kommerzielle Plug-Ins jWebSocket – Stay Connected2611.10.2010

27 jWebSocket - PlugIn-Chain jWebSocket – Stay Connected2711.10.2010

28 jWebSocket - Listener Eigene App um WebSocket Funktionen erweitern jWebSocketServer.jar einbinden Eigene Listener-Klasse erstellen durch Implementieren des WebSocketListener Interface Listener-Klasse registrieren (global am Server oder an Channel) Eingehende Tokens verarbeiten und Antworten senden jWebSocket – Stay Connected2811.10.2010

29 jWebSocket Listener - Code jWebSocket – Stay Connected2911.10.2010 public class JWebSocketTokenListenerSample implements WebSocketServerTokenListener { public void processOpened(WebSocketServerEvent aEvent) { log.debug("Client '" + aEvent.getSessionId() + "' connected."); } public void processPacket(WebSocketServerEvent aEvent, WebSocketPacket aPacket) { log.debug("Processing data packet '" + aPacket.getUTF8() + "'..."); } public void processToken( WebSocketServerTokenEvent aEvent, Token aToken) { log.debug("Client '" + aEvent.getSessionId() + "' sent Token: '" + aToken.toString() + "'."); String lNS = aToken.getNS(); String lType = aToken.getType(); if (lType != null && "my.namespace".equals(lNS)) { Token lResponse = aEvent.createResponse(aToken); if ("getInfo".equals(lType)) { lResponse.setString("vendor", JWebSocketCommonConstants.VENDOR); lResponse.setString("version", JWebSocketServerConstants.VERSION_STR); lResponse.setString("copyright", JWebSocketCommonConstants.COPYRIGHT); lResponse.setString("license", JWebSocketCommonConstants.LICENSE); } else { // unknown type in namespace returns error lResponse.setInteger("code", -1); lResponse.setString("msg", "Token type '" + lType + "' not supported in namespace '" + lNS + "'."); } aEvent.sendToken(lResponse); } } public void processClosed(WebSocketServerEvent aEvent) { log.debug("Client '" + aEvent.getSessionId() + "' disconnected."); } } } TokenServer lTS0 = (TokenServer) JWebSocketFactory.getServer("ts0"); lTS0.addListener(new JWebSocketTokenListenerSample());

30 jWebSocket - ListenerChain jWebSocket – Stay Connected3011.10.2010

31 jWebSocket - Channels Message-Routing via Channels Mehrere Apps oder Services auf einem Server Keine echte Logik - vielmehr Vermittlungsservice Server verwaltet Channels (Message-Queues) Subscribe/Unsubscribe Mechanismus Clients, Plug-Ins oder Listener hören global oder registrieren sich an einem oder mehreren Channels Antworten ebenfalls global oder kanalisiert jWebSocket – Stay Connected3111.10.2010

32 WebSocket - Sicherheit Authentifizierung und Autorisierung Integrierte SecurityFactory, Rechte and Rollen Mgmt API für JDBC, LDAP und OpenID (SSO), ab v0.11 Filterung Inbound und Outbound Paket- und Token-Filter Verschlüsselung SSL (wss://), transparent für die Applikation jWebSocket – Stay Connected3211.10.2010

33 Filterchain jWebSocket – Stay Connected3311.10.2010

34 jWebSocket - Listener (Code) jWebSocket – Stay Connected3411.10.2010 public class SampleFilter extends TokenFilter { public SampleFilter(String aId) { // do some optional initialization here... } public void processTokenIn(FilterResponse aResponse, WebSocketConnector aConnector, Token aToken) { TokenServer lServer = getServer(); User lUser = lServer.getUser(aConnector); if (lUser.isLocked()) { Token lToken = lServer.createAccessDenied(aToken); lServer.sendToken(aConnector, lToken); aResponse.rejectMessage(); return; } } public void processTokenOut(FilterResponse aResponse, WebSocketConnector aSource, WebSocketConnector aTarget, Token aToken) { if ( ) { aResponse.rejectMessage(); // optionally handle or log rejection here return; } }

35 Android - Dalvik VM Android Apps in Java Im Prinzip Java 1.5, inkl. Collections, Annotations etc. Googles 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 Connected3511.10.2010

36 Listener Gleiches API wie bei den Web Clients jWebSocket – Stay Connected3611.10.2010 public interface WebSocketClientListener { void processOpened(WebSocketClientEvent aEvent); void processPaket(WebSocketClientEvent aEvent, WebSocketPacket aPacket); void processClosed(WebSocketClientEvent aEvent); }

37 Low-Level-Interface Java Client für Android, Symbian und BlackBerry jWebSocket – Stay Connected3711.10.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); }

38 Java WebSocket Client jWebSocket – Stay Connected3811.10.2010 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 }

39 Android Demo App MainActivity Listview ConfigActivity URL Username Password jWebSocket – Stay Connected3911.10.2010

40 Android Fundamentals jWebSocket – Stay Connected4011.10.2010 WebSocket App Verbindung aufbauen Nachrichten empfangen Nachrichten senden Nachrichten broadcasten Verbindung trennen

41 Android Canvas Demo Online-Collaboration Mehrere Benutzer arbeiten am gleichen Dokument Beispiel: SharedCanvas jWebSocket – Stay Connected4111.10.2010

42 Android - Fotos übertragen Imagetransfer jWebSocket FileSystem Plug-In Benachrichtigung bei Änderungen Binärdaten werden Base64 codiert, Optimierung mit neuem Binärprotokoll umgehend erwartet http://jwebsocket.org/ Snapshot Demo! jWebSocket – Stay Connected4211.10.2010

43 Ausblick Wir haben noch viel vor... SSO und Authentification/Autorisation API Remote Procedure Calls (RPC und RRPC) Cloud API, Smart Grids und Cluster Shared Objects und FileSharing API JDBC Bridge und Database API Externe Service Nodes jWebSocket – Stay Connected4311.10.2010

44 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 Connected4411.10.2010

45 Vielen Dank für Ihre Aufmerksamkeit ! Fragen & Antworten Alexander Schulze Predrag Stojadinovic Forum & Download http://jwebsocket.org @jWebSocket jWebSocket – Stay Connected4511.10.2010


Herunterladen ppt "Stay Connected Realtime-Webapplikationen mit jWebSocket Alexander Schulze Predrag Stojadinovic jWebSocket – Open Source Cross-Browser/Cross-Platform WebSocket."

Ähnliche Präsentationen


Google-Anzeigen