Golang Websocket-Entwicklungsleitfaden: Implementierung der Online-Zeitplanverwaltungsfunktion für mehrere Personen
Einführung:
Angesichts des schnellen Tempos und der Multitasking-Anforderungen des modernen Lebens müssen wir häufig Anpassungen und Koordination in Zeitplänen vornehmen. Die Online-Terminverwaltungsfunktion für mehrere Personen kann dabei helfen, dass mehrere Personen zusammenarbeiten und Zeitpläne in Echtzeit teilen, wodurch die Arbeitseffizienz verbessert wird. In diesem Artikel wird erläutert, wie mithilfe der Golang- und Websocket-Technologie Funktionen zur Online-Zeitplanverwaltung für mehrere Personen implementiert werden, und es werden spezifische Codebeispiele angehängt.
Erstellungsprojekt und Initialisierung:
Zuerst müssen wir ein leeres Golang-Projekt erstellen und es im Projektstammverzeichnis ablegen Initialisieren Sie ein neues Go-Modul mit dem folgenden Befehl:
go mod init schedule
Dann müssen wir die erforderlichen Abhängigkeiten in das Projekt einführen:
go get -u github.com/gin-gonic/gin go get -u github.com/gorilla/websocket
main.go
und fügen Sie den folgenden Code in die Datei ein: main.go
的文件,并在文件中添加以下代码: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") }
上述代码中,我们使用了Gin框架创建了一个简单的HTTP服务器,并在/ws
路径上注册了一个Websocket路由。在路由处理函数中,我们将Upgrade HTTP连接升级为Websocket连接,并获取到与客户端建立的连接。
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() } } } })
上面的代码中,我们使用一个映射表connections
来存储所有连接。当有新的连接建立时,我们将该连接添加到映射表中。同时,我们通过一个无限循环来读取来自客户端的消息,并将该消息广播给所有连接。
index.html
<!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>
/ws
. In der Routing-Verarbeitungsfunktion aktualisieren wir die Upgrade-HTTP-Verbindung auf eine Websocket-Verbindung und erhalten die mit dem Client hergestellte Verbindung.
In unserem Websocket-Server müssen wir Verbindungsverarbeitungs- und Nachrichtenübertragungsfunktionen implementieren. Fügen Sie den folgenden Code in der Routenverarbeitungsfunktion hinzu:
Im obigen Code verwenden wir eine Zuordnungstabelle connections
, um alle Verbindungen zu speichern. Wenn eine neue Verbindung hergestellt wird, fügen wir die Verbindung zur Zuordnungstabelle hinzu. Gleichzeitig lesen wir die Nachricht vom Client in einer Endlosschleife und senden sie an alle Verbindungen.
index.html
und fügen Sie den folgenden Code in die Datei ein: Das obige ist der detaillierte Inhalt vongolang Websocket-Entwicklungshandbuch: Implementierung der Online-Zeitplanverwaltungsfunktion für mehrere Personen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!