package main import ( "log" "net/http" "os" "os/signal" "syscall" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { return true // 生产环境应校验来源域名 }, } func wsHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) // 升级HTTP为WebSocket if err != nil { log.Println("升级失败:", err) return } defer conn.Close() for { messageType, p, err := conn.ReadMessage() // 接收消息 if err != nil { log.Println("读取失败:", err) break } log.Printf("收到: %s", p) // 处理消息(示例:原样返回) if err := conn.WriteMessage(messageType, p); err != nil { log.Println("写入失败:", err) break } } } func main() { http.HandleFunc("/ws", wsHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } // 处理关闭信号的函数 func handleShutdownSignals() { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) // 阻塞等待信号 sig := <-sigChan log.Printf("接收到信号: %v, 关闭所有浏览器...", sig) // 强制退出程序 os.Exit(0) }