go語言使用gorilla/websocket實現(xiàn)websocket
前言
Gorilla WebSocket 是一個用于 Go 語言的 WebSocket 協(xié)議實現(xiàn),而且是一個優(yōu)秀的組件庫,能快速實現(xiàn)websocket協(xié)議
websocket實現(xiàn)
依賴安裝
使用以下依賴安裝對應的庫
go get github.com/gorilla/websocket
程序實現(xiàn)
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 用于升級協(xié)議
func ServerHTTP(w http.ResponseWriter, r *http.Request) {
// 收到http請求之后升級協(xié)議
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)
// 開啟關閉連接監(jiān)聽
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)
// 創(chuàng)建HTTP服務器
http.HandleFunc("/ws", ServerHTTP)
log.Println("Server started on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
啟動之后

使用postman連接服務端

發(fā)送消息

總結
Gorilla WebSocket 提供了一個完整且經(jīng)過測試的 WebSocket 協(xié)議實現(xiàn),適用于構建高效的 WebSocket 應用程序
到此這篇關于go語言使用gorilla/websocket實現(xiàn)websocket的文章就介紹到這了,更多相關go websocket內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓
Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來非常方便,下面就跟隨小編一起了解一下具體使用方法吧2023-08-08

