go语言routine循环推送数据到websocket客户端出现的问题

请各位帮忙看下,我一个routine是请求新浪的股票行情的数据的,另外一个routine是开websocket服务同时推送到客户端的,但是这个好像有问题,客户端没办法收到数据,小弟初学go两天,求高手指教应该怎么处理感激不尽!!!


import (
    "io/ioutil"
    "log"
    "net/http"
    "github.com/googollee/go-socket.io"
    "fmt"
    "time"

)

func startServer(ch chan string) {
    server, err := socketio.NewServer(nil)
    if err != nil {
        log.Fatal(err)
    }
    server.On("connection", func(so socketio.Socket) {
        log.Println("on connection")
        so.Join("chat")
        so.On("disconnection", func() {
            log.Println("on disconnect")
        })
        for{
                data := <-ch
                so.BroadcastTo("chat","Broadcast",data)
            }
    })
    server.On("error", func(so socketio.Socket, err error) {
        log.Println("error:", err)
    })

    http.Handle("/socket.io/", server)
    log.Println("服务已启动并且使用 localhost:5000...")
    log.Fatal(http.ListenAndServe("0.0.0.0:5000", nil))
}

func main() {
    ch := make(chan string)
    go stockapi(ch)
    startServer(ch)

}

func stockapi(ch chan string)  {
    var code string
    code = "sz000001"
    //resp, err := http.Get(fmt.Sprintf("%s%s", "http://hq.sinajs.cn/list=", code))
    for   {
        resp, err := http.Get("http://hq.sinajs.cn/list="+code)
        if err != nil {
            fmt.Println("请求报错")
        }
        //析构函数关闭Body请求
        defer resp.Body.Close()
        //读取相应body
        body, err := ioutil.ReadAll(resp.Body)
        //打印相应body
        ch <- fmt.Sprintf(string(body))
        time.Sleep(time.Second*1)
    }
}```

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题