前言
Gorilla WebSocket 是一个用于 Go 语言的 WebSocket 协议实现,而且是一个优秀的组件库,能快速实现websocket
协议
websocket实现
依赖安装
使用以下依赖安装对应的库
go get github.com/gorilla/websocket
程序实现
package main import ( "fmt" "github.com/gorilla/websocket" "log" "net/http" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 4196, WriteBufferSize: 1124, CheckOrigin: func(r *http.Request) bool { //if r.Method != "GET" { // fmt.Println("method is not GET") // return false //} //if r.URL.Path != "/ws" { // fmt.Println("path error") // return false //} return true }, } var m map[string]*websocket.Conn // ServerHTTP 用于升级协议 func ServerHTTP(w http.ResponseWriter, r *http.Request) { // 收到http请求之后升级协议 conn1, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Error during connection upgrade:", err) return } userId := r.FormValue("userId") log.Println("userId:" + userId) defer conn1.Close() m[userId] = conn1 conn := m[userId] for { // 服务端读取客户端请求 messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Error during message reading:", err) break } log.Printf("Received:%s", message) // 开启关闭连接监听 conn.SetCloseHandler(func(code int, text string) error { fmt.Println(code, text) // 断开连接时将打印code和text return nil }) //服务端给客户端返回请求 err = conn.WriteMessage(messageType, message) conn.WriteMessage(websocket.TextMessage, []byte("aaa")) if err != nil { log.Println("Error during message writing:", err) return } } } func home(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Index Page") } func main() { //a, _ := strconv.Atoi("1") //fmt.Println(a) m = make(map[string]*websocket.Conn) // 创建HTTP服务器 http.HandleFunc("/ws", ServerHTTP) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
启动之后
使用
postman
连接服务端
发送消息
总结
Gorilla WebSocket 提供了一个完整且经过测试的 WebSocket 协议实现,适用于构建高效的 WebSocket 应用程序