Golang Websocket

Golang Websocket
Dans cet article, nous vous montrerons comment créer une prise Web de base dans Go. Nous créerons un serveur simple qui répète ce que vous dites. Cela vous aidera à vous présenter le monde de WebSocket et le package Gorilla Websocket.

Importations requises

La première chose à faire est d'importer les packages requis. Pour ce projet, nous aurons besoin du package FMT, du net / http et du package gorille.

Nous pouvons faire ces importations comme:

importer (
"FMT"
"net / http"
"Github.com / gorille / Websocket "
)

Une fois importé, nous pouvons commencer à construire notre serveur.

Mettre à niveau la connexion HTTP

La première étape de notre projet consiste à prendre une connexion HTTP et à la mettre à niveau vers un WebSocket . Nous pouvons le faire en utilisant le WebSocket.Améliorer la structure. Il prend la taille du tampon de lecture et d'écriture telle que définie dans le code source ci-dessous:

https: // pkg.aller.dev / github.Com / Gorilla / WebSocket # Upgrader

Pour notre exemple, nous utiliserons les options par défaut mais définirons le chèque. Cela empêchera le serveur de bloquer la connexion en raison de CORS.

var uprader = WebSocket.Upgrader
Checkorigin: Func (R * http.Demande) bool
Retour vrai
,

Ajouter un gestionnaire

Ensuite, laissez-nous un gestionnaire HTTP lorsqu'un client atteint le point de terminaison / Echo. Nous définirons plus tard dans la fonction principale.

func echo (w http.Réponsewriter, r * http.Demande)
Conn, ERR: = Upgrader.Mise à niveau (w, r, nil)
iferr != nil
enregistrer.Fatal (euh)
retour

Déférer Conn.Fermer()
pour
MT, message, err: = conn.Lire le message()
iferr != nil
enregistrer.Fatal (euh)
casser

fmt.Printf ("recv:% s", message)
err = conn.WriteMessage (MT, message)
iferr != nil
enregistrer.Fatal (euh)
casser


Dans l'exemple ci-dessus, nous définissons une fonction qui prend le rédacteur de réponse et un pointeur vers le HTTP.Réponse.

Nous mettons à niveau la connexion HTTP au protocole WebSocket à l'aide de la fonction de mise à niveau. Ensuite, nous utilisons une boucle pour écouter et lire les messages entrants. Nous imprimons ensuite le message à la console et faisons écho au message au client.

Ajouter le point de terminaison WebSocket

L'étape suivante consiste à ajouter un gestionnaire HTTP simple pour le point de terminaison WebSocket. Nous pouvons utiliser la fonction comme:

Func Home (W HTTP.Réponsewriter, r * http.Demande)
Websockettemplate.Exécuter (w, "ws: //" + r.Hôte + "/ echo")

Créer un client

Pour interagir avec le service WebSocket, nous devons créer un client. Nous pouvons le faire en créant un fichier HTML simple à partir de qui utilise JavaScript pour ouvrir une connexion WebSocket au serveur. Un exemple de code est comme indiqué:

indice.html






Connexion WebSocket simple



Envoyer


CONS INPUT = DOCUMENT.getElementById ("entrée");
CONS OUTPUT = DOCUMENT.getElementById ("sortie");
const socket = new WebSocket ("ws: // localhost: 8000 / echo");
prise.onopen = function ()
sortir.innerhtml + = "Status: Connected \ n";
;
prise.onMessage = fonction (e)
sortir.innerhtml + = "Server:" + e.données + "\ n";
;
functionSend ()
prise.Envoyer (entrée.valeur);
saisir.value = "";



Exécuter le serveur

La dernière étape consiste à définir les itinéraires et à appeler les gestionnaires HTTP dans la fonction principale. Le code est comme indiqué:

funcmain ()
http.Handlefunc ("/ echo", echo)
http.Handlefunc ("/", home)
http.ÉcouterAndserve (": 8000", nil)

Enregistrez les fichiers et exécutez:

aller courir ws.aller

Ouvrez l'index.Fichier HTML dans votre navigateur. Vous devriez voir un message connecté une fois que le navigateur établit une connexion.

Si vous tapez un message sur le terrain, le serveur le répond.

Le code source complet du programme est comme indiqué:

package principal
importer (
"FMT"
"enregistrer"
"net / http"
"Github.com / gorille / Websocket "
)
var uprader = WebSocket.Upgrader
Checkorigin: Func (R * http.Demande) bool
Retour vrai
,

funcecho (w http.Réponsewriter, r * http.Demande)
Conn, ERR: = Upgrader.Mise à niveau (w, r, nil)
Si err != nil
enregistrer.Fatal (euh)
retour

repousser.Fermer()
pour
MT, message, err: = conn.Lire le message()
Si err != nil
enregistrer.Fatal (euh)
casser

fmt.Printf ("recv:% s", message)
err = conn.WriteMessage (MT, message)
Si err != nil
enregistrer.Fatal (euh)
casser



FunChome (w http.Réponsewriter, r * http.Demande)
http.ServeFile (W, R, "Index.html ")

funcmain ()
http.Handlefunc ("/ echo", echo)
http.Handlefunc ("/", home)
http.ÉcouterAndserve (": 8000", nil)

Conclusion

C'était un guide débutant pour travailler avec WebSocket dans Go. Dans ce guide, nous avons couvert comment mettre à niveau une connexion HTTP au protocole WebSocket, lire des messages et répondre aux messages au client.