Maison  >  Article  >  développement back-end  >  Comment Go WebSocket implémente-t-il la communication bidirectionnelle ?

Comment Go WebSocket implémente-t-il la communication bidirectionnelle ?

WBOY
WBOYoriginal
2024-06-05 21:38:001015parcourir

Le langage Go prend en charge WebSocket, qui peut établir une communication bidirectionnelle via les étapes suivantes : Créer un serveur WebSocket : Créez une fonction de gestionnaire HTTP. Créez une structure Upgrader pour mettre à niveau la requête HTTP. Démarrez le serveur WebSocket. Créer un client WebSocket : créez une requête HTTP et définissez les en-têtes WebSocket. Créez une structure de numérotation. Utilisez la méthode Dial pour établir une connexion.

Go WebSocket 如何实现双向通信?

Go WebSocket : permet une communication bidirectionnelle

WebSocket est un protocole de communication bidirectionnel qui permet l'échange de données en temps réel entre le client et le serveur via une seule connexion TCP persistante. Le langage Go offre aux développeurs une prise en charge intégrée de WebSocket, rendant la communication bidirectionnelle simple et directe.

Création d'un serveur WebSocket

La création d'un serveur WebSocket nécessite trois étapes :

  1. Utilisez le package net/http pour créer la fonction http.Handler, qui gère la connexion WebSocket. net/http 包创建 http.Handler 函数,该函数处理 WebSocket 连接。
  2. 创建 websocket.Upgrader 结构体,该结构体将 HTTP 请求升级为 WebSocket 连接。
  3. 使用 http.ServeHTTP 方法启动 WebSocket 服务端。
package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

func main() {
    // HTTP 处理程序
    handler := func(w http.ResponseWriter, r *http.Request) {
        upgrader := websocket.Upgrader{}
        conn, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Fatal(err)
        }
        defer conn.Close()

        for {
            messageType, message, err := conn.ReadMessage()
            if err != nil {
                log.Fatal(err)
            }
            if messageType == websocket.CloseMessage {
                log.Println("Client closed connection")
                return
            }
            log.Printf("Received from client: %s", string(message))
            err = conn.WriteMessage(messageType, []byte("Echoed: "+string(message)))
            if err != nil {
                log.Fatal(err)
            }
        }
    }

    // 启动 WebSocket 服务端
    http.HandleFunc("/websocket", handler)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}

创建 WebSocket 客户端

创建 WebSocket 客户端同样需要三步:

  1. 使用 net/http 包创建 http.Request,并设置 "Upgrade: WebSocket" 头。
  2. 创建 websocket.Dialer 结构体,该结构体用于建立 WebSocket 连接。
  3. 使用 Dial
  4. Créez une structure websocket.Upgrader, qui met à niveau les requêtes HTTP vers les connexions WebSocket.

Utilisez la méthode http.ServeHTTP pour démarrer le serveur WebSocket.

🎜
package main

import (
    "fmt"
    "log"

    "github.com/gorilla/websocket"
)

func main() {
    dialers := websocket.Dialer{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }

    conn, _, err := dialers.Dial("ws://localhost:8080/websocket", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    for i := 0; i < 10; i++ {
        message := fmt.Sprintf("Hello from client %d", i)
        err := conn.WriteMessage(websocket.TextMessage, []byte(message))
        if err != nil {
            log.Fatal(err)
        }

        _, message, err = conn.ReadMessage()
        if err != nil {
            log.Fatal(err)
        }
        log.Printf("Received echo: %s", string(message))
    }
}
🎜🎜Création d'un client WebSocket🎜🎜🎜La création d'un client WebSocket nécessite également trois étapes : 🎜🎜🎜Utilisez le package net/http pour créer http.Request et définissez-le en-tête "Mise à niveau : WebSocket". 🎜🎜Créez la structure websocket.Dialer, qui permet d'établir une connexion WebSocket. 🎜🎜Utilisez la méthode Dial pour établir une connexion. 🎜🎜rrreee🎜Avec ces étapes, vous pouvez facilement implémenter la communication bidirectionnelle WebSocket dans Go, en ajoutant des capacités d'interaction en temps réel à vos applications. 🎜

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