Go WebSocket hello world範例。
本篇在Go程式利用gorilla/websocket
套件做一個簡單的WebSocket server。
範例環境:
- Go 1.19
- github.com/gorilla/websocket v1.5.0
安裝Websocket
在Go專案根目錄以命令列執行go get github.com/gorilla/websocket
安裝gorilla/websocket
。
~/../go-demo % go get github.com/gorilla/websocket
go: added github.com/gorilla/websocket v1.5.0
範例
取得websocket.Upgrader
物件並設定屬性CheckOrigin
函式回傳結果為true來允許CORS請求。
呼叫http.HandlerFunc
設定一個接收請求的路徑/echo
及處理請求的echoHandler
。
呼叫http.ListenAndServe
啟動WebSocket伺服器,port為8080。
在echoHandler
呼叫websocket.Upgrader.Upgrade
方法取得WebSocket連線物件websocket.Conn
。
在一個for無窮迴圈中呼叫Conn.ReadMessage
持續讀取client送來的訊息。
第一個回傳參數為message type,通常是TextMessage = 1
或BinaryMessage = 2
;
第二個回傳參數為message的byte陣列。
收到訊息console印出訊息後,呼叫Conn.WriteMessage
把收來的訊息寫出給client。
main.go
package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true // allow CORS request's Origin header
},
}
func main() {
http.HandleFunc("/echo", echoHandler)
http.ListenAndServe(":8080", nil)
}
func echoHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil) // get a websocket connection
if err != nil {
panic(err)
}
defer conn.Close()
for {
mt, message, err := conn.ReadMessage() // read messages from client
if err != nil {
panic(err)
}
fmt.Printf("receive: %s\n", message)
err = conn.WriteMessage(mt, message) // write messages to client
if err != nil {
panic(err)
}
}
}
測試
啟動Go專案。
在Chrome瀏覽器安裝Simple WebSocket Client並打開。
在[Server Location]的[URL]欄位輸入ws://localhost:8080/echo
為接收請求的資源路徑。
在[Resquest]欄位輸入"hello world"然後點選Send。
Server的console會印出"receive: hello world"。
WebSocket Client的[MessageLog]印出從server回傳的"hello world"。
沒有留言:
張貼留言