Klonen Sie dieses Repository
Montieren Sie das Repository und führen Sie diesen Befehl aus, um Abhängigkeiten zu installieren
make setup
make run
localhost:8080 ausgeführt Öffnen Sie nach dem Ausführen des Servers Ihren WebSocket -Client. Wenn Sie keine haben, probieren Sie Websocket King -Erweiterung für Chrome aus.
Verbindung zu ws://localhost:8080/socket , werden Sie vom Server begrüßt.
Server: Welcome! Your ID is f0ab664a-5af3-4f8d-8afe-eb93085267e4
{
"action": "subscribe",
"topic": "world"
}
{
"action": "publish",
"topic": "world",
"message": "Hello world!"
}
{
"action": "unsubscribe",
"topic": "world"
}
Möglicherweise fragen Sie "Warum sollte ich WebSocket anstelle von REST -API verwenden"?
Die REST -API verwendet HTTP, die die Antwort nur einmal pro Anfrage senden kann.
In der Zwischenzeit kann WebSocket zur anhaltenden bidirektionalen Kommunikation verwendet werden, ohne dass die Verbindung jedes Mal wieder hergestellt werden muss.
Dies kann in einem Szenario wie Chat oder Pub-Sub nützlich sein.
Hier ist das Diagramm zur Visualisierung des Unterschieds zwischen HTTP und Websocket.

Dieser Flussdiagramm beschreibt, wie dieser Server funktioniert. 
cmd
└── main
└── main.go
internal
└── websocket
└── handler.go
└── model.go
└── server.go
main.go : Die Hauptdatei, die ausgeführt wird.
Handler.go : Handle Open/Schließen Sie die Verbindung und übergeben Sie die Nachricht an den Server.
model.go : Speichert die vom Server verwendeten Modelle.
Server.go : Ausführender Aktion entsprechend der Client -Nachricht enthält auch Funktionen, die vom Server als WebSocket -Server ordnungsgemäß funktioniert.
Dieses Repository ist alles andere als ideal. Es ist nur ein Proof-of-Concept.
Während dieses Repository in der Nähe eines Pub-Subs liegt, kann es dennoch für einen Chat-Server verwendet werden.
Zum Beispiel können wir eine Funktion auf den angeschlossenen Socket hinzufügen, damit der Client automatisch ihre eigene ID als Thema abonniert. Andere Clients verwenden dann die ID dieses Benutzers als Thema, um eine Nachricht zu veröffentlichen.
Ich habe versucht, eine solche Lösung in Kombination mit der Genehmigung zu erstellen, um zu verhindern, dass ein anderer Benutzer die ID eines anderen abonniert, und dies funktioniert.
Dieses Repository ist von Golang-Pubsub von @tabvn inspiriert