Maison > développement back-end > Golang > le corps du texte

Tutoriel Golang Websocket : Comment développer la fonction de transfert de fichiers en ligne

WBOY
Libérer: 2023-12-17 14:46:10
original
1097 Les gens l'ont consulté

golang Websocket教程:如何开发在线文件传输功能

Tutoriel Golang Websocket : Comment développer une fonction de transfert de fichiers en ligne

Introduction :
Avec le développement rapide d'Internet, le transfert de fichiers est devenu un besoin auquel les gens sont souvent confrontés sur le réseau. Grâce à la technologie Websocket, nous pouvons facilement mettre en œuvre des fonctions de transfert de fichiers en ligne. Cet article expliquera comment utiliser Golang pour développer une application de transfert de fichiers en ligne basée sur Websocket et fournira des exemples de code spécifiques.

1. Introduction à Websocket
Websocket est un protocole de communication full-duplex basé sur une connexion TCP. Il peut établir une connexion persistante entre le navigateur et le serveur pour réaliser une transmission de données en temps réel. Par rapport au protocole HTTP traditionnel, Websocket présente une latence plus faible, des performances de concurrence plus élevées et de meilleures capacités de transmission de données, ce qui en fait un choix idéal pour développer des applications en temps réel et des fonctions interactives en ligne.

2. Préparation de l'environnement de développement
Pour terminer ce tutoriel, vous devez d'abord installer l'environnement de développement Golang et avoir une certaine base de programmation Golang. Dans le même temps, nous devons également introduire une bibliothèque Websocket tierce pour un développement rapide.

Installez la bibliothèque Websocket tierce :

go get github.com/gorilla/websocket
Copier après la connexion

3. Structure du projet et description du code
Notre projet contiendra deux fichiers principaux : main.go et index.html. Parmi eux, main.go est le code serveur et index.html est le code client. Ci-dessous, nous présenterons l'implémentation du code de ces deux fichiers un par un.

main.go :

  1. Importer les packages requis :

    package main
    
    import (
     "log"
     "net/http"
    
     "github.com/gorilla/websocket"
    )
    Copier après la connexion
  2. Définir le programme de mise à niveau de la connexion WebSocket :

    var upgrader = websocket.Upgrader{
     CheckOrigin: func(r *http.Request) bool {
         return true
     },
    }
    Copier après la connexion
  3. Définir la fonction du gestionnaire WebSocket :

    func websocketHandler(w http.ResponseWriter, r *http.Request) {
     conn, err := upgrader.Upgrade(w, r, nil)
     if err != nil {
         log.Println(err)
         return
     }
    
     // 处理文件传输逻辑
    }
    Copier après la connexion
  4. Démarrer le serveur HTTP et enregistrer le Web Dispositif de gestion des prises :

    func main() {
     http.HandleFunc("/ws", websocketHandler)
     http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
         http.ServeFile(w, r, "index.html")
     })
    
     log.Println("Server started on localhost:8000")
     log.Fatal(http.ListenAndServe(":8000", nil))
    }
    Copier après la connexion

index.html :

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件传输</title>
</head>
<body>
    <input type="file" id="file" name="file" />
    <button onclick="sendFile()">传输文件</button>

    <script>
        var ws = new WebSocket("ws://localhost:8000/ws");

        ws.onopen = function(){
            console.log("已连接");
        }

        ws.onmessage = function(e){
            console.log("接收到消息");
            // 处理接收到的文件数据
        }

        ws.onclose = function(){
            console.log("连接已关闭");
        }

        function sendFile(){
            var fileInput = document.getElementById("file");
            var file = fileInput.files[0];

            if(file){
                var reader = new FileReader();
                reader.readAsBinaryString(file);

                reader.onload = function(e){
                    var fileData = e.target.result;
                    ws.send(fileData);
                }
            }
        }
    </script>
</body>
</html>
Copier après la connexion

IV. Implémentation du transfert de fichiers
Dans la fonction websocketHandler de main.go, nous pouvons écrire une logique de transfert de fichiers spécifique. Voici un exemple de lecture et d'envoi simple de fichier :

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

    // 文件读取
    filePath := "example.txt"
    file, err := os.Open(filePath)
    if err != nil {
        log.Println(err)
        return
    }
    defer file.Close()

    fileData, err := ioutil.ReadAll(file)
    if err != nil {
        log.Println(err)
        return
    }

    // 文件发送
    if err := conn.WriteMessage(websocket.BinaryMessage, fileData); err != nil {
        log.Println(err)
        return
    }
}
Copier après la connexion

Dans index.html, nous utilisons l'objet FileReader de JavaScript pour lire les données du fichier à transférer et les envoyer au serveur via WebSocket :

function sendFile(){
    var fileInput = document.getElementById("file");
    var file = fileInput.files[0];

    if(file){
        var reader = new FileReader();
        reader.readAsBinaryString(file);

        reader.onload = function(e){
            var fileData = e.target.result;
            ws.send(fileData);
        }
    }
}
Copier après la connexion

5. Exécutez le projet
Dans la ligne de commande, entrez le répertoire du projet et exécutez la commande suivante pour démarrer le serveur :

go run main.go
Copier après la connexion

Puis visitez http://localhost:8000 dans le navigateur, cliquez sur le bouton "Transférer le fichier" et sélectionnez un fichier à transférer. Le serveur lit les données du fichier et les envoie au client, et le client reçoit et traite les données du fichier via WebSocket. À ce stade, le développement d'une fonction de transfert de fichiers en ligne basée sur Golang et Websocket est terminé.

Conclusion :
Cet article explique comment utiliser Golang pour développer une application de transfert de fichiers en ligne basée sur Websocket et fournit des exemples de code spécifiques. En utilisant Golang et Websocket, nous pouvons facilement implémenter la fonction de transfert de fichiers en temps réel. J'espère que ce tutoriel sera utile pour apprendre et développer des applications 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!