前言
Gorilla WebSocket 是一个用于 Go 语言的 WebSocket 协议实现,而且是一个优秀的组件库,能快速实现websocket
协议
websocket实现
依赖安装
使用以下依赖安装对应的库
arduino
go get github.com/gorilla/websocket
程序实现
go
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 应用程序