Maison  >  Article  >  développement back-end  >  Comment utiliser le langage Go avec WebSocket

Comment utiliser le langage Go avec WebSocket

PHPz
PHPzoriginal
2023-06-03 22:31:36911parcourir

Dans le monde d'aujourd'hui, la communication en réseau est devenue un élément indispensable. La technologie WebSocket est un protocole qui établit une communication bidirectionnelle entre un navigateur Web et un serveur. Cette méthode de communication est efficace et en temps réel, elle est donc de plus en plus populaire dans les applications Web modernes. Dans le même temps, le langage Go est également très apprécié pour son efficacité et sa facilité d’écriture de programmes simultanés. Par conséquent, comment utiliser le langage Go dans WebSocket est devenu un sujet brûlant.

Cet article expliquera comment utiliser le langage Go pour implémenter une communication bidirectionnelle basée sur WebSocket. Nous commencerons par les concepts de base de WebSocket, puis présenterons comment implémenter un serveur WebSocket simple à l'aide du langage Go, et enfin montrerons comment écrire un programme client simple pour tester la communication WebSocket.

1. Le concept de base de WebSocket

WebSocket est un protocole basé sur le protocole TCP, qui permet une communication bidirectionnelle en temps réel entre le navigateur et le serveur. Ceci est différent du protocole HTTP, qui est un protocole de communication unidirectionnel, le navigateur envoie une requête au serveur et le serveur envoie une réponse au navigateur.

Le protocole WebSocket est un protocole persistant qui permet à la connexion entre le client et le serveur de rester ouverte sans avoir à constamment établir et fermer la connexion. Cela rend le protocole WebSocket adapté aux applications en temps réel telles que les jeux en ligne, les applications de messagerie instantanée et les cotations boursières.

Le protocole WebSocket est un protocole établi sur une connexion HTTP Lors de l'établissement d'une connexion, le client envoie une requête HTTP au serveur, et l'en-tête de la requête contient le champ "Mise à niveau" et le champ "Connexion". Ces champs indiquent au serveur que le client demande une mise à niveau vers le protocole WebSocket et que le serveur reste connecté.

Si le serveur accepte la demande de connexion WebSocket, les champs « Mise à niveau » et « Connexion » seront inclus dans l'en-tête de réponse HTTP, et une réponse standard de prise de contact WebSocket sera fournie. Une fois la négociation terminée, la connexion WebSocket est considérée comme établie et le client et le serveur peuvent communiquer directement dans les deux sens.

Le protocole WebSocket permet également l'utilisation de sous-protocoles, ce qui signifie que le client et le serveur peuvent négocier pour utiliser un protocole spécifique. Si un sous-protocole est utilisé, le client et le serveur peuvent s'envoyer des données et les données seront interprétées comme des messages pour ce sous-protocole.

2. Implémenter le serveur WebSocket en utilisant le langage Go

Afin d'implémenter le serveur WebSocket en utilisant le langage Go, nous utiliserons les packages "net/http" et "golang.org/x/net/websocket" dans la bibliothèque standard de Go. langue.

Nous devons écrire une fonction de gestionnaire HTTP pour gérer les demandes de connexion WebSocket, puis enregistrer la fonction de gestionnaire avec la fonction websocker.Handler. La fonction de gestionnaire HTTP sera chargée de mettre à niveau la connexion HTTP vers la connexion WebSocket et de gérer l'échange de messages entre le client et le serveur une fois la connexion établie.

Voici un exemple de code pour un simple serveur WebSocket implémenté dans Go :

package main

import (
    "log"
    "net/http"
    "golang.org/x/net/websocket"
)

func wsHandler(ws *websocket.Conn) {
    var message string
    for {
        err := websocket.Message.Receive(ws, &message)
        if err != nil {
            log.Println("Error receiving message:", err)
            break
        }
        log.Println("Received message:", message)
    }
}

func main() {
    http.Handle("/ws", websocket.Handler(wsHandler))
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Dans cet exemple, nous définissons une fonction appelée "wsHandler" qui sera appelée une fois la connexion WebSocket établie. Cette fonction accepte un paramètre de type websocket.Conn, qui représente la connexion WebSocket.

Dans la fonction wsHandler, nous utilisons la fonction websocket.Message.Receive pour recevoir le message de la connexion WebSocket et imprimer simplement le message sur la console.

Dans la fonction principale, nous utilisons la fonction http.Handle pour enregistrer le gestionnaire WebSocket nommé "/ws" en tant que gestionnaire HTTP. Ensuite, nous utilisons la fonction http.ListenAndServe pour exécuter le serveur en spécifiant l'adresse et le port du serveur.

3. Écrivez un programme client simple pour tester la communication WebSocket

Afin de tester la connexion WebSocket, nous pouvons écrire un programme client simple WebSocket. Dans ce programme, nous utiliserons les packages "net/http" et "golang.org/x/net/websocket" de la bibliothèque standard du langage Go.

Ce qui suit est un exemple de code pour un client WebSocket simple implémenté en langage Go :

package main

import (
    "fmt"
    "log"
    "golang.org/x/net/websocket"
)

func main() {
    origin := "http://localhost/"
    url := "ws://localhost:8080/ws"
    ws, err := websocket.Dial(url, "", origin)
    if err != nil {
        log.Fatal("Error dialing:", err)
    }
    defer ws.Close()

    message := []byte("Hello, world!")
    _, err = ws.Write(message)
    if err != nil {
        log.Fatal("Error sending message:", err)
    }

    var response []byte
    _, err = ws.Read(response)
    if err != nil {
        log.Fatal("Error receiving response:", err)
    }

    fmt.Println(string(response))
}

Dans cet exemple, nous utilisons la fonction websocket.Dial pour établir une connexion au serveur WebSocket. Nous avons spécifié l'URL et l'adresse source du serveur WebSocket. Nous pouvons ensuite envoyer un message de tableau d'octets en utilisant la méthode Write de la connexion WebSocket. Ensuite, nous utilisons la méthode Read de la connexion WebSocket pour lire le message renvoyé par le serveur et imprimer le message sur la console.

Enfin, nous pouvons compiler et exécuter le programme pour garantir que la connexion WebSocket est établie avec succès et que la communication entre le client et le serveur est établie.

4. Conclusion

Dans cet article, nous avons présenté les concepts de base de WebSocket et montré comment utiliser le langage Go pour implémenter un serveur et un programme client WebSocket simple. La technologie WebSocket permet aux applications Web d'établir une communication bidirectionnelle en temps réel plus efficacement, et l'efficacité du langage Go et la facilité d'écriture de programmes simultanés en font un excellent choix de langage pour la mise en œuvre de serveurs WebSocket.

Bien que seules les connaissances de base et des exemples de code soient présentés dans cet article, les lecteurs peuvent développer davantage des applications WebSocket plus complexes basées sur ces exemples de codes. Je pense qu'avec l'adoption de davantage d'applications Web et le développement de la technologie WebSocket, le langage Go deviendra le langage de développement préféré pour de plus en plus de serveurs WebSocket.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn