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
go get -u github.com/gin-gonic/gin go get -u github.com/gorilla/websocket
main.go
dan tambahkan kod berikut dalam fail: 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") }
/ws
. Dalam fungsi pemprosesan penghalaan, kami menaik taraf sambungan HTTP Naik Taraf kepada sambungan Websocket dan mendapatkan sambungan yang diwujudkan dengan klien. 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
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连接,并获取到与客户端建立的连接。
上面的代码中,我们使用一个映射表connections
来存储所有连接。当有新的连接建立时,我们将该连接添加到映射表中。同时,我们通过一个无限循环来读取来自客户端的消息,并将该消息广播给所有连接。
index.html
rrreeeRingkasan:
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:
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!