go語言使用gorilla/websocket實現(xiàn)websocket
前言
Gorilla WebSocket 是一個用于 Go 語言的 WebSocket 協(xié)議實現(xiàn),而且是一個優(yōu)秀的組件庫,能快速實現(xiàn)websocket
協(xié)議
websocket實現(xiàn)
依賴安裝
使用以下依賴安裝對應(yīng)的庫
go get github.com/gorilla/websocket
程序?qū)崿F(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 { // 服務(wù)端讀取客戶端請求 messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Error during message reading:", err) break } log.Printf("Received:%s", message) // 開啟關(guān)閉連接監(jiān)聽 conn.SetCloseHandler(func(code int, text string) error { fmt.Println(code, text) // 斷開連接時將打印code和text return nil }) //服務(wù)端給客戶端返回請求 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服務(wù)器 http.HandleFunc("/ws", ServerHTTP) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
啟動之后
使用postman
連接服務(wù)端
發(fā)送消息
總結(jié)
Gorilla WebSocket 提供了一個完整且經(jīng)過測試的 WebSocket 協(xié)議實現(xiàn),適用于構(gòu)建高效的 WebSocket 應(yīng)用程序
到此這篇關(guān)于go語言使用gorilla/websocket實現(xiàn)websocket的文章就介紹到這了,更多相關(guān)go websocket內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go語言切片slice使用細(xì)節(jié)和注意事項整理大全
這篇文章主要給大家介紹了關(guān)于go語言切片slice使用細(xì)節(jié)和注意事項整理的相關(guān)資料,需要的朋友可以參考下2024-05-05簡單聊聊Go語言中空結(jié)構(gòu)體和空字符串的特殊之處
在日常的編程過程中,大家應(yīng)該經(jīng)常能遇到各種”空“吧,比如空指針、空結(jié)構(gòu)體、空字符串等,本文就以?Go?語言為例,一起來看看空結(jié)構(gòu)體和空字符串在?Go?語言中的特殊之處吧2024-03-03Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓
Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來非常方便,下面就跟隨小編一起了解一下具體使用方法吧2023-08-08