ホームページ >バックエンド開発 >Golang >golang Websocket チュートリアル: オンラインファイル転送機能の開発方法

golang Websocket チュートリアル: オンラインファイル転送機能の開発方法

WBOY
WBOYオリジナル
2023-12-17 14:46:101181ブラウズ

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

Golang Websocket チュートリアル: オンライン ファイル転送機能の開発方法

はじめに:
インターネットの急速な発展に伴い、ファイル転送は一般的な問題になりました。人々はインターネット上でしばしばニーズに直面します。 Websocket テクノロジーを使用すると、オンライン ファイル転送機能を簡単に実装できます。この記事では、Golang を使用して Websocket に基づくオンライン ファイル転送アプリケーションを開発する方法を紹介し、具体的なコード例を示します。

1. Websocket の概要
Websocket は、TCP 接続に基づく全二重通信プロトコルで、ブラウザとサーバーの間に永続的な接続を確立して、リアルタイムのデータ送信を実現します。従来の HTTP プロトコルと比較して、Websocket は遅延が短く、同時実行パフォーマンスが高く、データ送信機能が優れているため、リアルタイム アプリケーションやオンライン インタラクティブ機能の開発には理想的な選択肢となります。

2. 開発環境の準備
このチュートリアルを完了するには、まず Golang 開発環境をインストールし、Golang プログラミングのある程度の基礎を身につける必要があります。同時に、迅速な開発のためにサードパーティの Websocket ライブラリを導入する必要もあります。

サードパーティ Websocket ライブラリをインストールします:

go get github.com/gorilla/websocket

3. プロジェクトの構造とコードの説明
私たちのプロジェクトには、main.go とindex.html という 2 つのメイン ファイルが含まれます。このうち、main.go がサーバー コード、index.html がクライアント コードです。以下では、これら 2 つのファイルのコード実装を 1 つずつ紹介します。

main.go:

  1. 必要なパッケージのインポート:

    package main
    
    import (
     "log"
     "net/http"
    
     "github.com/gorilla/websocket"
    )
  2. WebSocket 接続アップグレードの定義:

    var upgrader = websocket.Upgrader{
     CheckOrigin: func(r *http.Request) bool {
         return true
     },
    }
  3. WebSocket プロセッサ関数を定義します:

    func websocketHandler(w http.ResponseWriter, r *http.Request) {
     conn, err := upgrader.Upgrade(w, r, nil)
     if err != nil {
         log.Println(err)
         return
     }
    
     // 处理文件传输逻辑
    }
  4. #HTTP サーバーを起動し、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>

4. ファイル転送の実装

main.go の websocketHandler 関数で、特定のファイル転送ロジックを記述することができます。ここでは、単純なファイルの読み取りと送信を例として取り上げます。

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

index.html では、JavaScript の FileReader オブジェクトを使用して、転送されるファイル データを読み取り、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. プロジェクトを実行します

コマンド ラインでプロジェクト ディレクトリを入力し、次のコマンドを実行してサーバーを起動します:

go run main.go

次に、ブラウザで http://localhost:8000 にアクセスし、 「ファイルを転送」ボタンをクリックして、転送するファイルを選択します。サーバーはファイル データを読み取ってクライアントに送信し、クライアントは WebSocket を通じてファイル データを受信して​​処理します。これで、Golang と Websocket をベースとしたオンラインファイル転送機能の開発が完了しました。

結論:

この記事では、Golang を使用して Websocket に基づいたオンライン ファイル転送アプリケーションを開発する方法を紹介し、具体的なコード例を示します。 GolangとWebsocketを利用することで、リアルタイムファイル転送機能を簡単に実装できます。このチュートリアルが Websocket アプリケーションの学習と開発に役立つことを願っています。

以上がgolang Websocket チュートリアル: オンラインファイル転送機能の開発方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。