Skip to content

Latest commit

 

History

History

xwebsocket

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

cs websocket

Websocket 的适配器实现

数据协议

在使用 weboscket 客户端发送数据的时候,遵循以下数据协议

请求json

{
  "cmd":"register",
  "seqno":"unique_string",
  "data": {}
}
  • cmd 表示命令名,对应 cs 的路由
  • seqno 表示该请求的唯一标识,在响应中会原样返回
  • data 表示请求数据,可以是任意值,如 string, number, object, array, null

响应

{
  "cmd":"register",
  "seqno":"unique_string",
  "code": 0,
  "msg":"ok",
  "data": {}
}
  • cmd 表示命令名,对应请求的 cmd
  • seqno 表示该请求的唯一标识,对应请求的 seqno
  • code 响应状态码,不等于 0 表示异常, -1 表示不支持请求的cmd,其他业务码根据业务适应
  • msg 响应说明,只在code不等于 0 时才有意义
  • data 表示响应数据,可能是任意值,如 string, number, object, array, null

这是该实现的数据协议,如果想要自己定制协议,可参考该实现重新自己定义实现

使用示例

  1. 实例化完成后挂载到路由中
  2. 生成 cs 实例
import (
  "net/http"
  "github.com/eyasliu/cs/xwebsocket"
)

func main() {
  ws := xwebsocket.New()
  http.Handler("/ws", ws.Handler) // 挂载到路由中
  srv := ws.Srv()
  go srv.Run()

  log.Fatal(http.ListenAndServe(":8080", nil))
}

实例化的 WS 实现了 net/http 标准库的 http.Handler 接口,ws.Handler 实现了 http.HandlerFunc,所以可以方便的用在其他 web 框架中,如

GoFrame

package main
import (
  "github.com/gogf/gf/frame/g"
  "github.com/gogf/gf/net/ghttp"
  "github.com/eyasliu/cs/xwebsocket"
)

func main() {
  ws := xwebsocket.New()
  srv := ws.Srv()
  s := g.Server()
  s.BindHandler("/ws", ghttp.WrapH(ws))
  s.BindHandler("/ws2", ghttp.WrapF(ws.Handler))
  go srv.Run()

  s.Run()
}

Gin

package main
import (
  "github.com/gin-gonic/gin"
  "github.com/eyasliu/cs/xwebsocket"
)

func main() {
  ws := xwebsocket.New()
  srv := ws.Srv()
  r := gin.Default()
  r.GET("/ws", gin.WrapH(ws))
  r.GET("/ws2", gin.WrapF(ws.Handler))
  go srv.Run()

  r.APIRun(":8100")
}

Echo

package main
import (
  "github.com/labstack/echo/v4"
  "github.com/eyasliu/cs/xwebsocket"
)

func main() {
  ws := xwebsocket.New()
  srv := ws.Srv()
  e := echo.New()
  e.GET("/ws", func(c *echo.Context) {
    ws.Handler(c.Response(), c.Request())
  })
  go srv.Run()

  e.Star(":8100")
}