package main import ( "time" // "encoding/json" // "strings" "fmt" "github.com/astaxie/beego/logs" "golang.org/x/net/websocket" ) //websocket type wsSubscribeCmd struct { ID string `json:"id"` //井名 User string `json:user` Lang string `json:"lang"` } type wsMsg struct { ID string `json:"id"` Type int `json:"type"` //0 真实数据 1 是心跳 Msg []GetHisWellRespdata `json:"msg"` } func init() { /*go func() { t := time.NewTicker(time.Second * 5) for { select { case <-t.C: ioCh <- "hello" + time.Now().String() } } }()*/ } //HandleSubscribe subscribe handler func HandleSubscribe(ws *websocket.Conn) { defer ws.Close() var cmd wsSubscribeCmd var err error err = websocket.JSON.Receive(ws, &cmd) if err != nil { logs.Error("websocket.JSON.Receive failed %v", err) return } logs.Info("receive cmd :", cmd) var ioCh = make(chan []GetHisWellRespdata, 1000) var exitCh = make(chan struct{}, 1) go wsGetWellRealTimeData(cmd.Lang, cmd.ID, cmd.User, ioCh, exitCh) t := time.NewTicker(time.Second * 5) for { var msg wsMsg select { case v, ok := <-ioCh: if !ok { logs.Info("msg chan err!") goto exit_l } //fmt.Println(v) msg = wsMsg{Msg: v} case <-t.C: msg = wsMsg{Type: 1} /*case <-exitCh: goto exit_l*/ } err := websocket.JSON.Send(ws, msg) if err != nil { logs.Info(fmt.Sprintf("ws send failed!%v!Msg is:%v", err, msg.Msg)) goto exit_l } } exit_l: close(exitCh) }