Golang Websocket-Tutorial: So entwickeln Sie eine Online-Dateiübertragungsfunktion

WBOY
Freigeben: 2023-12-17 14:46:10
Original
1035 Leute haben es durchsucht

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

Golang Websocket-Tutorial: So entwickeln Sie eine Online-Dateiübertragungsfunktion

Einführung:
Mit der rasanten Entwicklung des Internets ist die Dateiübertragung zu einem Bedürfnis geworden, mit dem Menschen im Internet häufig konfrontiert sind. Mithilfe der Websocket-Technologie können wir problemlos Online-Dateiübertragungsfunktionen implementieren. In diesem Artikel wird erläutert, wie Sie mit Golang eine auf Websocket basierende Online-Dateiübertragungsanwendung entwickeln, und es werden spezifische Codebeispiele bereitgestellt.

1. Einführung in Websocket
Websocket ist ein Vollduplex-Kommunikationsprotokoll, das auf einer TCP-Verbindung basiert. Es kann eine dauerhafte Verbindung zwischen dem Browser und dem Server herstellen, um eine Datenübertragung in Echtzeit zu erreichen. Im Vergleich zum herkömmlichen HTTP-Protokoll weist Websocket eine geringere Latenz, eine höhere Parallelitätsleistung und bessere Datenübertragungsfunktionen auf, was es zur idealen Wahl für die Entwicklung von Echtzeitanwendungen und interaktiven Online-Funktionen macht.

2. Vorbereitung der Entwicklungsumgebung
Um dieses Tutorial abzuschließen, müssen Sie zuerst die Golang-Entwicklungsumgebung installieren und über bestimmte Grundlagen der Golang-Programmierung verfügen. Gleichzeitig müssen wir für eine schnelle Entwicklung auch eine Websocket-Bibliothek eines Drittanbieters einführen.

Installieren Sie die Websocket-Bibliothek eines Drittanbieters:

go get github.com/gorilla/websocket
Nach dem Login kopieren

3. Projektstruktur und Codebeschreibung
Unser Projekt enthält zwei Hauptdateien: main.go und index.html. Unter diesen ist main.go der Servercode und index.html der Clientcode. Im Folgenden stellen wir nacheinander die Code-Implementierung dieser beiden Dateien vor.

main.go:

  1. Importieren Sie die erforderlichen Pakete:

    package main
    
    import (
     "log"
     "net/http"
    
     "github.com/gorilla/websocket"
    )
    Nach dem Login kopieren
  2. Definieren Sie den WebSocket-Verbindungs-Upgrader:

    var upgrader = websocket.Upgrader{
     CheckOrigin: func(r *http.Request) bool {
         return true
     },
    }
    Nach dem Login kopieren
  3. Definieren Sie den WebSocket-Handler. Funktion:

    func websocketHandler(w http.ResponseWriter, r *http.Request) {
     conn, err := upgrader.Upgrade(w, r, nil)
     if err != nil {
         log.Println(err)
         return
     }
    
     // 处理文件传输逻辑
    }
    Nach dem Login kopieren
  4. Starten den HTTP-Server und registrieren Sie den WebSocket Handler-Gerät:

    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))
    }
    Nach dem Login kopieren

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>
Nach dem Login kopieren

IV Dateiübertragungsimplementierung
In der websocketHandler-Funktion in main.go können wir eine spezifische Dateiübertragungslogik schreiben. Hier ist ein Beispiel für einfaches Lesen und Senden von Dateien:

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
    }
}
Nach dem Login kopieren

In index.html verwenden wir das FileReader-Objekt von JavaScript, um die zu übertragenden Dateidaten zu lesen und über WebSocket an den Server zu senden:

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);
        }
    }
}
Nach dem Login kopieren

5. Führen Sie das Projekt aus
Geben Sie in der Befehlszeile das Projektverzeichnis ein und führen Sie den folgenden Befehl aus, um den Server zu starten:

go run main.go
Nach dem Login kopieren

Besuchen Sie dann http://localhost:8000 im Browser, klicken Sie auf die Schaltfläche „Datei übertragen“ und wählen Sie eine zu übertragende Datei aus. Der Server liest die Dateidaten und sendet sie an den Client, und der Client empfängt und verarbeitet die Dateidaten über WebSocket. Zu diesem Zeitpunkt ist die Entwicklung einer Online-Dateiübertragungsfunktion basierend auf Golang und Websocket abgeschlossen.

Fazit:
Dieser Artikel stellt vor, wie man mit Golang eine Online-Dateiübertragungsanwendung basierend auf Websocket entwickelt, und stellt spezifische Codebeispiele bereit. Durch die Verwendung von Golang und Websocket können wir problemlos eine Dateiübertragungsfunktion in Echtzeit implementieren. Ich hoffe, dass dieses Tutorial beim Erlernen und Entwickeln von Websocket-Anwendungen hilfreich ist!

Das obige ist der detaillierte Inhalt vonGolang Websocket-Tutorial: So entwickeln Sie eine Online-Dateiübertragungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!