Dalam pembangunan web moden, komunikasi masa nyata menjadi semakin penting. WebSocket menonjol sebagai teknologi yang sesuai untuk melaksanakan komunikasi dua hala antara pelanggan dan pelayan. Panduan ini akan memandu anda melaksanakan komunikasi WebSocket dan mekanisme degupan jantung yang mantap menggunakan GoFrame.
Mari kita mulakan dengan mencipta pelayan WebSocket asas:
package main import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gctx" ) func main() { ctx := gctx.New() s := g.Server() s.BindHandler("/ws", func(r *ghttp.Request) { ws, err := r.WebSocket() if err != nil { g.Log().Error(ctx, err) return } defer ws.Close() for { msgType, msg, err := ws.ReadMessage() if err != nil { return } if err = ws.WriteMessage(msgType, msg); err != nil { return } } }) s.SetPort(8399) s.Run() }
Ini mencipta pelayan gema ringkas yang mendengar pada port 8399 dan menggemakan semula sebarang mesej yang diterima.
Berikut ialah pelaksanaan asas klien HTML/JavaScript:
<!DOCTYPE html> <html> <head> <title>WebSocket Client</title> </head> <body> <script> const socket = new WebSocket('ws://localhost:8399/ws'); socket.onopen = function(e) { console.log('Connection established'); socket.send('Hello, server!'); }; socket.onmessage = function(event) { console.log('Message received:', event.data); }; socket.onclose = function(event) { console.log('Connection closed'); }; </script> </body> </html>
Dalam persekitaran pengeluaran, anda perlu mengendalikan berbilang sambungan dengan cekap. Begini caranya untuk melaksanakan kumpulan sambungan:
import "github.com/gogf/gf/v2/os/gmlock" var ( connPool = make(map[string]*ghttp.WebSocket) mu = gmlock.New() ) func addConn(id string, ws *ghttp.WebSocket) { mu.Lock() connPool[id] = ws mu.Unlock() } func removeConn(id string) { mu.Lock() delete(connPool, id) mu.Unlock() } func broadcastMessage(ctx context.Context, id string, message []byte) { mu.RLock(id) defer mu.RUnlock(id) for _, ws := range connPool { go func(ws *ghttp.WebSocket) { if err := ws.WriteMessage(websocket.TextMessage, message); err != nil { g.Log().Error(ctx, err) } }(ws) } }
Berikut ialah pelaksanaan degupan jantung sedia pengeluaran:
package main import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gctx" ) func main() { ctx := gctx.New() s := g.Server() s.BindHandler("/ws", func(r *ghttp.Request) { ws, err := r.WebSocket() if err != nil { g.Log().Error(ctx, err) return } defer ws.Close() for { msgType, msg, err := ws.ReadMessage() if err != nil { return } if err = ws.WriteMessage(msgType, msg); err != nil { return } } }) s.SetPort(8399) s.Run() }
<!DOCTYPE html> <html> <head> <title>WebSocket Client</title> </head> <body> <script> const socket = new WebSocket('ws://localhost:8399/ws'); socket.onopen = function(e) { console.log('Connection established'); socket.send('Hello, server!'); }; socket.onmessage = function(event) { console.log('Message received:', event.data); }; socket.onclose = function(event) { console.log('Connection closed'); }; </script> </body> </html>
Dengan sokongan WebSocket GoFrame, anda boleh melaksanakan komunikasi masa nyata yang mantap dengan mudah dalam aplikasi anda. Gabungan pengendalian sambungan yang betul, mekanisme degupan jantung dan pengurusan sambungan serentak memastikan pelaksanaan WebSocket yang boleh dipercayai dan berskala.
Ingat kepada:
Kini anda mempunyai asas yang kukuh untuk melaksanakan komunikasi WebSocket dalam aplikasi GoFrame anda. Selamat mengekod! ?
Atas ialah kandungan terperinci Melaksanakan Komunikasi WebSocket dan Mekanisme Denyutan Jantung dengan GoFrame: Panduan Praktis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!