Heim > Artikel > Backend-Entwicklung > Golang Websocket-Tutorial: So entwickeln Sie die Online-Übermittlungsfunktion
Golang Websocket-Tutorial: So entwickeln Sie eine Online-Übermittlungsfunktion
Einführung:
Mit der rasanten Entwicklung des Internets müssen immer mehr Anwendungen Echtzeit-Kommunikationsfunktionen implementieren. In Netzwerkanwendungen hat sich die Websocket-Technologie zu einem häufig verwendeten Kommunikationsprotokoll entwickelt. Ziel dieses Artikels ist es, den Lesern beizubringen, wie sie mithilfe der Golang-Sprache eine Online-Übermittlungsfunktion entwickeln und mit Websocket eine Echtzeitinteraktion erreichen können.
1. Einführung in Websocket
Websocket ist ein Vollduplex-Kommunikationsprotokoll, das eine dauerhafte Verbindung zwischen dem Browser und dem Server herstellen kann, um eine Echtzeitkommunikation zu erreichen. Im Vergleich zum herkömmlichen HTTP-Protokoll weist Websocket eine geringere Latenz und einen höheren Durchsatz auf und eignet sich für Anwendungsszenarien, die Echtzeitdaten verarbeiten.
2. Einrichtung der Entwicklungsumgebung
Bevor Sie mit der Entwicklung beginnen, müssen Sie die Golang-Entwicklungsumgebung einrichten.
Installieren Sie verwandte Bibliotheken:
go get github.com/gorilla/websocket
3. Projektstrukturdesign
Bevor Sie die Online-Einreichungsfunktion entwickeln, müssen Sie die Verzeichnisstruktur des Projekts planen.
- main.go - handler.go - template - index.html
4. Code-Implementierung
main.go
package main import ( "html/template" "log" "net/http" "github.com/gorilla/websocket" ) var ( upgrader = websocket.Upgrader{} clients = make(map[*websocket.Conn]bool) broadcast = make(chan []byte) homeTemplate *template.Template ) func homeHandler(w http.ResponseWriter, r *http.Request) { homeTemplate.Execute(w, nil) } func websocketHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() clients[conn] = true for { _, msg, err := conn.ReadMessage() if err != nil { log.Println(err) delete(clients, conn) return } broadcast <- msg } } func handleMessages() { for { msg := <-broadcast for client := range clients { err := client.WriteMessage(websocket.TextMessage, msg) if err != nil { log.Println(err) client.Close() delete(clients, client) } } } } func main() { // 配置文件路径 homeTemplate = template.Must(template.ParseFiles("template/index.html")) http.HandleFunc("/", homeHandler) http.HandleFunc("/ws", websocketHandler) go handleMessages() err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } }
handler.go
package main import ( "net/http" "path/filepath" ) func homeHandler(w http.ResponseWriter, r *http.Request) { filePath, _ := filepath.Abs("template/index.html") http.ServeFile(w, r, filePath) }
template/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>在线投稿功能</title> </head> <body> <h1>在线投稿功能</h1> <textarea id="message-input" rows="5" cols="30"></textarea> <button id="send-btn">发送</button> <br> <ul id="message-list"></ul> </body> <script> var socket = new WebSocket("ws://localhost:8080/ws"); socket.onmessage = function (event) { var messageList = document.getElementById("message-list"); var messageItem = document.createElement("li"); messageItem.innerText = event.data; messageList.appendChild(messageItem); }; document.getElementById("send-btn").addEventListener("click", function () { var messageInput = document.getElementById("message-input"); var message = messageInput.value; socket.send(message); }); </script> </html>
Durch die oben genannten Schritte haben wir die Entwicklung einer Online-Einreichungsfunktion auf Basis von Golang abgeschlossen. Die Nachrichtenübermittlung in Echtzeit erfolgt über Websocket. Nachdem der Benutzer die Nachricht in das Textfeld eingegeben und auf die Schaltfläche „Senden“ geklickt hat, kann die Nachricht an den Server gesendet und sofort auf der Seite angezeigt werden.
Das obige ist der detaillierte Inhalt vonGolang Websocket-Tutorial: So entwickeln Sie die Online-Übermittlungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!