Heim > Backend-Entwicklung > Golang > golang Websocket-Entwicklungshandbuch: Implementierung der Online-Zeitplanverwaltungsfunktion für mehrere Personen

golang Websocket-Entwicklungshandbuch: Implementierung der Online-Zeitplanverwaltungsfunktion für mehrere Personen

WBOY
Freigeben: 2023-12-02 09:09:26
Original
697 Leute haben es durchsucht

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

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.

  1. Umgebung und Abhängigkeiten:
  2. Golang 1.13 oder höher
  3. Gin Web Framework
  4. Gorilla Websocket-Bibliothek
  5. 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
    Nach dem Login kopieren

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
Nach dem Login kopieren
  1. Erstellen Sie einen Websocket-Server:
    Als nächstes erstellen wir einen Websocket-Server für die Implementierung von Multi -Personen-Online-Terminplanverwaltungsfunktion. Erstellen Sie im Stammverzeichnis des Projekts eine Datei mit dem Namen 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")
}
Nach dem Login kopieren

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

  1. 处理连接和消息:
    在我们的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()
            }
        }
    }
})
Nach dem Login kopieren

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

  1. 前端实现:
    最后,我们需要在前端实现一个简单的界面来测试我们的多人在线日程管理功能。在项目的根目录下,创建一个名为index.html
  2. <!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>
    Nach dem Login kopieren
Im obigen Code haben wir das Gin-Framework verwendet, um ein einfaches HTTP zu erstellen Server und registrierte eine Websocket-Route im Pfad /ws. In der Routing-Verarbeitungsfunktion aktualisieren wir die Upgrade-HTTP-Verbindung auf eine Websocket-Verbindung und erhalten die mit dem Client hergestellte Verbindung.

    Verbindungen und Nachrichten verarbeiten:

    In unserem Websocket-Server müssen wir Verbindungsverarbeitungs- und Nachrichtenübertragungsfunktionen implementieren. Fügen Sie den folgenden Code in der Routenverarbeitungsfunktion hinzu:

    rrreee

    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.

      Frontend-Implementierung:
    • Schließlich müssen wir eine einfache Schnittstelle im Frontend implementieren, um unsere Online-Terminverwaltungsfunktion für mehrere Personen zu testen. Erstellen Sie im Stammverzeichnis des Projekts eine Datei mit dem Namen index.html und fügen Sie den folgenden Code in die Datei ein:
    • rrreee
    • Im obigen Code verwenden wir das WebSocket-Objekt von JavaScript, um mit dem Server zu kommunizieren Stellen Sie eine Verbindung her und warten Sie auf Benutzereingaben und Servernachrichten. Wenn der Benutzer auf die Schaltfläche „Senden“ klickt, senden wir die eingegebene Nachricht an den Server. Wenn eine Nachricht vom Server empfangen wird, fügen wir gleichzeitig die Nachricht zur Nachrichtenliste auf der Schnittstelle hinzu.
    🎜Zusammenfassung:🎜In diesem Artikel wird erläutert, wie Sie mithilfe der Golang- und Websocket-Technologie Funktionen zur Online-Terminverwaltung für mehrere Personen implementieren. Wir haben zunächst einen Websocket-Server erstellt und die Verbindungsverarbeitungs- und Nachrichtenübertragungsfunktionen implementiert. Anschließend haben wir eine einfache Schnittstelle im Frontend implementiert, um unsere Funktionalität zu testen. Ich hoffe, dass die Leser durch diesen Artikel die Methoden und Techniken zur Verwendung von Golang und Websocket zum Erreichen ähnlicher Funktionen verstehen und beherrschen können. 🎜🎜Referenzlinks:🎜🎜🎜Gin-Framework: https://github.com/gin-gonic/gin🎜🎜Gorilla Websocket-Bibliothek: https://github.com/gorilla/websocket🎜🎜

    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!

    Verwandte Etiketten:
    Quelle:php.cn
    Erklärung dieser Website
    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
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage