go语言使用gorilla/websocket实现websocket
更新时间:2025年04月30日 09:01:30 作者:考虑考虑
Gorilla WebSocket 是一个用于 Go 语言的 WebSocket 协议实现,而且是一个优秀的组件库,能快速实现websocket协议,下面就跟随小编一起来看看它的具体使用吧
前言
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 应用程序
到此这篇关于go语言使用gorilla/websocket实现websocket的文章就介绍到这了,更多相关go websocket内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Golang使用archive/zip包实现ZIP压缩与解压
Golang 中的 archive/zip 包用于处理 ZIP 格式的压缩文件,提供了一系列用于创建、读取和解压缩 ZIP 格式文件的函数和类型,使用起来非常方便,下面就跟随小编一起了解一下具体使用方法吧2023-08-08
最新评论