Cara menggunakan WebSocket untuk pemindahan fail dalam golang
WebSocket ialah protokol rangkaian yang menyokong komunikasi dua hala dan mampu mewujudkan sambungan berterusan antara penyemak imbas dan pelayan. Dalam golang, kita boleh menggunakan gorila/soket web perpustakaan pihak ketiga untuk melaksanakan fungsi WebSocket. Artikel ini akan memperkenalkan cara menggunakan perpustakaan golang dan gorila/soket web untuk pemindahan fail.
Pertama, kita perlu memasang perpustakaan gorila/soket web. Ia boleh dipasang menggunakan arahan berikut:
go get github.com/gorilla/websocket
Seterusnya, kami mencipta program sebelah pelayan golang untuk menerima dan mengendalikan sambungan WebSocket. Berikut ialah contoh kod:
package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func main() { http.HandleFunc("/", handleWebSocket) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } } func handleWebSocket(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Print("upgrade error: ", err) return } defer conn.Close() for { _, message, err := conn.ReadMessage() if err != nil { log.Print("read error: ", err) break } fmt.Printf("received message: %s ", message) err = conn.WriteMessage(websocket.TextMessage, []byte("Message received!")) if err != nil { log.Print("write error: ", err) break } } }
Kod di atas mencipta fungsi pemprosesan HTTP untuk mengendalikan permintaan sambungan WebSocket. Dalam fungsi pengendali ini, kami mula-mula menaik taraf sambungan HTTP kepada sambungan WebSocket, dan kemudian masukkan gelung tak terhingga untuk terus menerima mesej daripada klien dan mengembalikan respons yang mudah. Kod sampel di sini tidak melakukan pemindahan fail, tetapi hanya menunjukkan proses menerima dan menghantar mesej.
Seterusnya, kami mencipta program klien golang untuk menyambung ke pelayan dan menghantar fail ke pelayan. Berikut ialah contoh kod:
package main import ( "fmt" "log" "net/url" "os" "github.com/gorilla/websocket" ) func main() { u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/"} conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal("dial error: ", err) } defer conn.Close() file, err := os.Open("test.txt") if err != nil { log.Fatal("open file error: ", err) } defer file.Close() fileInfo, _ := file.Stat() fileSize := fileInfo.Size() fileName := fileInfo.Name() err = conn.WriteMessage(websocket.TextMessage, []byte(fileName)) if err != nil { log.Fatal("write error: ", err) } buffer := make([]byte, 1024) for { bytesRead, err := file.Read(buffer) if err != nil { break } err = conn.WriteMessage(websocket.BinaryMessage, buffer[:bytesRead]) if err != nil { log.Fatal("write error: ", err) } } err = conn.WriteMessage(websocket.TextMessage, []byte("Transmission finished")) if err != nil { log.Fatal("write error: ", err) } fmt.Println("File transmission completed") }
Kod di atas mencipta klien WebSocket, menyambung ke pelayan dan menghantar fail. Dalam klien ini, kami mula-mula menghantar nama fail ke pelayan, kemudian membaca kandungan fail dalam gelung dan menghantarnya ke pelayan sehingga fail dibaca. Akhir sekali, kami menghantar mesej tamat kepada pelayan untuk menunjukkan bahawa pemindahan telah selesai.
Perhatikan bahawa program klien perlu menyediakan fail bernama test.txt terlebih dahulu, yang akan dihantar ke pelayan. Anda boleh menukar nama fail dan laluan mengikut keperluan sebenar.
Di atas adalah contoh mudah menggunakan WebSocket untuk pemindahan fail. Dengan menggunakan perpustakaan gorila/websocket, fungsi WebSocket boleh dilaksanakan dengan mudah dalam golang. Walau bagaimanapun, dalam aplikasi sebenar, lebih banyak senario perlu dikendalikan, seperti pemprosesan pemotongan sambungan, pemindahan pemecahan fail, dsb. Semasa proses pembangunan, isu-isu seperti keselamatan dan prestasi juga perlu dipertimbangkan. Saya harap artikel ini dapat membantu anda dan memberi inspirasi kepada anda untuk menggunakan WebSocket untuk pemindahan fail dalam golang.
Atas ialah kandungan terperinci Cara menggunakan WebSocket untuk pemindahan fail dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!