Heim  >  Artikel  >  Backend-Entwicklung  >  Golang WebSocket-Beispiel: Erstellen einer einfachen Chat-Anwendung

Golang WebSocket-Beispiel: Erstellen einer einfachen Chat-Anwendung

WBOY
WBOYOriginal
2023-12-18 08:13:311125Durchsuche

golang WebSocket示例:构建一个简单的聊天应用

Golang WebSocket-Beispiel: Erstellen einer einfachen Chat-Anwendung

Mit der Entwicklung des Internets hat die Echtzeitkommunikation immer mehr Aufmerksamkeit auf sich gezogen. Als Echtzeit-Kommunikationsprotokoll kann WebSocket eine dauerhafte Verbindung zwischen dem Client und dem Server herstellen und so eine bidirektionale Echtzeit-Datenübertragung ermöglichen. In diesem Artikel wird erläutert, wie Sie mit Golang eine einfache Chat-Anwendung zum Senden und Empfangen von Echtzeitnachrichten über WebSocket erstellen.

Bevor Sie beginnen, stellen Sie sicher, dass Sie die Golang-Entwicklungsumgebung korrekt auf Ihrem Computer installiert haben.

Zuerst müssen wir das Paket „Gorilla Websocket“ importieren, eine häufig verwendete WebSocket-Bibliothek in Golang. Installieren Sie mit dem folgenden Befehl im Terminal:

go get github.com/gorilla/websocket

Als nächstes erstellen wir eine main.go-Datei und importieren die erforderlichen Pakete:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

In der Hauptfunktion definieren wir eine WebSocket-Handler-Funktion zur Verarbeitung der WebSocket-Verbindungsanfrage:

func wsHandler(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为WebSocket连接
    conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
    if err != nil {
        log.Println(err)
        return
    }

    // 处理WebSocket连接
    for {
        // 读取客户端发送的消息
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            break
        }

        // 将消息发送给所有连接的客户端
        for client := range clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(clients, client)
            }
        }
    }

    // 关闭WebSocket连接
    conn.Close()
}

Im obigen Code aktualisieren wir zunächst die HTTP-Verbindung auf eine WebSocket-Verbindung und verwenden dann eine for-Schleife, um kontinuierlich vom Client gesendete Nachrichten zu empfangen und diese Nachrichten an alle verbundenen Clients zu senden. Wenn ein Fehler auftritt oder der Client die Verbindung trennt, schließen wir die entsprechende Verbindung.

Als nächstes müssen wir eine globale Variable „Clients“ definieren, um alle verbundenen Clients zu speichern:

var clients = make(map[*websocket.Conn]bool)

Dann ändern wir den Code in der Hauptfunktion, verknüpfen die WebSocket-Prozessorfunktion mit dem Pfad „/ws“ und starten einen HTTP-Server :

func main() {
    http.HandleFunc("/ws", wsHandler)

    err := http.ListenAndServe(":8000", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Endlich können wir einen Browser oder ein WebSocket-Client-Tool verwenden, um unsere Chat-Anwendung zu testen. Geben Sie „http://localhost:8000“ in den Browser ein, öffnen Sie die Konsole und führen Sie den folgenden JavaScript-Code aus:

var ws = new WebSocket("ws://localhost:8000/ws");

// 连接建立时触发的事件
ws.onopen = function() {
    console.log("连接成功");
};

// 收到消息时触发的事件
ws.onmessage = function(evt) {
    console.log("收到消息:" + evt.data);
};

// 发送消息
ws.send("Hello, World!");

Über den obigen Code erhalten wir die Nachricht „Hello, World!“ vom Server und geben sie aus in der Konsole.

Zu diesem Zeitpunkt haben wir erfolgreich eine einfache Chat-Anwendung erstellt, die Golang und WebSocket zum Senden und Empfangen von Echtzeitnachrichten verwendet. Dies ist natürlich nur ein einfaches Beispiel und Sie können es entsprechend Ihren Anforderungen erweitern und optimieren. Ich hoffe, dieser Artikel ist hilfreich für Sie und wünsche Ihnen mehr Erfolg bei der Entwicklung von Echtzeit-Kommunikationsanwendungen mit Golang und WebSocket!

Das obige ist der detaillierte Inhalt vonGolang WebSocket-Beispiel: Erstellen einer einfachen Chat-Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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