Push-Model
# Push-Model

Das Push-Model ist in der Anwendungsprogrammierung ein Entwurfsmuster zur Datenübertragung, bei dem der Datenlieferant die Daten überwacht. Erkennt dieser Änderungen, sendet er die geänderten Werte an den Datenempfänger. Der Empfänger verhält sich passiv und wartet, nachdem er sich nach dem Beobachter-Muster angemeldet hat, auf neue Werte. Das Gegenteil ist das Pull-Model.

Vorteile:

* Daten werden nur übertragen, wenn sich tatsächlich Werte geändert haben.
* Der Sender kann die Daten unmittelbar nach Wertänderung absenden und benötigt deshalb keine zusätzlichen Puffer.

Nachteile:

* Der Datenlieferant benötigt eine Auswertelogik für die Änderungserkennung.
* Nach Verlust eines Wertes bei der Übertragung sind Sender und Empfänger asynchron. Diese Asynchronität wird erst bei der nächsten Wertänderung behoben.

## Anwendungsbeispiele

### Webpush

Der Webpush-Vorschlag der Internet Engineering Task Force ist ein einfaches Protokoll, um Echtzeit-Ereignisse wie eingehende Anrufe oder Nachrichten zu übermitteln, die zeitnah zugestellt (oder "gepusht") werden können. Das Protokoll verwendet HTTP Version 2 und konsolidiert alle Echtzeit-Ereignisse in einer einzigen Sitzung, was eine effizientere Nutzung der Netzwerk- und Funkressourcen gewährleistet. Ein einziger Dienst konsolidiert alle Ereignisse und verteilt diese Ereignisse an die Anwendungen, sobald sie eintreffen. Doppelte Overhead-Kosten werden vermieden, da nur eine Sitzung benötigt wird. Web-Benachrichtigungen sind Teil des W3C-Standards und definieren eine API für Endbenutzer-Benachrichtigungen. Eine Benachrichtigung ermöglicht es, den Benutzer außerhalb des Kontexts einer Webseite über ein Ereignis, wie beispielsweise die Zustellung von E-Mails, zu benachrichtigen. Als Teil dieser vom W3C definierten Standard-Push-API wurde sie von den Webbrowsern Chrome, Firefox, Edge und Safari implementiert.

### HTTP-Server-Push

HTTP-Server-Push (auch bekannt als HTTP-Streaming) wiederum ist ein Mechanismus zum Senden nicht angeforderter (asynchroner) Daten von einem Webserver an einen Webbrowser. HTTP-Server-Push kann durch einen von mehreren Mechanismen erreicht werden.

Als Teil von HTML5 ermöglicht die WebSocket-API einem Webserver und einem Client die Kommunikation über eine Vollduplex-TCP-Verbindung.

Im Allgemeinen beendet der Webserver eine Verbindung nicht, nachdem Antwortdaten an einen Client gesendet wurden. Der Webserver lässt die Verbindung offen, sodass beim Eintreten eines Ereignisses (z. B. einer Änderung der internen Daten, die einem oder mehreren Clients gemeldet werden muss), dieses sofort versendet werden kann. Andernfalls müsste das Ereignis, bis die nächste Anfrage des Clients eingeht, in die Warteschlange gestellt werden. Die meisten Webserver bieten diese Funktionalität über CGI an (z. B. Non-Parsed-Header-Skripte auf Apache HTTP Server). Der zugrundeliegende Mechanismus für diesen Ansatz ist die Chunked-Transfer-Kodierung.

Ein weiterer Mechanismus hängt mit einem speziellen MIME-Type namens multipart/x-mixed-replace zusammen, der 1995 von Netscape eingeführt wurde. Webbrowser interpretieren ihn als ein Dokument, das sich ändert, sobald der Server eine neue Version an den Client schiebt. Er wird auch heute noch von Firefox, Opera und Safari unterstützt, vom Internet Explorer jedoch ignoriert und von Google Chrome nur teilweise unterstützt. Er kann auch auf HTML-Dokumente und für das Streaming von Bildern in Webcam-Anwendungen angewendet werden.

Der Vorschlag Web Applications 1.0 der WHATWG enthält einen Mechanismus, um Inhalte an den Client zu pushen. Am 1. September 2006 implementierte der Webbrowser Opera dieses neue, seinerzeit experimentelle System in einer Funktion namens Server-Sent Events, die nun als Teil von HTML5 standardisiert wird.

Falls HTTP-Server-Push nicht anwendbar ist, kann als Alternative long Polling verwendet werden.

### Push-Benachrichtigung

Eine Push-Benachrichtigung ist eine erzwungene Nachricht. Sie wird vom Backend-Server oder einer Anwendung an die Benutzerschnittstelle „gepusht“, z. B. (aber nicht beschränkt auf) mobile Anwendungen und Desktop-Anwendungen. Push-Benachrichtigungen wurden von Apple erstmals 2009 eingeführt.

2010 veröffentlichte Google seinen eigenen Dienst, Google Cloud to Device Messaging. Inzwischen wurde er durch Google Cloud Messaging und dann Firebase Cloud Messaging ersetzt.

Im November 2015 kündigte Microsoft an, dass der Windows-Benachrichtigungsdienst erweitert wird, um die Architektur der Windows-Plattform zu nutzen, sodass Push-Benachrichtigungen an Windows 10, Windows 10 Mobile, Xbox sowie an andere unterstützte Plattformen mit universellen API-Aufrufen und POST-Anfragen gesendet werden können.

Push-Benachrichtigungen werden hauptsächlich in 2 Ansätze unterteilt, lokale Benachrichtigungen und entfernte Benachrichtigungen.

* Bei lokalen Benachrichtigungen plant die Anwendung die Benachrichtigung mit dem Betriebssystem des lokalen Geräts oder setzt sie alternativ als Timer in der Anwendung selbst, wenn sie kontinuierlich im Hintergrund laufen kann. Wenn die geplante Zeit des Ereignisses erreicht ist oder die programmierte Bedingung des Ereignisses erfüllt ist, wird die Meldung in der Benutzeroberfläche der Anwendung angezeigt.
* Remote-Benachrichtigungen werden über einen Remote-Server abgewickelt. In diesem Szenario muss die Client-Anwendung auf dem Server mit einem eindeutigen Schlüssel (z. B. einer UUID) registriert werden. Der Server sendet dann die Nachricht gegen den eindeutigen Schlüssel ab, um die Nachricht über ein vereinbartes Client-Server-Protokoll wie HTTP oder XMPP an die Client-Anwendung zu übermitteln und der Client zeigt die empfangene Nachricht an. Wenn die Push-Benachrichtigung eintrifft, kann sie kurze Benachrichtigungen und Nachrichten übermitteln, Badges auf Anwendungssymbole setzen, die Benachrichtigungs-LED blinken oder kontinuierlich leuchten lassen oder Warntöne abspielen, um die Aufmerksamkeit der Benutzer zu erregen. Push-Benachrichtigungen werden von Anwendungen in der Regel dazu verwendet, die Aufmerksamkeit der Benutzer auf Informationen zu lenken. Der Inhalt der Meldungen kann in die folgenden Beispielkategorien eingeteilt werden:
   * Chat-Nachrichten, z. B.: Nachrichten aus dem Facebook-Messenger, die von anderen Benutzern gesendet werden.
   * Anbieter-Sonderangebote, z. B.: Ein Unternehmen möchte seine Angebote den Kunden gegenüber bewerben.
   * Erinnerung an Ereignisse, z. B.: Eine Anwendung kann es dem Nutzer ermöglichen, sich zu einem bestimmten Zeitpunkt erinnern zu lassen.
   * Abonnierte Themen ändern sich, z. B.: Benutzer möchten vielleicht Aktualisierungen bezüglich des Wetters an ihrem Standort erhalten oder eine Webseite überwachen, um Änderungen zu verfolgen

Echtzeit-Push-Benachrichtigungen können Datenschutzprobleme aufwerfen, da sie dazu verwendet werden können, eine Verbindung zwischen virtuellen Identitäten von Social-Network-Pseudonymen an die realen Identitäten der Smartphone-Besitzer herzustellen.

