ホームページ  >  記事  >  バックエンド開発  >  golang Websocket チュートリアル: オンライン投稿機能の開発方法

golang Websocket チュートリアル: オンライン投稿機能の開発方法

王林
王林オリジナル
2023-12-17 10:23:211087ブラウズ

golang Websocket教程:如何开发在线投稿功能

Golang Websocket チュートリアル: オンライン投稿機能の開発方法

はじめに:
インターネットの急速な発展に伴い、ますます多くのアプリケーションが、実際の機能を実現する必要があります。時刻通信機能。ネットワーク アプリケーションでは、Websocket テクノロジが一般的に使用される通信プロトコルになっています。この記事は、Golang 言語を使用してオンライン投稿機能を開発し、Websocket を使用してリアルタイムの対話を実現する方法を読者に教えることを目的としています。

1. Websocket の概要
Websocket は、ブラウザとサーバーの間に永続的な接続を確立してリアルタイム通信を実現できる全二重通信プロトコルです。従来の HTTP プロトコルと比較して、Websocket は待ち時間が短く、スループットが高いため、リアルタイム データを処理するアプリケーション シナリオに適しています。

2. 開発環境のセットアップ
開発を開始する前に、Golang 開発環境をセットアップする必要があります。

  1. Golang のインストール: 公式 Web サイト https://golang.org/doc/install にアクセスして、オペレーティング システムに適した Golang バージョンをダウンロードしてインストールします。
  2. 関連ライブラリのインストール:

    go get github.com/gorilla/websocket

3. プロジェクト構造の設計
オンライン投稿機能を開発する前に、プロジェクトのディレクトリ構造を計画する必要があります。プロジェクト。

- main.go
- handler.go
- template
  - index.html

4. コードの実装

  1. #main.go

    package main
    
    import (
        "html/template"
        "log"
        "net/http"
    
        "github.com/gorilla/websocket"
    )
    
    var (
        upgrader = websocket.Upgrader{}
        clients  = make(map[*websocket.Conn]bool)
        broadcast = make(chan []byte)
        homeTemplate *template.Template
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        homeTemplate.Execute(w, nil)
    }
    
    func websocketHandler(w http.ResponseWriter, r *http.Request) {
        conn, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Println(err)
            return
        }
        defer conn.Close()
    
        clients[conn] = true
    
        for {
            _, msg, err := conn.ReadMessage()
            if err != nil {
                log.Println(err)
                delete(clients, conn)
                return
            }
            broadcast <- msg
        }
    }
    
    func handleMessages() {
        for {
            msg := <-broadcast
            for client := range clients {
                err := client.WriteMessage(websocket.TextMessage, msg)
                if err != nil {
                    log.Println(err)
                    client.Close()
                    delete(clients, client)
                }
            }
        }
    }
    
    func main() {
        // 配置文件路径
        homeTemplate = template.Must(template.ParseFiles("template/index.html"))
    
        http.HandleFunc("/", homeHandler)
        http.HandleFunc("/ws", websocketHandler)
    
        go handleMessages()
    
        err := http.ListenAndServe(":8080", nil)
        if err != nil {
            log.Fatal(err)
        }
    }

  2. #handler.go
  3. package main
    
    import (
        "net/http"
        "path/filepath"
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        filePath, _ := filepath.Abs("template/index.html")
        http.ServeFile(w, r, filePath)
    }

  4. template/index.html
  5. <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>在线投稿功能</title>
    </head>
    <body>
        <h1>在线投稿功能</h1>
        <textarea id="message-input" rows="5" cols="30"></textarea>
        <button id="send-btn">发送</button>
        <br>
        <ul id="message-list"></ul>
    </body>
    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");
        socket.onmessage = function (event) {
            var messageList = document.getElementById("message-list");
            var messageItem = document.createElement("li");
            messageItem.innerText = event.data;
            messageList.appendChild(messageItem);
        };
    
        document.getElementById("send-btn").addEventListener("click", function () {
            var messageInput = document.getElementById("message-input");
            var message = messageInput.value;
            socket.send(message);
        });
    </script>
    </html>

    #5. テストの実行

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

go run main.go
  1. ブラウザを開き、アドレス http://localhost:8080/ を入力してページにアクセスします。

  2. 6. まとめ
  3. 以上の手順で、Golang をベースとしたオンライン投稿機能の開発が完了しました。 Websocketによるリアルタイムのメッセージ配信を実現しており、ユーザーがテキストボックスにメッセージを入力して送信ボタンをクリックすると、即座にメッセージがサーバーに送信され、ページ上に表示されます。
Websocket 関連テクノロジーの学習と実践を続けることで、開発にさらなる可能性と革新がもたらされます。読者がこの記事のガイダンスを活用して、Golang をより効果的に使用して、よりリアルタイムでインタラクティブなネットワーク アプリケーションを開発できることを願っています。

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

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