Netzwerkprogrammierfunktionen in der Go-Sprache lernen und einen WebSocket-Server-Chatroom implementieren?

王林
Freigeben: 2023-07-30 18:43:54
Original
878 Leute haben es durchsucht

Lernen Sie Netzwerkprogrammierungsfunktionen in der Go-Sprache und implementieren Sie WebSocket-Server-Chatrooms

Einführung
Mit der rasanten Entwicklung des Internets sind Webanwendungen zu einem unverzichtbaren Bestandteil des Lebens der Menschen geworden. Die Erzielung einer Echtzeitkommunikation ist eine der wichtigen Komponenten von Webanwendungen. WebSocket ist ein Protokoll, das eine bidirektionale Kommunikation ermöglicht und eine dauerhafte Verbindung zwischen dem Browser und dem Server herstellen kann. In diesem Artikel wird erläutert, wie Sie die Netzwerkprogrammierfunktionen in der Go-Sprache verwenden und diese mit dem WebSocket-Protokoll kombinieren, um einen einfachen Chatroom-Server zu implementieren.

Vorbereitung
Bevor Sie mit dem Schreiben von Code beginnen, müssen Sie die Go-Sprachentwicklungsumgebung installieren und die grundlegende Syntax von Go verstehen. Darüber hinaus müssen wir auch eine Open-Source-WebSocket-Bibliothek verwenden, um die Verarbeitung des WebSocket-Protokolls zu vereinfachen. Die Bibliothek kann mit dem folgenden Befehl installiert werden:

go get github.com/gorilla/websocket
Nach dem Login kopieren

Code-Implementierung
Zuerst müssen wir die notwendigen Pakete importieren:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)
Nach dem Login kopieren

Als nächstes definieren wir den Upgrader für die WebSocket-Verbindung. Der Upgrader ist ein http.HandlerFunc, der die HTTP-Verbindung auf eine WebSocket-Verbindung aktualisiert:

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}
Nach dem Login kopieren

Dann definieren Sie eine Struktur zur Darstellung des Chatroom-Servers:

type ChatRoom struct {
    clients   map[*websocket.Conn]bool
    broadcast chan []byte
}

func newChatRoom() *ChatRoom {
    return &ChatRoom{
        clients:   make(map[*websocket.Conn]bool),
        broadcast: make(chan []byte),
    }
}
Nach dem Login kopieren

Als nächstes implementieren Sie die Methode des Chatroom-Servers. Die erste ist die handleWebSocket-Funktion, die für die Aktualisierung von WebSocket-Verbindungen und die Nachrichtenverarbeitung verwendet wird:

func (c *ChatRoom) handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    c.clients[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            delete(c.clients, conn)
            break
        }

        c.broadcast <- msg
    }

    defer conn.Close()
}
Nach dem Login kopieren

Dann implementieren Sie die BroadcastMessage-Funktion, die zum Senden von Nachrichten an alle verbundenen Clients verwendet wird:

func (c *ChatRoom) broadcastMessage() {
    for {
        msg := <-c.broadcast

        for client := range c.clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(c.clients, client)
            }
        }
    }
}
Nach dem Login kopieren

Zuletzt implementieren Sie die Hauptfunktion Funktion zum Starten des Chatroom-Servers:

func main() {
    room := newChatRoom()

    go room.broadcastMessage()

    http.HandleFunc("/ws", room.handleWebSocket)

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}
Nach dem Login kopieren

Run
Führen Sie den folgenden Befehl im Codeverzeichnis aus, um den Chatroom-Server zu starten:

go run main.go
Nach dem Login kopieren

Besuchen Sie dann http://localhost:8080 im Browser, öffnen Sie die Entwicklertools des Browsers und Wechseln Sie die Konsole. Gehen Sie zur Registerkarte WebSocket und verwenden Sie den folgenden JavaScript-Code, um eine Verbindung zum Server herzustellen:

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

socket.onopen = function(event) {
  console.log("Connected to the server");
};

socket.onmessage = function(event) {
  console.log("Received message: " + event.data);
};

socket.onclose = function(event) {
  console.log("Disconnected from the server");
};

socket.send("Hello, server!");
Nach dem Login kopieren

Jetzt können Sie eine bidirektionale Echtzeitkommunikation zwischen dem Browser und dem Server durchführen.

Zusammenfassung
Durch das Erlernen der Netzwerkprogrammierfunktionen in der Go-Sprache und die Kombination mit dem WebSocket-Protokoll haben wir einen einfachen Chatroom-Server implementiert. WebSocket kann eine dauerhafte Verbindung zwischen dem Browser und dem Server herstellen, um eine Echtzeitkommunikation zu erreichen. Mit Hilfe der Netzwerkprogrammierungsfunktionen von Golang können wir WebSocket-Verbindungen und die Nachrichtenübertragung problemlos verwalten. Ich hoffe, dieser Artikel kann Ihnen beim Erlernen der Netzwerkprogrammierung und WebSocket in der Go-Sprache helfen.

Das obige ist der detaillierte Inhalt vonNetzwerkprogrammierfunktionen in der Go-Sprache lernen und einen WebSocket-Server-Chatroom implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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