Tutorial Soket Web Golang: Cara membangunkan fungsi penghantaran dalam talian
Pengenalan:
Dengan perkembangan pesat Internet, semakin banyak aplikasi perlu melaksanakan fungsi komunikasi masa nyata. Dalam aplikasi rangkaian, teknologi Websocket telah menjadi protokol komunikasi yang biasa digunakan. Artikel ini bertujuan untuk mengajar pembaca cara menggunakan bahasa Golang untuk membangunkan fungsi penyerahan dalam talian dan menggunakan Websocket untuk mencapai interaksi masa nyata.
1. Pengenalan kepada Websocket
Websocket ialah protokol komunikasi dupleks penuh yang boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan untuk mencapai komunikasi masa nyata. Berbanding dengan protokol HTTP tradisional, Websocket mempunyai kependaman yang lebih rendah dan daya pemprosesan yang lebih tinggi, dan sesuai untuk senario aplikasi yang memproses data masa nyata.
2. Persediaan persekitaran pembangunan
Sebelum memulakan pembangunan, anda perlu menyediakan persekitaran pembangunan Golang.
Pasang perpustakaan berkaitan:
go get github.com/gorilla/websocket
3. Reka bentuk struktur projek
Sebelum membangunkan fungsi penyerahan dalam talian, anda perlu merancang struktur direktori projek.
- main.go - handler.go - template - index.html
4. Pelaksanaan kod
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) } }
pengendali.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>
go run main.go
6. Rumusan
Melalui langkah di atas, kami telah menyelesaikan pembangunan fungsi penyerahan dalam talian berdasarkan Golang. Penghantaran mesej masa nyata direalisasikan melalui Websocket Selepas pengguna memasukkan mesej dalam kotak teks dan mengklik butang hantar, mesej itu boleh dihantar ke pelayan dan dipaparkan pada halaman serta-merta.Atas ialah kandungan terperinci Tutorial golang Websocket: bagaimana untuk membangunkan fungsi penyerahan dalam talian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!