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

发布于 2022-09-06 15:19:21 字数 1587 浏览 26 评论 0

请各位帮忙看下,我一个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)
    }
}```

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文