Rumah >pembangunan bahagian belakang >Golang >Tutorial golang Websocket: Bagaimana untuk membangunkan fungsi pemindahan fail dalam talian

Tutorial golang Websocket: Bagaimana untuk membangunkan fungsi pemindahan fail dalam talian

WBOY
WBOYasal
2023-12-17 14:46:101177semak imbas

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

Tutorial Golang Websocket: Cara Membangunkan Fungsi Pemindahan Fail Dalam Talian

Pengenalan:
Dengan perkembangan pesat Internet, pemindahan fail telah menjadi satu keperluan yang sering dihadapi oleh orang ramai di Internet. Menggunakan teknologi Websocket, kami boleh melaksanakan fungsi pemindahan fail dalam talian dengan mudah. Artikel ini akan memperkenalkan cara menggunakan Golang untuk membangunkan aplikasi pemindahan fail dalam talian berdasarkan Websocket, dan memberikan contoh kod khusus.

1. Pengenalan kepada Websocket
Websocket ialah protokol komunikasi dupleks penuh berdasarkan sambungan TCP. Ia boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan untuk mencapai penghantaran data masa nyata. Berbanding dengan protokol HTTP tradisional, Websocket mempunyai kependaman yang lebih rendah, prestasi serentak yang lebih tinggi dan keupayaan penghantaran data yang lebih baik, menjadikannya pilihan ideal untuk membangunkan aplikasi masa nyata dan fungsi interaktif dalam talian.

2. Persediaan persekitaran pembangunan
Untuk melengkapkan tutorial ini, anda perlu memasang persekitaran pembangunan Golang terlebih dahulu dan mempunyai asas pengaturcaraan Golang tertentu. Pada masa yang sama, kami juga perlu memperkenalkan perpustakaan Websocket pihak ketiga untuk pembangunan pesat.

Pasang perpustakaan Websocket pihak ketiga:

go get github.com/gorilla/websocket

3 Struktur projek dan penerangan kod
Projek kami akan mengandungi dua fail utama: main.go dan index.html. Antaranya, main.go ialah kod pelayan dan index.html ialah kod klien. Di bawah, kami akan memperkenalkan pelaksanaan kod kedua-dua fail ini satu demi satu.

main.go:

  1. import Pakej yang Diperlukan:

    package main
    
    import (
     "log"
     "net/http"
    
     "github.com/gorilla/websocket"
    )
  2. Define WebSocket Connection Upgrader:

    var upgrader = websocket.Upgrader{
     CheckOrigin: func(r *http.Request) bool {
         return true
     },
    }
  3. define WebSocket Handler Function:

    func websocketHandler(w http.ResponseWriter, r *http.Request) {
     conn, err := upgrader.Upgrade(w, r, nil)
     if err != nil {
         log.Println(err)
         return
     }
    
     // 处理文件传输逻辑
    }
    e
  4. Start Server HTTP dan Daftar Peranti Pengendalian WebSocket:

    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))
    }

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>

IV. Pelaksanaan pemindahan fail
Dalam fungsi websocketHandler dalam main.go, kita boleh menulis logik pemindahan fail tertentu. Berikut ialah contoh pembacaan dan penghantaran fail mudah:

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
    }
}

Dalam index.html, kami menggunakan objek FileReader JavaScript untuk membaca data fail yang akan dipindahkan dan menghantarnya ke pelayan melalui 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);
        }
    }
}

5. Jalankan projek
Dalam baris arahan, masukkan direktori projek, laksanakan arahan berikut untuk memulakan pelayan:

go run main.go

Kemudian lawati http://localhost:8000 dalam penyemak imbas, klik butang "Transfer File", dan pilih fail untuk dipindahkan. Pelayan membaca data fail dan menghantarnya kepada klien, dan klien menerima dan memproses data fail melalui WebSocket. Pada ketika ini, pembangunan fungsi pemindahan fail dalam talian berdasarkan Golang dan Websocket selesai.

Kesimpulan:
Artikel ini memperkenalkan cara menggunakan Golang untuk membangunkan aplikasi pemindahan fail dalam talian berdasarkan Websocket, dan menyediakan contoh kod khusus. Dengan menggunakan Golang dan Websocket, kami boleh melaksanakan fungsi pemindahan fail masa nyata dengan mudah. Saya harap tutorial ini berguna untuk mempelajari dan membangunkan aplikasi Websocket!

Atas ialah kandungan terperinci Tutorial golang Websocket: Bagaimana untuk membangunkan fungsi pemindahan fail dalam talian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn