Maison  >  Article  >  développement back-end  >  Comment implémenter la communication bidirectionnelle WebSocket dans Golang

Comment implémenter la communication bidirectionnelle WebSocket dans Golang

WBOY
WBOYoriginal
2023-12-18 16:06:421295parcourir

Comment implémenter la communication bidirectionnelle WebSocket dans Golang

Comment implémenter une communication bidirectionnelle avec WebSocket dans Golang

WebSockets est un protocole de communication qui établit une connexion persistante entre le client et le serveur. Il permet une communication bidirectionnelle et est excellent en temps réel et en efficacité. Dans Golang, nous pouvons utiliser les packages net/http et gorilla/websocket dans la bibliothèque standard pour implémenter la communication bidirectionnelle WebSocket. Cet article présentera comment implémenter la communication bidirectionnelle WebSocket dans Golang et fournira des exemples de code spécifiques. net/httpgorilla/websocket 包来实现 WebSocket 的双向通信。本文将介绍如何在 Golang 中实现 WebSocket 的双向通信,并提供具体的代码示例。

步骤一:导入依赖包

首先,我们需导入 net/httpgorilla/websocket 包。net/http 包提供了 HTTP 服务器和客户端的功能,而 gorilla/websocket 包则是一个 WebSocket 实现库。

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

步骤二:设置 WebSocket 处理函数

接下来,我们需要设置 WebSocket 的处理函数。这个函数将会处理客户端的连接请求,并在连接建立成功后,处理客户端发送的消息。

func websocketHandler(w http.ResponseWriter, r *http.Request) {
    // 将 HTTP 连接升级为 WebSocket 连接
    ws, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("Error upgrading HTTP connection to WebSocket:", err)
        return
    }

    // 在连接结束时关闭 WebSocket
    defer ws.Close()

    // 循环处理客户端发来的消息
    for {
        // 读取客户端发来的消息
        messageType, message, err := ws.ReadMessage()
        if err != nil {
            log.Println("Error reading message from WebSocket:", err)
            break
        }

        // 打印收到的消息
        log.Printf("Received message: %s", message)

        // 回复客户端收到的消息
        if err = ws.WriteMessage(messageType, message); err != nil {
            log.Println("Error writing message to WebSocket:", err)
            break
        }
    }
}

步骤三:设置 WebSocket 升级器

在处理函数中,我们需要使用 gorilla/websocket 包的升级器(upgrader)来将 HTTP 连接升级为 WebSocket 连接。升级器还可以设置一些参数,例如允许的域以及握手超时时间。

var upgrader = websocket.Upgrader{
    // 允许跨域访问
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

步骤四:设置 HTTP 服务器

最后,我们需要设置 HTTP 服务器,将处理函数映射到相应的路径上,以便客户端可以通过路径连接到 WebSocket。

func main() {
    // 设置 WebSocket 处理函数
    http.HandleFunc("/", websocketHandler)

    // 启动 HTTP 服务器
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("Error starting HTTP server:", err)
    }
}

代码示例中的 :8080

Étape 1 : Importer les packages de dépendances

Tout d'abord, nous devons importer les packages net/http et gorilla/websocket. Le package net/http fournit des fonctionnalités de serveur et de client HTTP, tandis que le package gorilla/websocket est une bibliothèque d'implémentation WebSocket.

const socket = new WebSocket("ws://localhost:8080/");

socket.addEventListener("open", (event) => {
    socket.send("Hello, server!");
});

socket.addEventListener("message", (event) => {
    console.log("Received message from server:", event.data);
});

socket.addEventListener("close", (event) => {
    console.log("Server connection closed:", event);
});

Étape 2 : Définir la fonction de traitement WebSocket🎜🎜Ensuite, nous devons définir la fonction de traitement WebSocket. Cette fonction gérera la demande de connexion du client et traitera le message envoyé par le client une fois la connexion établie avec succès. 🎜rrreee🎜Étape 3 : Configurer le programme de mise à niveau WebSocket🎜🎜Dans la fonction de traitement, nous devons utiliser le programme de mise à niveau (upgrader) du package gorilla/websocket pour mettre à niveau le Connexion HTTP à la connexion WebSocket. Le programme de mise à niveau peut également définir certains paramètres tels que les domaines autorisés et le délai d'expiration de la négociation. 🎜rrreee🎜Étape 4 : Configurer le serveur HTTP🎜🎜Enfin, nous devons configurer le serveur HTTP et mapper la fonction de traitement au chemin correspondant afin que le client puisse se connecter à WebSocket via le chemin. 🎜rrreee🎜:8080 dans l'exemple de code est l'adresse d'écoute et le numéro de port du serveur, vous pouvez le modifier selon vos besoins. 🎜🎜En utilisant le code ci-dessus, nous avons implémenté avec succès la fonction de communication bidirectionnelle via WebSocket dans Golang. Une fois la connexion client réussie, vous pouvez utiliser un code similaire au suivant pour envoyer et recevoir des messages : 🎜rrreee🎜En résumé, nous avons présenté en détail comment implémenter la communication bidirectionnelle WebSocket dans Golang et fourni des exemples de code spécifiques. Grâce à ces exemples de codes, vous pouvez rapidement démarrer et implémenter des fonctions de communication en temps réel basées sur 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