In jedem modernen Internetdienst gibt es nur zwei Hauptfunktionen:
- Die erste ist die Benutzerautorisierung.
- Das zweite ist das sofortige Senden eines Ereignisses vom Server an den Client.
Der erste Punkt bedarf meiner Meinung nach keiner Erklärung.
Der zweite Punkt ist die Client-Server-Technologie, aber umgekehrt. Der Client stellt nicht regelmäßig eine Anfrage an den Server - gibt es neue Nachrichten? Wenn ein bestimmtes Ereignis eintritt, sendet der Server die Nachricht sofort an den Client.
Zum besseren Verständnis ist der Dienst keine bestimmte Kugel in einem Vakuum. Service kann dargestellt werden als:
- Ein Ordner mit Dateien in der Cloud. Informationen zum Ändern, Hinzufügen und Löschen werden an andere Benutzer oder den aktuellen Benutzer, jedoch an andere Geräte gesendet.
- Ein Computerprogramm zum Lesen von Serverprotokollen, bei dem "Fehler" -Datensätze angezeigt werden und der den Inhalt des Datensatzes auf einem Mobiltelefon an den Benutzer sendet.
- Video-Guckloch (Kamera), das Bilder macht, wenn Sie sich in der Nähe der Wohnungstür bewegen.
- Ein Dienst, der Telemetrie von einer Android-Auto-Anwendung empfängt.
- Ein Dienst ähnlich dem vorherigen Absatz, mit dem Sie herausfinden können, ob ein Kind die Schule erreicht hat oder von der Schule nach Hause gekommen ist.
Die Liste kann unbegrenzt erweitert werden. Als Beispiel werden nur die bekanntesten Anwendungsfälle angegeben.
Fast alle Beispiele von Diensten können in Form eines "Boten" dargestellt werden. Ein Teil der Beispiele wurde genau so beschrieben: Ich sah Artikel darüber, wie man die Kamera anschließt und Bilder an einen berühmten Boten sendet.
Vor nicht allzu langer Zeit gab es einen Artikel, in dem Außenstehende den Kameradienst anstelle künstlicher Intelligenz in den Augen der Tür beobachteten. Ich werde mich nicht auf kostenlose Dienstleistungen von großen "guten" Unternehmen konzentrieren. Wie sie im berühmten Sprichwort „Freier Käse passiert in einer Mausefalle“ sagen und von einem anderen Sprichwort geleitet: „Ihr Hemd ist näher an Ihrem Körper“, ist Ihr „Service“ besser.
Der Serverskriptcode ist offen und kostenlos
Ich habe node.js socket.io postgreSQL für die Implementierung ausgewählt, die erste Version vor mehr als zwei Jahren implementiert und der Dienst war eng mit 1c
https://infostart.ru/public/545047/ verbunden . Sie hatten noch nirgendwo einen Interaktionsserver angekündigt. Aber es ist lange her, im Moment ist der Serverteil in keiner Weise mit dem genannten Programm verbunden, der Clientteil kann als externe Verarbeitung oder Erweiterung integriert werden.
Der gewählte Name ist signifikant - "push0k". Der erste Teil stammt aus der Phrase "Push-Nachricht", das zweite bekannte englische Okay in abgekürzter Form, wird aber für die höchstwertige durch Null geschrieben.
In diesem Fall handelt es sich nicht um einen „kostenlosen Käse in einer Mausefalle“, da für die Arbeit über das Internet ein Windows-, Linux- und MacOS-Computer (Server) erforderlich ist. Sie benötigen eine externe IP-Adresse, die möglicherweise weitergeleitet wird. Vorzugsweise der Domänenname, der der externen IP-Adresse zugeordnet ist. Es ist auch wünschenswert, aber nicht erforderlich, kein selbstsigniertes Zertifikat zu verwenden, das einem Domänennamen zugeordnet ist.
Es gibt keine Hardwareanforderungen als solche, es kann auf Heimnasen funktionieren, wo es Docker gibt. Docker in nas bedeutet x86-64-Architektur, und postgreSQL kann in solchen nas ohne Docker nicht installiert werden. Ein genaues Verständnis darüber, wie viele Clients ein solcher Server unterstützen kann, hängt von den Aufgaben ab - der Logik des Dienstes und dem zwischen den Clients übertragenen Datenverkehr.
Serverbeschreibung:
Der Server verwendet zusätzliche Module:
- socket.io - das Modul fügt ein Websocket-Protokoll mit einer Tonne ext hinzu. Möglichkeiten.
- node-postgres - Modul zur Kommunikation mit dem postgreSQL-Datenbankserver.
- pm2 ist ein Modul zum Starten mehrerer Serverprozesse mit einem Load Balancer.
Serverdateien:
- Starter.js - http (s) Service, können Sie das Server Admin Panel sagen. Durch diesen Dienst werden die Einstellungen geändert und die Prozesse des Hauptwebsocket-Servers gestartet.
- push0k.js ist der Hauptwebsocket-Server.
- Starter_cfg.js - Einstellungen für das Server-Verwaltungsskript. Verbindung zu postgreSQL und Dateien für die https-Verbindung. Dateien für https-Verbindungen sowie der Domänenname können aus Gründen der Sicherheit vom Hauptserver abweichen. Sie wird beim ersten Start manuell geändert.
- config.js - die Grundeinstellungen des gesamten Servers.
- package.js - Dateibeschreibung Version Autor Module für die Arbeit erforderlich.
- push0kStructure.sql - Dateibeschreibung der postgreSQL-Datenbank für die Erstinitialisierung, eine leere Datenbank.
Installation:
1. Zunächst müssen Sie node.js
nodejs.org/en/download installieren
2. PostgreSQL muss auch auf dem lokalen Netzwerkcomputer oder auf demselben
postgrespro.ru/products/download installiert seinAuf dem postgreSQL-Server müssen die Datei "push0kStructure.sql" oder fast alle Abfragen aus dieser Datei ausgeführt werden, um eine Datenbank mit den erforderlichen Tabellen zu erstellen.
3. Laden Sie die ersten fünf Serverdateien mit Ausnahme von push0kStructure.sql in ein beliebiges Computerverzeichnis herunter.
4. Bearbeiten Sie in einem beliebigen Texteditor die Datei "Starter_cfg.js". Es ist wichtig, die Parameter für die Verbindung zum postgreSQL-Server anzugeben und den Port für die Verbindung zum administrativen Teil des push0k-Servers festzulegen.
5. Starten Sie das Terminal (Konsole) und verwenden Sie den Befehl "cd / path / your / directory /", um zum Serverdateiverzeichnis zu gelangen. Der im Terminalbefehl angegebene Pfad sollte von Punkt 3 stammen.
6. Führen Sie den Befehl im Terminal „npm install“ aus, um weitere Module zu installieren.
Führen Sie den Befehl im Terminal "node Starter.js" aus, um den Verwaltungsdienst zu starten.
7. Laden Sie das Administratorprogramm push0k herunter und installieren Sie es. Im Websocket "push0k admin" werden grundlegende Parameter, Serverport, Anzahl der Prozesse und viele andere konfiguriert. Sie können den Start und Stopp von Serverprozessen steuern, Benutzer und deren Räume (Gruppen) erstellen und verwalten.
Push0k-Administratoranwendung

Die Anwendung erfolgt auf elektronischem Wege mit vue.js. Im Inneren ist eine Art Fenstersystem implementiert, kleine modale Dialoge können wie Fenster gezogen und abgelegt werden, Fenstertitel für Fenster werden ähnlich wie in Windows 10 für Mac OS wie in neueren Versionen erstellt, jedoch bisher ohne Berücksichtigung des dunklen Themas. Für Linux, das ich später kompilieren werde, ist es mit den Dialogtiteln etwas komplizierter. Ich denke, es wird wie in Ubuntu sein und, wenn nicht Ubuntu, dann 10 Style gewinnen. Der Speicherverbrauch in Win 10 und Mac OS über 150 Megabyte wurde nicht gesehen.
In früheren Versionen war es nicht möglich, Animationen hinzuzufügen, ein wenig ohne Fanatismus. Die zuvor beschriebenen Dialoge - Fenster werden in der Mitte des Anwendungsfensters angezeigt und nehmen beim Schließen allmählich zu, fliegen in die Mitte und nehmen ab. Außerdem werden Tastendrücke und erforderliche Felder animiert.

Während der Implementierung gab es einen großen Wunsch, ein dunkles Thema zu erstellen, aber da es noch kein helles Thema gab, musste ich mich nur mit dem Schaltflächenfeld auf der rechten Seite zufrieden geben. Unter Mac OS hat dieser einzige dunkle Teil einen Lebendigkeitseffekt, dh er ist teilweise transparent, ähnlich wie die meisten Fenster der Standardschnittstelle. Leider konnte unter Windows ein ähnlicher Effekt, der als fließendes Design bezeichnet wird, nicht erzielt werden, da es in Windows keine ähnliche Funktionalität für Elektronen gibt.
Wie bereits erwähnt, verwendet das Steuerelement die Protokolle http und ws (Websocket). Es ist möglich, sichere https- und wss-Verbindungen zu verwenden. Bei sicheren Verbindungen können Sie die Daten der verwendeten Zertifikate anzeigen. Ähnlich wie bei Browsern wird das Symbol "Sperren" verwendet - die Verbindung ist sicher, "Sperre öffnen" - die Verbindung ist unsicher. Und ohne Symbole - eine sichere Verbindung wird nicht verwendet.

Allgemeine Logik
Ich habe noch nie eine solche Anwendung gesehen. Während der Entwicklung wurde ich von der Tatsache geleitet, dass ich selbst an der Überwachung interessiert sein würde und welche Parameter in der Statistik zu sehen sind.
Beispielsweise gibt es in der Verbindungstabelle für jede Verbindung die Daten "Verbindungszeit", "Autorisierungszeit", "Synchronisationszeit". Mit dem ersten können Sie verstehen, wie schnell die Verbindung "ws: //" oder das geschützte "wss: //" hergestellt wird. Die zweite - nach der Verbindung wird eine Nachricht mit Autorisierungsdaten separat gesendet. Während der Autorisierung wird eine Benutzerüberprüfungsanforderung ausgeführt und eine Kennwort-Hash-Prüfung ist für jede Verbindung eindeutig. Drittens ist die Zeit für den Empfang neuer Nachrichten und neuer oder aktualisierter Referenzdaten. Außerdem werden im Allgemeinen die Versionen von node.js, socket.io und anderen beschriebenen Daten gespeichert, sodass Sie nachvollziehen können, wie sich die Aktualisierung von node.js oder des Moduls separat auf die Geschwindigkeit ausgewirkt hat oder welche Auswirkungen eine Serververfeinerung haben könnte.

Im obigen Beispiel wird nur ein kleiner Teil dieser Daten beschrieben. In einer separaten Tabelle werden außerdem Zeit, Größe und Geschwindigkeit von MB / s gespeichert. Datensynchronisation herunterladen. In derselben Tabelle werden die Daten zum Herunterladen von Anhangsdateien auf den Server und zum Herunterladen dieser Daten vom Server gespeichert.
Die Zeit für die Berechnung der Geschwindigkeit wird je nach Situation auf dem Client oder Server berechnet. Es ist unmöglich, die Zeit sowohl des Servers als auch des Clients zu verwenden, da sie nicht perfekt synchronisiert werden kann. Dies führt zu einer kleinen Verzögerung der Ping-Größe (Zustellbestätigung) zwischen Client und Server. Beim Hochladen oder Herunterladen großer Dateien ist die beschriebene Verzögerung nicht signifikant.
In der Verbindungstabelle sehen Sie die geschlossene Verbindung mit den Daten "übertragenes Byte", "empfangenes Byte" und "Größe" der Synchronisationsdaten mehr als das "übertragene Byte". Beim Synchronisieren von Daten wird die automatische Komprimierung von socket.io verwendet. Beim Herunterladen oder Herunterladen von Anhängen ist die automatische Komprimierung deaktiviert, da sich das Komprimieren bereits komprimierter Dateien häufig negativ auf die Geschwindigkeit auswirkt.
Wie am Anfang des Artikels geschrieben, war es nie ein Ziel, einen gemeinsamen Dienst zu erstellen und so viele Benutzer wie möglich damit zu verbinden. Es war aber immer interessant, wie viele Benutzer theoretisch vorhanden sein können und welcher Belastung der Server standhalten wird.
Zu diesem Zweck habe ich einen einfachen Test durchgeführt: Online an Kunden eines bestimmten Raums (einer Gruppe) wird eine Nachricht mit Testparametern gesendet (in den Parametern gibt es nur einen Hauptparameter - die Anzahl der Nachrichten), die jeder Kunde online an andere Kunden sendet. Nach der Testverteilung werden die Gesamtzeit aller Nachrichten, Benachrichtigungen, Einträge in den Postgresql-Tabellen, die Anzahl aller Nachrichten, Benachrichtigungen und Einträge berechnet und dementsprechend die Geschwindigkeit einschließlich der Summe aller Vorgänge auf dem Server berechnet.
Beispiel aus dem Screenshot:
Es ist manchmal am überraschendsten, dass nur 10.000 Nachrichten und 390.000 Gesten
Senden von 50.000 Nachrichten: Serverprozesse: 4 Benutzer: 3
Insgesamt empfangene Nachrichten 10.000 * 3 = 30.000
Weiterleitung an andere Serverprozesse 30.000 * Serverprozesse: 4 - 1 = 90.000
An Empfänger gesendet 30.000 * Benutzer: 3 - 1 = 60.000
Nachrichten werden in die postgreSQL-Tabelle 30 000 geschrieben
90.000 Lieferbenachrichtigungen erhalten
Aufgenommen in der postgreSQL-Tabelle der Zustellbenachrichtigungen 90.000
Alle Operationen 390.000Datenlogik in push0k admin
Mit jeder Verbindung werden alle Referenzdaten abgerufen: Benutzer, Räume, Geräte, Datenbanken sowie die letzten 300 Einträge der „Journalstatistik“: Verbindungen, Datensynchronisation, Weiterleitung von Anhängen, Nachrichten, Journal.
Nachrichten wiederholen praktisch die postgresql-Tabelle und haben keine Filter, Einstellungen und ein Formular, in dem Sie die Nachricht vollständig sehen können. Die Logik der Tabelle ist das Debuggen. Während der Entwicklung kann schnell festgestellt werden, ob die Nachricht die Tabelle erreicht hat oder nicht.

Die Tabellen "Benutzer", "Räume (Gruppen)", "Verbindungen" und "Journal" werden automatisch aktualisiert. Für den Rest der Daten macht es keinen Sinn, online zu aktualisieren.
Die Push0k-Administratoranwendung kann hier heruntergeladen werden:
Windows:
push0kadmin Setup 19.1.11.exeMac OS:
push0kadmin-19.1.11.dmgEs ist kostenlos, aber im Gegensatz zum Server habe ich noch nicht vor, den Quellcode zu öffnen.
Im nächsten Artikel werde ich den Client-Teil des Push0k-Desctop-Clients sowie ein kleines Beispiel, Code und das Herstellen, Anmelden und Empfangen von Daten vom Server beschreiben.
Für die zuvor erwähnten früheren Versionen gab es auch einen Android-Client, der unsterblich im Hintergrund der 7. und 8. Android-Version lebte. Aber im Moment glaube ich, dass ich nicht lange zurückgeblieben bin. Später denke ich, dass es einen dritten Artikel mit einem Android-Client geben wird, und da siehst du und iOS ist nicht weit.