Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Panduan Pembangunan Soket Web golang: Melaksanakan fungsi pengurusan jadual dalam talian berbilang orang

Panduan Pembangunan Soket Web golang: Melaksanakan fungsi pengurusan jadual dalam talian berbilang orang

WBOY
WBOYasal
2023-12-02 09:09:26612semak imbas

golang Websocket开发指南:实现多人在线日程管理功能

Panduan Pembangunan Soket Web Golang: Melaksanakan Fungsi Pengurusan Jadual Dalam Talian Berbilang Orang

Pengenalan:
Dengan kadar pantas dan keperluan pelbagai tugas dalam kehidupan moden, kita sering perlu membuat pelarasan dan penyelarasan dalam jadual. Fungsi pengurusan jadual dalam talian berbilang orang boleh membantu berbilang orang bekerjasama dan berkongsi jadual dalam masa nyata, meningkatkan kecekapan kerja. Artikel ini akan memperkenalkan cara menggunakan teknologi Golang dan Websocket untuk melaksanakan fungsi pengurusan jadual dalam talian berbilang orang dan melampirkan contoh kod khusus. . Mulakan modul Go baharu menggunakan arahan berikut:

go mod init schedule
  1. Kemudian, kita perlu memperkenalkan kebergantungan yang diperlukan dalam projek:
  2. go get -u github.com/gin-gonic/gin
    go get -u github.com/gorilla/websocket
  3. Buat pelayan Websocket:
  4. Seterusnya, kami akan mencipta pelayan Websocket untuk Pelaksanaan pelbagai -fungsi pengurusan jadual dalam talian orang. Dalam direktori akar projek, buat fail bernama main.go dan tambahkan kod berikut dalam fail:
  5. package main
    
    import (
        "log"
        "net/http"
    
        "github.com/gin-gonic/gin"
        "github.com/gorilla/websocket"
    )
    
    func main() {
        router := gin.Default()
    
        upgrader := websocket.Upgrader{
            CheckOrigin: func(r *http.Request) bool {
                return true
            },
        }
    
        router.GET("/ws", func(c *gin.Context) {
            conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
            if err != nil {
                log.Println("Failed to upgrade connection:", err)
                return
            }
    
            // TODO: 处理连接和消息
        })
    
        router.Run(":8000")
    }
  6. Dalam kod di atas, kami menggunakan rangka kerja Gin untuk mencipta HTTP mudah pelayan, dan mendaftarkan laluan Websocket pada laluan /ws. Dalam fungsi pemprosesan penghalaan, kami menaik taraf sambungan HTTP Naik Taraf kepada sambungan Websocket dan mendapatkan sambungan yang diwujudkan dengan klien.


      Memproses sambungan dan mesej:Dalam pelayan Websocket kami, kami perlu melaksanakan pemprosesan sambungan dan fungsi penyiaran mesej. Tambahkan kod berikut dalam fungsi pemprosesan laluan:
connections := make(map[*websocket.Conn]bool) // 存储所有连接的映射表

router.GET("/ws", func(c *gin.Context) {
    conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
    if err != nil {
        log.Println("Failed to upgrade connection:", err)
        return
    }

    connections[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println("Error reading message:", err)
            delete(connections, conn)
            conn.Close()
            break
        }

        // 广播消息给所有连接
        for conn := range connections {
            err := conn.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println("Error broadcasting message:", err)
                delete(connections, conn)
                conn.Close()
            }
        }
    }
})

Dalam kod di atas, kami menggunakan jadual pemetaan sambungan untuk menyimpan semua sambungan. Apabila sambungan baharu diwujudkan, kami menambah sambungan pada jadual pemetaan. Pada masa yang sama, kami membaca mesej daripada pelanggan melalui gelung tak terhingga dan menyiarkan mesej itu ke semua sambungan.

      Pelaksanaan bahagian hadapan:
    1. Akhir sekali, kami perlu melaksanakan antara muka mudah di bahagian hadapan untuk menguji fungsi pengurusan jadual dalam talian berbilang orang kami. Dalam direktori akar projek, buat fail bernama index.html dan tambahkan kod berikut dalam fail:
      main.go的文件,并在文件中添加以下代码:
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Schedule</title>
    </head>
    
    <body>
        <h1>Schedule</h1>
    
        <input type="text" id="message" placeholder="Enter your message">
        <button id="send">Send</button>
    
        <ul id="messages"></ul>
    
        <script>
            const socket = new WebSocket("ws://localhost:8000/ws");
    
            const messageInput = document.getElementById("message");
            const sendButton = document.getElementById("send");
            const messagesList = document.getElementById("messages");
    
            sendButton.addEventListener("click", () => {
                const message = messageInput.value;
                socket.send(message);
                messageInput.value = "";
            });
    
            socket.addEventListener("message", (event) => {
                const message = document.createElement("li");
                message.innerHTML = event.data;
                messagesList.appendChild(message);
            });
        </script>
    </body>
    
    </html>

    上述代码中,我们使用了Gin框架创建了一个简单的HTTP服务器,并在/ws路径上注册了一个Websocket路由。在路由处理函数中,我们将Upgrade HTTP连接升级为Websocket连接,并获取到与客户端建立的连接。

    1. 处理连接和消息:
      在我们的Websocket服务器中,我们需要实现对连接的处理和消息的广播功能。在路由处理函数中添加以下代码:
    rrreee

    上面的代码中,我们使用一个映射表connections来存储所有连接。当有新的连接建立时,我们将该连接添加到映射表中。同时,我们通过一个无限循环来读取来自客户端的消息,并将该消息广播给所有连接。

    1. 前端实现:
      最后,我们需要在前端实现一个简单的界面来测试我们的多人在线日程管理功能。在项目的根目录下,创建一个名为index.htmlrrreee
    2. Dalam kod di atas, kami menggunakan objek WebSocket JavaScript untuk berkomunikasi dengan pelayan Wujudkan sambungan dan dengar input pengguna dan mesej pelayan. Apabila pengguna mengklik butang Hantar, kami menghantar mesej yang dimasukkan ke pelayan. Pada masa yang sama, apabila mesej diterima daripada pelayan, kami menambah mesej itu pada senarai mesej pada antara muka.

    Ringkasan:

    Artikel ini memperkenalkan cara menggunakan teknologi Golang dan Websocket untuk melaksanakan fungsi pengurusan jadual dalam talian berbilang orang. Kami mula-mula mencipta pelayan Websocket dan melaksanakan pemprosesan sambungan dan fungsi penyiaran mesej. Kemudian, kami melaksanakan antara muka mudah pada bahagian hadapan untuk menguji kefungsian kami. Melalui artikel ini, saya berharap pembaca dapat memahami dan menguasai kaedah dan teknik penggunaan Golang dan Websocket untuk mencapai fungsi yang serupa.


    Pautan rujukan:

    Rangka kerja Gin: https://github.com/gin-gonic/gin
  • Perpustakaan Soket Web Gorilla: https://github.com/gorilla/websocket

Atas ialah kandungan terperinci Panduan Pembangunan Soket Web golang: Melaksanakan fungsi pengurusan jadual dalam talian berbilang orang. 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