文章目录
- 引言
- 进入正题
- 1、依赖
- 2、升级客户端
- 3、websocket处理方法
- 4、完整代码
引言
实时性较高的地方,我们可能会使用到websocket对信息进行实时推送,涉及到websocket就会有开启连接,接收消息,推送消息,错误处理等机制,那么现在我们就使用go语言来实现一个消息的实时推送与接收
进入正题
1、依赖
除去正常的go的sdk依赖我们需要另一个依赖
"github.com/gorilla/websocket"
2、升级客户端
我们使用的websocket都是从http升级上去的,所以直接贴上代码
var upgrader = websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {// 这里设置拦截或者其他东西,返回true则升级,返回false直接拦截,不升级return true},
}
3、websocket处理方法
func wsHandle(w http.ResponseWriter, r *http.Request) {// 升级为wsconn, err := upgrader.Upgrade(w, r, nil)if err != nil {fmt.Println(err)return}defer conn.Close()fmt.Print("连接建立成功")for {// 读取客户端消息messageType, p, err := conn.ReadMessage()if err != nil {fmt.Println(err)return}// 处理消息// 回复或者发送err = conn.WriteMessage(messageType, p)if err != nil {fmt.Println(err)return}}
}
4、完整代码
package mainimport ("fmt""github.com/gorilla/websocket""net/http"
)var upgrader = websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {// 允许所有来源的WebSocket连接return true},
}func main() {http.HandleFunc("/ws", wsHandle)err := http.ListenAndServe(":9009", nil)if err != nil {fmt.Println(err)}
}func wsHandle(w http.ResponseWriter, r *http.Request) {// 升级为wsconn, err := upgrader.Upgrade(w, r, nil)if err != nil {fmt.Println(err)return}defer conn.Close()fmt.Print("连接建立成功")for {// 读取客户端消息messageType, p, err := conn.ReadMessage()if err != nil {fmt.Println(err)return}// 处理消息fmt.Printf(string(p))// 发送消息给客户端err = conn.WriteMessage(messageType, p)if err != nil {fmt.Println(err)return}}
}