Maison >développement back-end >Golang >Comment utiliser le langage Go pour implémenter la maintenance des connexions longues Websocket

Comment utiliser le langage Go pour implémenter la maintenance des connexions longues Websocket

王林
王林original
2023-12-14 13:47:241546parcourir

Comment utiliser le langage Go pour implémenter la maintenance des connexions longues Websocket

Comment utiliser le langage Go pour implémenter la maintenance des connexions longues Websocket

Websocket est un protocole fourni par HTML5 qui peut établir une communication bidirectionnelle entre le serveur et le client. Dans le développement réel, de nombreux scénarios nécessitent de maintenir de longues connexions afin de transmettre des données en temps réel ou de mettre en œuvre des fonctions de messagerie instantanée. Cet article explique comment utiliser le langage Go pour implémenter la maintenance des connexions longues Websocket, y compris des exemples de code spécifiques.

1. Créer un environnement de développement du langage Go
Tout d'abord, nous devons créer un environnement de développement du langage Go. Pour des opérations spécifiques, veuillez vous référer au guide d'installation sur le site officiel du langage Go.

2. Créer un serveur WebSocket
Ensuite, nous commençons à créer un serveur WebSocket. Tout d'abord, nous devons importer la bibliothèque github.com/gorilla/websocket et définir une variable globale upgrader pour mettre à niveau la connexion HTTP vers une connexion WebSocket. github.com/gorilla/websocket库,并定义一个全局的upgrader变量,用于升级HTTP连接为WebSocket连接。

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

然后,我们创建一个处理函数wsHandler,处理客户端的WebSocket连接请求。

func wsHandler(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    // 循环读取客户端发送的消息
    for {
        // 读取消息
        msgType, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }

        // 打印消息
        log.Printf("Received: %s
", msg)

        // 响应消息
        err = conn.WriteMessage(msgType, msg)
        if err != nil {
            log.Println(err)
            return
        }
    }
}

三、启动WebSocket服务器
接下来,我们需要将上述wsHandler

func main() {
    http.HandleFunc("/ws", wsHandler) // 注册处理函数
    log.Fatal(http.ListenAndServe(":8000", nil)) // 启动服务器
}

Ensuite, nous créons une fonction de traitement wsHandler pour gérer la demande de connexion WebSocket du client.

// 创建WebSocket连接
const socket = new WebSocket('ws://localhost:8000/ws');

// 打开连接
socket.addEventListener('open', function (event) {
    socket.send('Hello Server');
});

// 接收消息
socket.addEventListener('message', function (event) {
    console.log('Received: ' + event.data);
});

// 关闭连接
socket.addEventListener('close', function (event) {
    console.log('Connection closed');
});

3. Démarrez le serveur WebSocket

Ensuite, nous devons enregistrer la fonction wsHandler ci-dessus comme fonction de traitement du service HTTP et démarrer le port d'écoute du serveur.

rrreee

4. Créer un client WebSocket🎜Enfin, nous créons un simple client WebSocket pour tester la fonctionnalité du serveur. Nous pouvons utiliser JavaScript ou d'autres outils pour créer un client WebSocket. Nous prenons ici JavaScript comme exemple. 🎜rrreee🎜Ce qui précède est un exemple de code d'utilisation du langage Go pour maintenir une longue connexion Websocket. Grâce à cet exemple, nous pouvons établir une simple connexion longue WebSocket et réaliser une communication bidirectionnelle en temps réel entre le serveur et le client. Dans le développement réel, nous pouvons étendre et optimiser le code en fonction de besoins spécifiques pour nous adapter à différents scénarios et besoins commerciaux. 🎜

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