Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tutorial golang Websocket: bagaimana untuk membangunkan fungsi penyerahan dalam talian

Tutorial golang Websocket: bagaimana untuk membangunkan fungsi penyerahan dalam talian

王林
王林asal
2023-12-17 10:23:211087semak imbas

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

Tutorial Soket Web Golang: Cara membangunkan fungsi penghantaran dalam talian

Pengenalan:
Dengan perkembangan pesat Internet, semakin banyak aplikasi perlu melaksanakan fungsi komunikasi masa nyata. Dalam aplikasi rangkaian, teknologi Websocket telah menjadi protokol komunikasi yang biasa digunakan. Artikel ini bertujuan untuk mengajar pembaca cara menggunakan bahasa Golang untuk membangunkan fungsi penyerahan dalam talian dan menggunakan Websocket untuk mencapai interaksi masa nyata.

1. Pengenalan kepada Websocket
Websocket ialah protokol komunikasi dupleks penuh yang boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan untuk mencapai komunikasi masa nyata. Berbanding dengan protokol HTTP tradisional, Websocket mempunyai kependaman yang lebih rendah dan daya pemprosesan yang lebih tinggi, dan sesuai untuk senario aplikasi yang memproses data masa nyata.

2. Persediaan persekitaran pembangunan
Sebelum memulakan pembangunan, anda perlu menyediakan persekitaran pembangunan Golang.

  1. Pasang Golang: Lawati tapak web rasmi https://golang.org/doc/install untuk memuat turun dan memasang versi Golang yang sesuai untuk sistem pengendalian anda.
  2. Pasang perpustakaan berkaitan:

    go get github.com/gorilla/websocket

3. Reka bentuk struktur projek
Sebelum membangunkan fungsi penyerahan dalam talian, anda perlu merancang struktur direktori projek.

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

4. Pelaksanaan kod

  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. pengendali.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

    <!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>
  4. Masukkan dalam arahan baris Dalam direktori projek, laksanakan arahan berikut untuk memulakan pelayan:
go run main.go

Buka pelayar dan masukkan alamat http://localhost:8080/ untuk mengakses halaman.
  1. 6. Rumusan

    Melalui langkah di atas, kami telah menyelesaikan pembangunan fungsi penyerahan dalam talian berdasarkan Golang. Penghantaran mesej masa nyata direalisasikan melalui Websocket Selepas pengguna memasukkan mesej dalam kotak teks dan mengklik butang hantar, mesej itu boleh dihantar ke pelayan dan dipaparkan pada halaman serta-merta.
  2. Terus belajar dan mengamalkan teknologi berkaitan Websocket akan membawa lebih banyak kemungkinan dan inovasi kepada pembangunan. Saya harap pembaca boleh menggunakan panduan artikel ini untuk menggunakan Golang dengan lebih baik untuk membangunkan lebih banyak aplikasi rangkaian masa nyata dan interaktif.

Atas ialah kandungan terperinci Tutorial golang Websocket: bagaimana untuk membangunkan fungsi penyerahan 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