Entwurf
und
skalierbare Implementierung
eines
erweiterten Facebook Messengers
gliederung
- Motivation
- Anforderungen
- Entwurf
- React
- Demonstration
Datendiebstähle
1,5 Milliarden
140 Millionen
76 Millionen
- Yahoo
- eBay
- J. P. Morgan
- Daten unverschlüsselt auf Server
- schwer zu löschen
- Verschlüsselung nur zwischen zwei Handys
Funktionale Anforderungen
- Standardfunktionen
- Ende-zu-Ende-Verschlüsselung
- Zusatzfunktionen
Nicht-funktionale Anforderungen
- Plattformunabhängigkeit
- zeitlich bedingt nur Desktop-UI
- Skalierbarkeit
Skalierbarkeit
- Server
- CPU, RAM, Traffic etc. proportional zur
Anzahl der Nutzer - O(N)
- CPU, RAM, Traffic etc. proportional zur
- Client
- Effizienz unabhängig von Anzahl der
Programmierer und Codezeilen - Performanz auch bei komplexerem
Front-End gewährleistet
- Effizienz unabhängig von Anzahl der
keine offizielle API
- Browser Extension
- inoffizielle API
- Facebook Chat API
IP-basierte Sperren
-
lokaler Node.js Server
- auf Smartphones nur über Umwege
- Termux, J2V8
- Intranet, Tunneling
- auf Smartphones nur über Umwege
Schlüsselaustausch
Chat
Front-End-Framework
- Xamarin, Titanium, Cordova
- primär für Smartphones
-
React
- alle Plattformen
- native Apps mit React Native
- Nutzer: Facebook, Instagram, WhatsApp Web,
Twitter, Dropbox, Netflix, ...
PerformanZ
Quelle: http://chrisharrington.github.io/demos/performance/
- Grund: virtuelles DOM
Hot Reloading
- Injizieren von Codeänderungen zur Laufzeit
- erfordert Pure Functions
- keine Seiteneffekte
- Component = Funktion von Properties und State (React)
- Reducer = Funktion von Action und State (Redux)
- keine Seiteneffekte
- leicht zu testen
Minimale API
- nur 2 essentielle Methoden
- ReactDOM.render(...), React.createElement(...)
- this.props, propTypes, defaultProps
- this.state, this.setState
-
Lifecycle-Methoden
- componentWillUpdate, componentDidUpdate, ...
JSX
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
"h1",
{className: "greeting"},
"Hello, world!"
);
MVC
Flux
Redux
Reducer
function reducer(state, action) {
switch (action.type) {
case EXAMPLE_ACTION:
return state.set("example", action.payload);
default:
return state;
}
}
Bachelorarbeit kurz
By Jan Kleiss
Bachelorarbeit kurz
Entwurf und skalierbare Implementierung eines erweiterten Facebook Messengers
- 380