Das WebSocket Protokoll (WS) bietet die Möglichkeit, Daten zwischen einem Browser und einem Server über eine dauerhafte Verbindung auszutauschen. Die Daten werden dabei in beide Richtungen in Form von "Paketen" übertragen, ohne dass die Verbindung unterbrochen wird und zusätzliche HTTP-Anfragen gestellt werden.

WebSocket eignet sich gut für konstante Kommunikationsdienste, wie Chatrooms, Online-Spiele, Echtzeit-Marktplätze usw.

Lassen Sie uns als Beispiel ein Backend für einen einfachen Chat erstellen. Es ist notwendig, die grundlegenden Funktionen bereitzustellen:

  1. Senden von Nachrichten an den Chat.
  2. Bestimmung der Urheberschaft der Nachricht.
  3. Aktionsbenachrichtigungen. Zum Beispiel ein neues Mitglied, das dem Chat beitritt, das den Chat verlässt, eine Tippanzeige (jemand tippt gerade...)

Datenbank-Modell

Beginnen wir mit der Erstellung eines Modells für die Datenbank. Auch wenn wir zunächst nicht vorhaben, Nachrichten und Korrespondenzverlauf in der Datenbank zu speichern, brauchen wir dennoch ein Modell, um den Versand von Nachrichten und Benachrichtigungen zu strukturieren.

Erstellen wir ein generisches chat_event Modell, das Folgendes enthält:

  1. Beziehung zum Benutzer. Jede Nachricht enthält Informationen darüber, auf welchen Benutzer sie sich bezieht.
  2. Type (enum) Feld mit 4 möglichen Optionen. Connected und Disconnected - für Benachrichtigungen, wenn ein Benutzer verbunden ist oder die Verbindung getrennt wurde. Typing - um die Information zu übermitteln, dass der Benutzer gerade eine neue Nachricht schreibt. Message - für eine Standard-Textnachricht.
  3. Message (text) - den Text der Nachricht.


Endpunkt-Konfiguration

Der nächste Entwicklungsschritt unterscheidet sich geringfügig von dem Standardansatz, der für andere Funktionen der Anwendung üblich ist. Normalerweise wird ein Geschäftsprozess erstellt und dann ein Endpunkt konfiguriert, um ihn auszuführen. Im Fall von WebSockets läuft alles anders ab, und der Ausgangspunkt ist die Erstellung eines Endpunkts, der auf den Auslösern basiert, von denen aus weitere Geschäftsprozesse erstellt werden.

Wir brauchen einen Endpunkt-Abschnitt. Dort erstellen wir einen neuen Endpunkt, indem wir die entsprechende Option auswählen - WebSocket Endpoint.


Für WebSockets gibt es keine Auswahl der Anfragemethode - es ist immer GET. Lassen Sie uns eine einfache URL angeben - /chat/ und erstellen Sie eine Gruppe mit demselben Namen.

Als nächstes müssen wir Variablen erstellen, die das Datenaustauschformat innerhalb des WebSockets bestimmen.

  • Client-to-Server. Ähnlich wie bei eingehenden Parametern für Standardgeschäftsprozesse. In unserem Beispiel werden wir eine einfache Textvariable erstellen (wir werden normale Textnachrichten an den Server senden).
  • Server-to-Client. Hier werden Variablen für Server-Nachrichten erstellt, die Daten vom Server an den Benutzer senden. Beachten Sie, dass dies nicht dasselbe ist wie eine Antwort auf eine Benutzeranfrage. Und obwohl sie als Reaktion auf Benutzeraktionen gesendet werden können, werden sie häufiger durch externe Ereignisse ausgelöst. In unserem Beispiel sendet der Server Benachrichtigungen über alle Ereignisse im Chat, daher setzen wir das chat_event Modell als Variable.


Nachdem Sie die Variablen erstellt haben, können Sie zur Hauptsache übergehen - der Erstellung der Logik des WebSocket. Sie basiert auf Triggern, die ausgelöst werden, wenn eine neue Nachricht auf einem WebSocket empfangen wird, sowie wenn eine Verbindung hergestellt oder getrennt wird.


Erstellen eines Geschäftsprozesses

Lassen Sie uns den connect Trigger und erstellen einen Geschäftsprozess dafür. Er wird in dem Moment gestartet, in dem der Benutzer eine Verbindung mit dem WebSocket herstellt, und seine Aufgabe wird es sein, eine Benachrichtigung darüber an alle verbundenen Benutzer zu senden.

Beachten Sie, dass der Startblock zwei Parameter enthält: User ID und Connection ID. So können Sie nicht nur sofort den Benutzer ermitteln, der die Verbindung hergestellt hat, sondern erhalten auch eine eindeutige Kennung für diese Verbindung. Diese Kennung kann in Zukunft z.B. dazu verwendet werden, um gezielt Nachrichten zu versenden oder die Verbindung zwangsweise zu beenden.

Сerstellen Sie alle notwendigen Schritte des Geschäftsprozesses:

  1. Make User. Verwenden wir den Startparameter User ID um ein Benutzermodell zu erstellen.
  2. Make chat_event. Сerstellen Sie ein Modell der Ereignisbenachrichtigung. Wir werden es mit dem Benutzer verbinden, indem wir das im vorigen Schritt erstellte Modell verwenden und auch den Ereignistyp auswählen und den Wert Type = Connected. Wir verwenden den Parameter message nicht, da in diesem Fall keine Nachricht, sondern eine Verbindungsbenachrichtigung übermittelt wird.
  3. WSS Connections /chat/. Mit diesem Block erhalten wir eine Liste aller aktiven WebSocket-Verbindungen.
  4. For Each Loop. Wir verwenden das Array connections als Schleifenparameter und senden die Benachrichtigungen an jeden verbundenen Benutzer.
  5. Expand WebSocket Connection. Erweitern Sie die Verbindungsinformationen, um die Connection ID.
  6. WSS Send /chat/. Wir verwenden die Connection ID und das erzeugte chat_event um die Benachrichtigung zu senden.


Verwendung von Postman zum Testen von WebSockets

In diesem Stadium ist der WebSocket, auch wenn er noch keine nennenswerte Funktionalität hat, bereits einsatzbereit und kann in der Praxis getestet werden. Dazu können Sie jedes Tool verwenden, das die Arbeit mit WebSockets ermöglicht. Schauen wir uns an, wie man dies mit Postman als Beispiel.

Klicken Sie auf die Schaltfläche New button und wählen Sie WebSocket Request


Sie müssen die URL für den WebSocket angeben. Sie kann mit Swagger gefunden werden, wo der WebSocket in der Liste mit den übrigen Endpunkten steht.


Im Gegensatz zu Standardanfragen arbeiten WebSockets mit dem wss Protokoll, daher müssen Sie https durch ersetzen. wss. Das Ergebnis sollte eine ähnliche URL sein: wss://qvlxglh-app.apms.io/api/chat/

Als Nächstes müssen Sie der Anfrage ein Authentifizierungstoken hinzufügen, da die Verbindung nicht anonym sein kann. Sie müssen einen Authorization Header mit einem Wert wie Bearer lBCiunRWg6BfogDrLml4jrC4iJiWucKo. Anstelle von lBCiunRWg6BfogDrLml4jrC4iJiWucKo müssen Sie Ihr eigenes Token einfügen, das Sie als Ergebnis der Autorisierung erhalten (POST /auth/ Endpunkt).


Wenn alles richtig gemacht wurde, wird mit einem Klick auf die Schaltfläche Connect wird eine Verbindung hergestellt und die erste Nachricht von der Serverseite, dem zuvor erstellten Geschäftsprozess für den Versand, empfangen.


Gleichzeitig können Sie sicherstellen, dass der Empfang von Nachrichten vom Server nicht nur als Reaktion auf bestimmte Anfragen von uns erfolgt. Sie können auch durch die Aktionen anderer Benutzer ausgelöst werden. Um dies zu testen, können Sie eine Verbindung in einer anderen Registerkarte mit dem Authentifizierungstoken eines anderen Benutzers herstellen. Eine Nachricht des Servers, die dies anzeigt, wird an alle Registerkarten mit einer aktiven Verbindung gesendet.

Geschäftsprozess für Nachrichtenübermittlung

Nun können Sie die Fähigkeiten von WebSocket weiter ausbauen und einen Geschäftsprozess für die Nachrichtenübermittlung erstellen. Übrigens können Sie jetzt Nachrichten senden, aber ohne vorher die Logik zu erstellen, macht das keinen Sinn, die Nachricht wird zu keiner Reaktion führen. Gehen wir also zurück zu den Endpunkteinstellungen und erstellen einen Geschäftsprozess für den receive Auslöser.

In vielerlei Hinsicht wird er dem vorherigen Geschäftsprozess ähnlich sein. Wenn eine Nachricht empfangen wird, ist es notwendig, eine chat_event und Benachrichtigungen darüber an alle Chat-Teilnehmer zu senden. Der Unterschied besteht darin, dass die Nachricht selbst zu chat_event hinzugefügt werden muss und der Verfasser der Nachricht nicht in die Mailingliste aufgenommen werden muss.

Die gleichen Blöcke werden im ersten Teil des Geschäftsprozesses verwendet. In dem Make chat_event Block müssen Sie type = message setzen und die Nachricht selbst aus dem Startblock anhängen.


In der Schleife müssen wir prüfen (Equal Block) und senden die Nachricht nur dann, wenn die Verbindungs-ID des Empfängers nicht mit der Verbindungs-ID des Senders übereinstimmt (If-Else = False).


Sie können das Ergebnis veröffentlichen und mit dem Testen beginnen. Beachten Sie, dass die Nachricht selbst im JSON Format ist, so dass sie bei Verwendung der Message-Variable so aussieht:

{"message":"Some text here"}

Im Beispiel können Sie sehen, dass Sie eine Benachrichtigung über eine Chat-Verbindung erhalten, Ihre eigene Nachricht senden (Hi!), und eine Antwort erhalten (Glad to see you!)


Damit ist die Erstellung des grundlegenden Backends für den Chat mit WebSockets abgeschlossen. Sie können mit dem Aufbau des Front-Ends beginnen und Ihre eigene Echtzeit-Messaging-App entwickeln.

Was this article helpful?

AppMaster.io 101 Crash-Kurs

10 Module
2 Wochen

Sie wissen nicht, wo Sie anfangen sollen? Legen Sie los mit unserem Crashkurs für Anfänger und erkunden Sie AppMaster von A bis Z.

Kurs starten
Development it’s so easy with AppMaster!

Benötigen Sie weitere Hilfe?

Lösen Sie jedes Problem mit Hilfe unserer Experten. Sparen Sie Zeit und konzentrieren Sie sich auf die Erstellung Ihrer Anwendungen.

headphones

Kontaktieren Sie Support

Schildern Sie uns Ihr Problem und wir finden eine Lösung für Sie.

message

Community-Chat

Besprechen Sie Fragen mit anderen Benutzern in unserem Chat.

Community beitreten