Cloner ce référentiel
Montez le référentiel et exécutez cette commande pour installer des dépendances
make setup
make run
localhost:8080 Après avoir exécuté le serveur, ouvrez votre client WebSocket. Si vous n'en avez pas, essayez l'extension Websocket King pour Chrome.
Connectez-vous à ws://localhost:8080/socket , vous serez accueilli par le serveur.
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"
}
Vous demandez peut-être "pourquoi devrais-je utiliser WebSocket au lieu de l'API REST"?
L'API REST utilise HTTP qui ne peut envoyer une réponse qu'une fois par demande.
Pendant ce temps, WebSocket peut être utilisé pour une communication bidirectionnelle persistante sans avoir besoin de rétablir la connexion à chaque fois.
Cela peut être utile dans un scénario comme le chat ou le sous-pub.
Voici le diagramme pour visualiser la différence entre HTTP et WebSocket.

Cet organigramme décrit comment fonctionne ce serveur. 
cmd
└── main
└── main.go
internal
└── websocket
└── handler.go
└── model.go
└── server.go
main.go : le fichier principal à exécuter.
handler.go : gère la connexion ouverte / fermer et transmettre le message au serveur.
Model.go : stocke les modèles utilisés par le serveur.
Server.go : exécute une action spécifique en fonction du message client, complète également les fonctions dont le serveur a besoin pour fonctionner correctement en tant que serveur WebSocket.
Ce référentiel est loin d'être idéal. C'est juste une preuve de concept.
Bien que ce référentiel soit proche d'un pub, il peut toujours être utilisé pour un serveur de chat.
Par exemple, nous pouvons ajouter une fonction sur socket connecté afin que le client soit automatiquement souscrit à leur propre identifiant en tant que sujet. D'autres clients utiliseront alors l'ID de l'utilisateur comme sujet pour publier un message.
J'ai essayé de construire une telle solution combinée à l'autorisation pour empêcher d'autres utilisateurs de s'abonner à l'identification d'autres et cela fonctionne.
Ce référentiel est inspiré par Golang-Pubsub par @Tabvn