Maison  >  Article  >  développement back-end  >  Utiliser le framework Gin pour implémenter la fonction de communication Websocket

Utiliser le framework Gin pour implémenter la fonction de communication Websocket

王林
王林original
2023-06-23 09:34:372835parcourir

Avec le développement continu d'Internet, la demande d'applications Web augmente également. Ce qui a suivi a été le besoin de communication en temps réel, et Websocket a vu le jour. Gin est un framework Web efficace basé sur Golang. La fonction de communication Websocket peut être facilement implémentée via le framework Gin.

Cet article expliquera comment utiliser le framework Gin pour implémenter la fonction de communication Websocket.

Installer le framework Gin

Avant de commencer à utiliser le framework Gin, vous devez d'abord installer le framework Gin. Il peut être installé via la commande suivante :

go get -u github.com/gin-gonic/gin

Créer une application Gin

Après avoir installé le framework Gin, nous pouvons commencer à créer une application Gin. Créez un fichier app.go et implémentez-le selon le code suivant : app.go文件,按照以下代码实现:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    router.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    router.Run(":8080")
}

以上代码创建了一个Gin应用,监听端口为8080,在浏览器中访问http://localhost:8080/ping会返回一个JSON响应。

使用Gin框架实现Websocket

接下来,我们将使用Gin框架实现Websocket通信功能。我们将创建一个websocket.go文件,并按照以下步骤实现:

导入依赖

在开始之前,需要导入以下依赖:

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
    "github.com/gin-gonic/gin"
)

这里我们导入了Gin框架、Gorilla websocket库以及Go标准库中的log和net/http。

定义Gin路由

我们通过Gin框架定义一个Websocket路由:

router.GET("/ws", func(c *gin.Context) {
    wsHandler(c.Writer, c.Request)
})

定义Websocket处理函数

我们定义了一个wsHandler函数,用于处理Websocket连接:

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

func wsHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    defer conn.Close()

    for {
        // 读取消息
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }

        // 处理消息
        log.Printf("收到消息: %s
", msg)

        // 回复消息
        err = conn.WriteMessage(websocket.TextMessage, []byte("已收到消息!"))
        if err != nil {
            log.Println(err)
            return
        }
    }
}

以上函数通过调用websocket.Upgrader方法将HTTP连接升级为Websocket连接,并处理Websocket连接中的读写操作。在代码中,我们首先使用upgrader.Upgrade方法将HTTP连接升级为Websocket连接。接着,在一个无限循环中,使用conn.ReadMessage方法读取客户端的消息数据,将读取到的消息打印输出,然后使用conn.WriteMessage方法将一个回复消息返回给客户端。

Websocket的读写操作是一个阻塞的过程,因此需要在一个无限循环中进行。当客户端断开与Websocket的连接时,循环将会退出。

测试Websocket连接

编写好以上代码后,我们可以通过以下步骤测试Websocket连接:

  1. 启动Gin应用:go run app.go
  2. 在浏览器中打开http://localhost:8080/ws
    var websocket = new WebSocket("ws://localhost:8080/ws");
    
    websocket.onopen = function(evt) {
        console.log("连接成功!");
        websocket.send("Hello WebSocket!");
    };
    
    websocket.onmessage = function(evt) {
        console.log("收到消息:" + evt.data);
    };
    
    websocket.onclose = function(evt) {
        console.log("连接已关闭!");
    };
  3. Le code ci-dessus crée une application Gin, le port d'écoute est 8080 et accède à http://localhost : 8080 dans le navigateur /ping renverra une réponse JSON.
  4. Utilisez le framework Gin pour implémenter Websocket

Ensuite, nous utiliserons le framework Gin pour implémenter la fonction de communication Websocket. Nous allons créer un fichier websocket.go et suivre les étapes ci-dessous pour l'implémenter :

Importer les dépendances

Avant de commencer, nous devons importer les dépendances suivantes :

rrreee

Ici, nous avons importé le framework Gin, la bibliothèque websocket Gorilla et log et net/http dans la bibliothèque standard Go.

Définir la route Gin

🎜Nous définissons une route Websocket à travers le framework Gin : 🎜rrreee

Définir la fonction de traitement Websocket

🎜Nous définissons une fonction wsHandler, en utilisant Pour traiter les connexions Websocket : 🎜rrreee🎜La fonction ci-dessus met à niveau la connexion HTTP vers une connexion Websocket en appelant la méthode websocket.Upgrader et gère les opérations de lecture et d'écriture dans la connexion Websocket. Dans le code, nous utilisons d'abord la méthode upgrader.Upgrade pour mettre à niveau la connexion HTTP vers une connexion Websocket. Ensuite, dans une boucle infinie, utilisez la méthode conn.ReadMessage pour lire les données du message du client, imprimez le message lu, puis utilisez la méthode conn.WriteMessage pour A le message de réponse est renvoyé au client. 🎜🎜Les opérations de lecture et d'écriture Websocket sont un processus bloquant, elles doivent donc être effectuées dans une boucle infinie. La boucle se terminera lorsque le client se déconnectera du Websocket. 🎜🎜Testez la connexion Websocket🎜🎜Après avoir écrit le code ci-dessus, nous pouvons tester la connexion Websocket en suivant les étapes suivantes : 🎜
    🎜Démarrez l'application Gin : go run app.go🎜🎜Ouvrir dans la page http://localhost:8080/ws du navigateur 🎜🎜Ouvrez les outils de développement du navigateur et exécutez le code suivant dans la console : 🎜🎜rrreee🎜Dans le code ci-dessus, nous utilisons l'API WebSocket pour établir une connexion Websocket et envoyer un message. Lorsque la connexion à Websocket est établie avec succès, la console affichera « Connexion réussie ! » ; lorsqu'un message de réponse de Websocket est reçu, la console affichera « Message reçu : Message reçu ! » ; La station affichera "Connexion fermée!". 🎜🎜Résumé🎜🎜Grâce aux étapes ci-dessus, nous avons implémenté avec succès la fonction de communication Websocket à l'aide du framework Gin. Le framework Gin fournit une API riche qui nous permet de réaliser facilement du développement Web. Websocket est un mécanisme important pour réaliser une communication en temps réel. Grâce à la combinaison du framework Gin et de Websocket, nous pouvons développer des applications Web avec des fonctions de communication en temps réel plus facilement et plus rapidement. 🎜

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