项目中需要用到WebSocket,自己结合wikimedia/WebSocket学习一些基础知识,记录下来,方便复习。
browser
和web server
之间通信,现在可用于任意实现websocket协议的client和serverecho服务器是websocket的典型应用,这里根据gorilla/websocket里面的例子搭建一个echo服务器,具体代码在Github/adolphlwq/wsecho,demo地址:https://echo.ws.adolphlwq.xyz/
echo代码:
package mainimport ( "net/http" "github.com/Sirupsen/logrus"
"github.com/gorilla/websocket")var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true
},
}func echo(w http.ResponseWriter, r *http.Request) {
ws, err := upgrader.Upgrade(w, r, nil) if err != nil {
logrus.Println("upgrade connection to websocket error: ", err) return
} defer ws.Close() for {
mt, message, err := ws.ReadMessage() if err != nil {
logrus.Println("read message from websocket error: ", err) break
} err = ws.WriteMessage(mt, message) if err != nil {
logrus.Warnln("write message to websocket error: ", err) break
}
}
}
这里有个注意的地方,在使用websocket.Upgrader
时,要指定CheckOrigin函数,否则后端server会报403错误。
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true
},
}