Go语言实现websocket服务器
websocket应用场景:
1、即时通信。比如QQ,微信这些。
2、站内消息推送,比如打开qq时会提示xx用户已上线之类在app或者网站内部的消息。
3、实时数据获取。比如地理位置,用户是否在线等需要实时获取的消息。
4、解决http长轮询消耗服务器资源问题。
示例代码:
package main import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "net/http" ) //设置websocket //CheckOrigin防止跨站点的请求伪造 var upGrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } //websocket实现 func ping(c *gin.Context) { //升级get请求为webSocket协议 ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) if err != nil { return } defer ws.Close() //返回前关闭 for { //读取ws中的数据 mt, message, err := ws.ReadMessage() if err != nil { break } //写入ws数据 err = ws.WriteMessage(mt, message) if err != nil { break } } } func main() { r := gin.Default() r.GET("/ping", ping) r.Run(":12345") }
测试:
websocket请求地址:ws://localhost:12345/ping