SlideShare ist ein Scribd-Unternehmen logo
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 1 / 16© SpeedPartner GmbH
Websockets:
Leichtgewichtige Verbindungen
für Web-Applikationen
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 2 / 16© SpeedPartner GmbH
Über mich
● Stefan Neufeind
● Mit-Geschäftsführer der SpeedPartner GmbH aus Neuss
ein Internet-Service-Provider (ISP)
● Individuelle TYPO3-Entwicklungen
● Hosting, Housing, Managed Services
● Domains / Domain-Services
● IPv6, DNSSEC, ...
● Aktive Mitarbeit im Community-Umfeld (PHP/PEAR, TYPO3, Linux)
● Freier Autor für z.B. t3n, iX, video2brain, ...
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 3 / 16© SpeedPartner GmbH
GET /2013/ HTTP/1.1
Host: www.linuxtag.org
Accept-Language: de,en;q=0.7,en-us;q=0.3
Accept-Encoding: gzip, deflate
[...]
„Klassische“ Kommunikation im WWW
Klassischer Fall für eine direkte http-Anfrage
1) Verbindung aufbauen
2) Anfrage senden
3) Antwort erhalten
4) Verbindung abbauen
HTTP/1.1 200 OK
Date: Sat, 25 May 2013 14:01:00 GMT
Content-Length: 245
Content-Type: text/html; charset=utf-8
[...]
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 4 / 16© SpeedPartner GmbH
„Klassische“ Kommunikation im WWW
Einschränkungen bei klassischem http/https:
● Reines Anfrage-Antwort-Modell
● Kommunikation muss durch den Client ausgelöst werden
● Server kann nur eine einzige, unmittelbare Antwort liefern
● Verzögerungen durch z.B. Verbindungsaufbau / -abbau
Wünschenswert:
● Flexibilität
● Kommunikation durch Client oder Server
● Gesteuert durch Anforderungen (z.B. Ereignisse)
statt Anfrage-Antwort
● Effizienz
● Geringer Overhead
● Vermeidung/Reduzierung von Verzögerungen
Lösungsansätze:
● Polling
● Mehrteilige HTTP-Antworten
(„multipart“)
● Keepalive
● Alternative Techniken/
Protokolle (???)
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 5 / 16© SpeedPartner GmbH
„Klassische“ Kommunikation im WWW
Lösungsansätze:
● Polling
● Neuladen durch Client initiiert
● ggf. in einem frame/iframe oder per AJAX
● Mehrteilige HTTP-Antworten („multipart“)
● Server hält Verbindung offen und behält die Steuerung
● ggf. in einem frame/iframe
● Bei kleinen Datenmengen/Nachrichten großer Overhead
● Keepalive
● Nachwievor einzelne Requests notwendig
● Reduziert jedoch den Overhead für Verbindungsaufbau etc.
● Alternative Techniken/Protokolle
● Nutzung von z.B. Java oder Flash
● Kommunikation an http/https „vorbei“
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 6 / 16© SpeedPartner GmbH
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:
dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, talk
Sec-WebSocket-Version: 13
Kommunikation per Websockets
Verlauf einer Websocket-Verbindung
1) Verbindung aufbauen
2) Anfrage senden
3) Antwort erhalten
4) Nutzung Websocket-Kanal
5) Verbindung abbauen
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:
S3pPLMBiTxaQ9kYG
zzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 7 / 16© SpeedPartner GmbH
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:
dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, talk
Sec-WebSocket-Version: 13
Kommunikation per Websockets
Verlauf einer Websocket-Verbindung
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:
S3pPLMBiTxaQ9kYG
zzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
Nach Request Upgrade der
Verbindung auf direkte Kommunikation
Eindeutiger Key pro Request,
üblicherweise UUID (128-bit)
Bestätigung des Upgrade Accept-Antwort durch Verknüpfung einer
festen GUID mit dem eindeutigen Key generiert
function key2accept($key) {
$guid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
$composed = $key . $guid;
$hashed = sha1($composed, TRUE);
return base64_encode($hashed);
}
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 8 / 16© SpeedPartner GmbH
Kommunikation per Websockets
Verbindungsaufbau:
● Protokollprefixe „ws://“ (http, Port 80, unverschlüsselt)
und „wss://“ (https, Port 443, verschlüsselt)
● Falls Proxy-Konfiguration auf Client erkannt Verwendung von „HTTP CONNECT“ für Tunnel
● Proxy-Support:
● https generell problemfreier als http (keine Prüfung der TLS-Inhalte durch Proxy)
● http erfordert für „HTTP Upgrade“ evtl. spezielle Konfiguration
● Sobald „HTTP Upgrade“ erkannt Durchleitung von Datenverkehr (passthrough, pipe)
● Nginx 1.4.0 (4/2013): Websocket-Support wird als „Feature“
● Varnish: Konfiguration einer Durchleitung per „pipe“ ausreichend
(https://www.varnish-cache.org/docs/3.0/tutorial/websockets.html)
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 9 / 16© SpeedPartner GmbH
Kommunikation per Websockets
Protokollversionen beachten:
● Hixie-75: 2/2010
Chrome 4, Safari 5.0.0
● Hixie-76, hybi-00: 5/2010
Chrome 6, Safari 5.0.1, Firefox 4 + Opera 11.00 (standardmäßig deaktiviert)
● Hybi-07: 4/2011
Firefox 6
● Hybi-10: 7/2011
Firefox 7 (PC + Android), Chrome 14
● RFC 6455: 12/2011
IE 10, Firefox 11 (PC + Android), Chrome 16, Safari 6, Opera 12.10
Quelle Übersicht: http://en.wikipedia.org/wiki/WebSocket
● Versionen untereinander teils stark inkompatibel (Header, Keys, ...)
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 10 / 16© SpeedPartner GmbH
Websockets vs. WebRTC ?
Unterschiedliche Ansätze:
● Websockets:
Kommunikation zwischen Client und Server
● WebRTC:
Realtime-Kommunikation zwischen Clients (P2P)
● Bereits in 2010: Demo für Client-Server-Videokonferenz per MediaStreamTransceiver
● Bisher keine allgemeine Lösung für Audio/Video per Websockets verfügbar
● WebRTC kann Websockets zum Verbindungsaufbau und Statusaustausch nutzen
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 11 / 16© SpeedPartner GmbH
Websocket auf dem Client
Native Nutzung per JavaScript möglich:
try{
var socket;
var host = "ws://localhost:8000/socket/server/startDaemon.php";
var socket = new WebSocket(host);
message('<p class="event">Socket Status: '+socket.readyState);
socket.onopen = function(){
message('<p class="event">Socket Status: '+socket.readyState+' (open)');
}
socket.onmessage = function(msg){
message('<p class="message">Received: '+msg.data);
}
socket.onclose = function(){
message('<p class="event">Socket Status: '+socket.readyState+' (Closed)');
}
} catch(exception){
message('<p>Error'+exception);
}
0 = CONNECTING
1 = OPEN
2 = CLOSED
Quelle: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 12 / 16© SpeedPartner GmbH
Unterstützung durch Frameworks
z.B. per Socket.IO: http://socket.io/
● Server (Node.js) sowie Client
● Fallbacks-Lösungen für auch für ältere Browser
● WebSocket
● Adobe Flash Socket
● AJAX long polling
● AJAX multipart streaming
● Forever Iframe
● JSONP Polling
● Breite Browser-Unterstützung:
● Internet Explorer 5.5+
● Safari 3+
● Google Chrome 4+
● Firefox 3+
● Opera 10.61+
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 13 / 16© SpeedPartner GmbH
Unterstützung durch Frameworks
z.B. per Wrench: http://wrench.readthedocs.org/en/latest/
● Server (PHP)
● Client nativ
z.B. per Ratchet: http://socketo.me/
● Server (PHP)
● Client nativ; Flash-Fallback z.B. per web-socket-js (https://github.com/gimite/web-socket-js)
#!/usr/bin/env php
<?php
require(__DIR__ . '/lib/SplClassLoader.php');
$classLoader = new SplClassLoader('Wrench', __DIR__ . '/lib');
$classLoader->register();
$server = new WrenchServer('ws://0.0.0.0:8080/', array(
'allowed_origins' => array('bohuco.net'),
));
$server->registerApplication('echo', new WrenchApplicationEchoApplication());
$server->run();
Quelle Übersicht: http://bohuco.net/blog/2012/12/wrench-the-new-html5-websocket-class-hero-for-php/
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 14 / 16© SpeedPartner GmbH
VNC-Client mit Websockets
noVNC: http://kanaka.github.io/noVNC/
● Nutzung von Websockets und Canvas
● Verschlüsselte Übertragung
● Keine Plugins o.ä. erforderlich
● Verwendung z.B. innerhalb
des Ganeti Web Manager
(https://code.osuosl.org/projects/51/wiki/VNC)
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 15 / 16© SpeedPartner GmbH
Fazit
Vorteile:
● Flexible Möglichkeit zur Kommunikation
● Geringe Datenmenge
● Geringe Last für Server und Client (im Gegensatz zu Polling)
● Direkte Möglichkeit für Rückmeldungen durch den Server (dauerhafte Verbindung)
Kritik:
● Browser-Unterstützung noch nicht „überall“ gegeben
● Unterschiedliche Protokollversionen (ältere Browser)
● Security bei „Passthrough“-Verbindungen (?)
Lösungen/Kompromisse:
● Nutzung von Frameworks mit „Fallback-Lösungen“
● Nutzung in kontrollierter Client-Umgebung (Intranet, ...)
Websockets: Leichtgewichtige Verbindungen
LinuxTag 2013, 25.05.2013
Seite: 16 / 16© SpeedPartner GmbH
Kontakt
Danke fürs Zuhören
sowie
viel Erfolg beim Testen
Link zu den Slides: http://talks.speedpartner.de/
Bei Fragen stehen wir selbstverständlich gerne zur Verfügung:
Stefan Neufeind, neufeind@speedpartner.de
SpeedPartner GmbH, http://www.speedpartner.de/

Weitere ähnliche Inhalte

ODP
Bidirektionale Verbindungen für Webanwendungen
PDF
NetBeans für PHP-Entwickler
PDF
Admincamp 2016 - Securing IBM Collaboration with TLS (German)
PDF
Wordpress-Installation
PDF
Anleitung zur Installation von Tomcat für Opencms
PDF
IBM Sametime 9.0.1 "basic" (aka. limited use)
PDF
WordPress-Webseiten umziehen / online stellen
PDF
2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group
Bidirektionale Verbindungen für Webanwendungen
NetBeans für PHP-Entwickler
Admincamp 2016 - Securing IBM Collaboration with TLS (German)
Wordpress-Installation
Anleitung zur Installation von Tomcat für Opencms
IBM Sametime 9.0.1 "basic" (aka. limited use)
WordPress-Webseiten umziehen / online stellen
2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group

Was ist angesagt? (14)

PDF
OpenWRT
PPTX
HTML5 und CSS3 - was jetzt schon möglich ist
PDF
MK2014 FileMaker Server 13 by Thomas Hahn
PDF
Vagrant - Einführung & Verwendung
PPTX
Internet Information Services (deutsch)
PPTX
Inside HTTP: Webdebugging mit FIddler
PDF
Single Sign-On Technologieüberblick
ODP
Ausfallsichere Kultur mit Plone
PPTX
Web Performance Optimierung (WPO)
PDF
IBM License Metric Tool 9.2.x (edcom 2017)
PDF
TYPO3 Performance (TYPO3camp München)
PDF
Parallele Installation von Ubuntu 16.04 Linux mit MS Windows 10 auf einem Not...
PDF
Realtime Web Applications with jWebSocket
ODP
TYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
OpenWRT
HTML5 und CSS3 - was jetzt schon möglich ist
MK2014 FileMaker Server 13 by Thomas Hahn
Vagrant - Einführung & Verwendung
Internet Information Services (deutsch)
Inside HTTP: Webdebugging mit FIddler
Single Sign-On Technologieüberblick
Ausfallsichere Kultur mit Plone
Web Performance Optimierung (WPO)
IBM License Metric Tool 9.2.x (edcom 2017)
TYPO3 Performance (TYPO3camp München)
Parallele Installation von Ubuntu 16.04 Linux mit MS Windows 10 auf einem Not...
Realtime Web Applications with jWebSocket
TYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
Anzeige

Ähnlich wie Websockets: Leichtgewichtige Verbindungen für Web-Applikationen (9)

PDF
HTML5 und node.js Grundlagen
PPTX
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
PDF
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
PDF
Making the internet faster HTTP/3 und QUIC
PPT
XML-Socket-Server zur Kommunikation mit Flash
PDF
Html5 workshop Peter Voringer
PDF
RESTful WebServices
PPTX
Webservices auf Basis von HTTP/2 und Servlet4
PDF
HTTP/2 – Ist das auch gut für java-basierte Webservices?
HTML5 und node.js Grundlagen
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Making the internet faster HTTP/3 und QUIC
XML-Socket-Server zur Kommunikation mit Flash
Html5 workshop Peter Voringer
RESTful WebServices
Webservices auf Basis von HTTP/2 und Servlet4
HTTP/2 – Ist das auch gut für java-basierte Webservices?
Anzeige

Mehr von SpeedPartner GmbH (20)

PDF
Extbase/Fluid: Kennenlernen und ausprobieren
PDF
Professional reports with SVG
PDF
Secure PHP environment
PDF
XUL - The future of user-interfaces on the web
PDF
PHP-Applikationen mit PEAR
PDF
PHP-Entwicklung mit PEAR
PDF
Web-Performance-Optimierung mit varnish
PDF
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
PDF
News from PEAR
PDF
PEAR - An introduction
PDF
Suchmaschinen-Optimierung
PDF
.EU – eine neue Top-Level-Domain
PDF
Leben und Arbeiten in einer Community
PDF
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
PDF
Sicherer Wegweiser im Internet: DNSSEC im praktischen Einsatz
PDF
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
PDF
Web-Performance-Optimierung mit varnish
PDF
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
PDF
Sicherer Wegweiser im Internet: DNSSEC im praktischen Einsatz
PDF
Deploying IPv6 - planning, common pitfalls and security-considerations
Extbase/Fluid: Kennenlernen und ausprobieren
Professional reports with SVG
Secure PHP environment
XUL - The future of user-interfaces on the web
PHP-Applikationen mit PEAR
PHP-Entwicklung mit PEAR
Web-Performance-Optimierung mit varnish
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
News from PEAR
PEAR - An introduction
Suchmaschinen-Optimierung
.EU – eine neue Top-Level-Domain
Leben und Arbeiten in einer Community
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
Sicherer Wegweiser im Internet: DNSSEC im praktischen Einsatz
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
Web-Performance-Optimierung mit varnish
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
Sicherer Wegweiser im Internet: DNSSEC im praktischen Einsatz
Deploying IPv6 - planning, common pitfalls and security-considerations

Websockets: Leichtgewichtige Verbindungen für Web-Applikationen

  • 1. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 1 / 16© SpeedPartner GmbH Websockets: Leichtgewichtige Verbindungen für Web-Applikationen
  • 2. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 2 / 16© SpeedPartner GmbH Über mich ● Stefan Neufeind ● Mit-Geschäftsführer der SpeedPartner GmbH aus Neuss ein Internet-Service-Provider (ISP) ● Individuelle TYPO3-Entwicklungen ● Hosting, Housing, Managed Services ● Domains / Domain-Services ● IPv6, DNSSEC, ... ● Aktive Mitarbeit im Community-Umfeld (PHP/PEAR, TYPO3, Linux) ● Freier Autor für z.B. t3n, iX, video2brain, ...
  • 3. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 3 / 16© SpeedPartner GmbH GET /2013/ HTTP/1.1 Host: www.linuxtag.org Accept-Language: de,en;q=0.7,en-us;q=0.3 Accept-Encoding: gzip, deflate [...] „Klassische“ Kommunikation im WWW Klassischer Fall für eine direkte http-Anfrage 1) Verbindung aufbauen 2) Anfrage senden 3) Antwort erhalten 4) Verbindung abbauen HTTP/1.1 200 OK Date: Sat, 25 May 2013 14:01:00 GMT Content-Length: 245 Content-Type: text/html; charset=utf-8 [...]
  • 4. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 4 / 16© SpeedPartner GmbH „Klassische“ Kommunikation im WWW Einschränkungen bei klassischem http/https: ● Reines Anfrage-Antwort-Modell ● Kommunikation muss durch den Client ausgelöst werden ● Server kann nur eine einzige, unmittelbare Antwort liefern ● Verzögerungen durch z.B. Verbindungsaufbau / -abbau Wünschenswert: ● Flexibilität ● Kommunikation durch Client oder Server ● Gesteuert durch Anforderungen (z.B. Ereignisse) statt Anfrage-Antwort ● Effizienz ● Geringer Overhead ● Vermeidung/Reduzierung von Verzögerungen Lösungsansätze: ● Polling ● Mehrteilige HTTP-Antworten („multipart“) ● Keepalive ● Alternative Techniken/ Protokolle (???)
  • 5. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 5 / 16© SpeedPartner GmbH „Klassische“ Kommunikation im WWW Lösungsansätze: ● Polling ● Neuladen durch Client initiiert ● ggf. in einem frame/iframe oder per AJAX ● Mehrteilige HTTP-Antworten („multipart“) ● Server hält Verbindung offen und behält die Steuerung ● ggf. in einem frame/iframe ● Bei kleinen Datenmengen/Nachrichten großer Overhead ● Keepalive ● Nachwievor einzelne Requests notwendig ● Reduziert jedoch den Overhead für Verbindungsaufbau etc. ● Alternative Techniken/Protokolle ● Nutzung von z.B. Java oder Flash ● Kommunikation an http/https „vorbei“
  • 6. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 6 / 16© SpeedPartner GmbH GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com Sec-WebSocket-Protocol: chat, talk Sec-WebSocket-Version: 13 Kommunikation per Websockets Verlauf einer Websocket-Verbindung 1) Verbindung aufbauen 2) Anfrage senden 3) Antwort erhalten 4) Nutzung Websocket-Kanal 5) Verbindung abbauen HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: S3pPLMBiTxaQ9kYG zzhZRbK+xOo= Sec-WebSocket-Protocol: chat
  • 7. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 7 / 16© SpeedPartner GmbH GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com Sec-WebSocket-Protocol: chat, talk Sec-WebSocket-Version: 13 Kommunikation per Websockets Verlauf einer Websocket-Verbindung HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: S3pPLMBiTxaQ9kYG zzhZRbK+xOo= Sec-WebSocket-Protocol: chat Nach Request Upgrade der Verbindung auf direkte Kommunikation Eindeutiger Key pro Request, üblicherweise UUID (128-bit) Bestätigung des Upgrade Accept-Antwort durch Verknüpfung einer festen GUID mit dem eindeutigen Key generiert function key2accept($key) { $guid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; $composed = $key . $guid; $hashed = sha1($composed, TRUE); return base64_encode($hashed); }
  • 8. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 8 / 16© SpeedPartner GmbH Kommunikation per Websockets Verbindungsaufbau: ● Protokollprefixe „ws://“ (http, Port 80, unverschlüsselt) und „wss://“ (https, Port 443, verschlüsselt) ● Falls Proxy-Konfiguration auf Client erkannt Verwendung von „HTTP CONNECT“ für Tunnel ● Proxy-Support: ● https generell problemfreier als http (keine Prüfung der TLS-Inhalte durch Proxy) ● http erfordert für „HTTP Upgrade“ evtl. spezielle Konfiguration ● Sobald „HTTP Upgrade“ erkannt Durchleitung von Datenverkehr (passthrough, pipe) ● Nginx 1.4.0 (4/2013): Websocket-Support wird als „Feature“ ● Varnish: Konfiguration einer Durchleitung per „pipe“ ausreichend (https://www.varnish-cache.org/docs/3.0/tutorial/websockets.html)
  • 9. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 9 / 16© SpeedPartner GmbH Kommunikation per Websockets Protokollversionen beachten: ● Hixie-75: 2/2010 Chrome 4, Safari 5.0.0 ● Hixie-76, hybi-00: 5/2010 Chrome 6, Safari 5.0.1, Firefox 4 + Opera 11.00 (standardmäßig deaktiviert) ● Hybi-07: 4/2011 Firefox 6 ● Hybi-10: 7/2011 Firefox 7 (PC + Android), Chrome 14 ● RFC 6455: 12/2011 IE 10, Firefox 11 (PC + Android), Chrome 16, Safari 6, Opera 12.10 Quelle Übersicht: http://en.wikipedia.org/wiki/WebSocket ● Versionen untereinander teils stark inkompatibel (Header, Keys, ...)
  • 10. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 10 / 16© SpeedPartner GmbH Websockets vs. WebRTC ? Unterschiedliche Ansätze: ● Websockets: Kommunikation zwischen Client und Server ● WebRTC: Realtime-Kommunikation zwischen Clients (P2P) ● Bereits in 2010: Demo für Client-Server-Videokonferenz per MediaStreamTransceiver ● Bisher keine allgemeine Lösung für Audio/Video per Websockets verfügbar ● WebRTC kann Websockets zum Verbindungsaufbau und Statusaustausch nutzen
  • 11. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 11 / 16© SpeedPartner GmbH Websocket auf dem Client Native Nutzung per JavaScript möglich: try{ var socket; var host = "ws://localhost:8000/socket/server/startDaemon.php"; var socket = new WebSocket(host); message('<p class="event">Socket Status: '+socket.readyState); socket.onopen = function(){ message('<p class="event">Socket Status: '+socket.readyState+' (open)'); } socket.onmessage = function(msg){ message('<p class="message">Received: '+msg.data); } socket.onclose = function(){ message('<p class="event">Socket Status: '+socket.readyState+' (Closed)'); } } catch(exception){ message('<p>Error'+exception); } 0 = CONNECTING 1 = OPEN 2 = CLOSED Quelle: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
  • 12. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 12 / 16© SpeedPartner GmbH Unterstützung durch Frameworks z.B. per Socket.IO: http://socket.io/ ● Server (Node.js) sowie Client ● Fallbacks-Lösungen für auch für ältere Browser ● WebSocket ● Adobe Flash Socket ● AJAX long polling ● AJAX multipart streaming ● Forever Iframe ● JSONP Polling ● Breite Browser-Unterstützung: ● Internet Explorer 5.5+ ● Safari 3+ ● Google Chrome 4+ ● Firefox 3+ ● Opera 10.61+
  • 13. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 13 / 16© SpeedPartner GmbH Unterstützung durch Frameworks z.B. per Wrench: http://wrench.readthedocs.org/en/latest/ ● Server (PHP) ● Client nativ z.B. per Ratchet: http://socketo.me/ ● Server (PHP) ● Client nativ; Flash-Fallback z.B. per web-socket-js (https://github.com/gimite/web-socket-js) #!/usr/bin/env php <?php require(__DIR__ . '/lib/SplClassLoader.php'); $classLoader = new SplClassLoader('Wrench', __DIR__ . '/lib'); $classLoader->register(); $server = new WrenchServer('ws://0.0.0.0:8080/', array( 'allowed_origins' => array('bohuco.net'), )); $server->registerApplication('echo', new WrenchApplicationEchoApplication()); $server->run(); Quelle Übersicht: http://bohuco.net/blog/2012/12/wrench-the-new-html5-websocket-class-hero-for-php/
  • 14. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 14 / 16© SpeedPartner GmbH VNC-Client mit Websockets noVNC: http://kanaka.github.io/noVNC/ ● Nutzung von Websockets und Canvas ● Verschlüsselte Übertragung ● Keine Plugins o.ä. erforderlich ● Verwendung z.B. innerhalb des Ganeti Web Manager (https://code.osuosl.org/projects/51/wiki/VNC)
  • 15. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 15 / 16© SpeedPartner GmbH Fazit Vorteile: ● Flexible Möglichkeit zur Kommunikation ● Geringe Datenmenge ● Geringe Last für Server und Client (im Gegensatz zu Polling) ● Direkte Möglichkeit für Rückmeldungen durch den Server (dauerhafte Verbindung) Kritik: ● Browser-Unterstützung noch nicht „überall“ gegeben ● Unterschiedliche Protokollversionen (ältere Browser) ● Security bei „Passthrough“-Verbindungen (?) Lösungen/Kompromisse: ● Nutzung von Frameworks mit „Fallback-Lösungen“ ● Nutzung in kontrollierter Client-Umgebung (Intranet, ...)
  • 16. Websockets: Leichtgewichtige Verbindungen LinuxTag 2013, 25.05.2013 Seite: 16 / 16© SpeedPartner GmbH Kontakt Danke fürs Zuhören sowie viel Erfolg beim Testen Link zu den Slides: http://talks.speedpartner.de/ Bei Fragen stehen wir selbstverständlich gerne zur Verfügung: Stefan Neufeind, neufeind@speedpartner.de SpeedPartner GmbH, http://www.speedpartner.de/