赞
踩
websocket应用场景:
1、即时通信。比如QQ,微信这些。
2、站内消息推送,比如打开qq时会提示xx用户已上线之类在app或者网站内部的消息。
3、实时数据获取。比如地理位置,用户是否在线等需要实时获取的消息。
4、解决http长轮询消耗服务器资源问题。
需要使用的框架:
1、gin框架:gin-gonic/gin
2、websocket框架:gorilla/websocket
3、api文档:
https://godoc.org/github.com/gin-gonic/gin
https://godoc.org/github.com/gorilla/websocket#Conn.ReadJSON
示例代码:
- 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
实际应用中的分析:
上面的例子只是实现了最基本的websocket功能,客户端发送消息,服务端接收到以后就按原样返回(json数据会作BASE64加密)。但在实际的项目中,需要处理的逻辑远比这个复杂。而且数据在传输过程中没有加密,因此在实际应用中,使用json加密后传输。客户端或服务端接收到的只是一串字符串,内部解密后再进行相应的业务逻辑处理。如果业务逻辑复杂,可以配合channel,redis,mysql等一起使用。
参考文章:
gin 框架中结合 gorilla 实现 webSocket - 链滴ld246.com赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。