Heim  >  Artikel  >  Backend-Entwicklung  >  Golang Websocket-Tutorial: So entwickeln Sie die Online-Übermittlungsfunktion

Golang Websocket-Tutorial: So entwickeln Sie die Online-Übermittlungsfunktion

王林
王林Original
2023-12-17 10:23:211087Durchsuche

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

Golang Websocket-Tutorial: So entwickeln Sie eine Online-Übermittlungsfunktion

Einführung:
Mit der rasanten Entwicklung des Internets müssen immer mehr Anwendungen Echtzeit-Kommunikationsfunktionen implementieren. In Netzwerkanwendungen hat sich die Websocket-Technologie zu einem häufig verwendeten Kommunikationsprotokoll entwickelt. Ziel dieses Artikels ist es, den Lesern beizubringen, wie sie mithilfe der Golang-Sprache eine Online-Übermittlungsfunktion entwickeln und mit Websocket eine Echtzeitinteraktion erreichen können.

1. Einführung in Websocket
Websocket ist ein Vollduplex-Kommunikationsprotokoll, das eine dauerhafte Verbindung zwischen dem Browser und dem Server herstellen kann, um eine Echtzeitkommunikation zu erreichen. Im Vergleich zum herkömmlichen HTTP-Protokoll weist Websocket eine geringere Latenz und einen höheren Durchsatz auf und eignet sich für Anwendungsszenarien, die Echtzeitdaten verarbeiten.

2. Einrichtung der Entwicklungsumgebung
Bevor Sie mit der Entwicklung beginnen, müssen Sie die Golang-Entwicklungsumgebung einrichten.

  1. Golang installieren: Besuchen Sie die offizielle Website https://golang.org/doc/install, um die für Ihr Betriebssystem geeignete Golang-Version herunterzuladen und zu installieren.
  2. Installieren Sie verwandte Bibliotheken:

    go get github.com/gorilla/websocket

3. Projektstrukturdesign
Bevor Sie die Online-Einreichungsfunktion entwickeln, müssen Sie die Verzeichnisstruktur des Projekts planen.

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

4. Code-Implementierung

  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

    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)
    }
  3. template/index.html

5. Führen Sie den Test aus

  1. Geben Sie den Befehl ein Zeile Führen Sie im Projektverzeichnis den folgenden Befehl aus, um den Server zu starten:

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

  2. Öffnen Sie den Browser und geben Sie die Adresse http://localhost:8080/ ein, um auf die Seite zuzugreifen.
6. Zusammenfassung

Durch die oben genannten Schritte haben wir die Entwicklung einer Online-Einreichungsfunktion auf Basis von Golang abgeschlossen. Die Nachrichtenübermittlung in Echtzeit erfolgt über Websocket. Nachdem der Benutzer die Nachricht in das Textfeld eingegeben und auf die Schaltfläche „Senden“ geklickt hat, kann die Nachricht an den Server gesendet und sofort auf der Seite angezeigt werden.

Das weitere Erlernen und Üben von Websocket-bezogenen Technologien wird der Entwicklung mehr Möglichkeiten und Innovationen bringen. Ich hoffe, dass die Leser mithilfe der Anleitung dieses Artikels Golang besser nutzen können, um mehr Echtzeit- und interaktive Netzwerkanwendungen zu entwickeln.

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

Stellungnahme:
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