golang iris下面的websocket


最近要做后台主動推送:(iris框架,封裝的有wesocket,剛開始以為直接拿過來用,結果不是現在貼一下代碼,寫一下遇到的坑)

func main() {
    app := iris.New()
    app.Adapt(iris.DevLogger())
    app.Adapt(httprouter.New())
    //創建websocket服務器
    ws := websocket.New(websocket.Config{
        Endpoint: "/pushmessage",
    })
    ws.OnConnection(func(c websocket.Connection) {
        c.Join("/push")
        go func() {
            for {
                var datas = <-models.CHANDATA(這里就是遇到的 坑當時一直鑽牛角尖怎么把這里從man函數拿出去,其實只要直接勇哥chananel傳進來就行,推商鋪那個成功之后在一個chananel回去就可以了,)
                stringdata := datas.(string)
                conns := ws.GetConnectionsByRoom("/push")
                for _, v := range conns { //遍歷所有的鏈接,發送(這里要遍歷所有的鏈接,不然第一次推送會推送給第一個鏈接上的,第二次推送就會推送給第二個鏈接上的,不是所有的的都會推送)
                    err := v.EmitMessage([]byte(stringdata))
                    if err != nil {
                        v.Disconnect()
                    }
                }
            }
        }()
    })
    app.Adapt(
        ws,
        sessions.New(sessions.Config{
            Cookie:                      "mysessionid",
            Expires:                     0,
            CookieLength:                32,
            DisableSubdomainPersistence: false,
        }),
        view.HTML("./src/views", ".html"),
        cors.New(cors.Options{
            AllowedOrigins:   []string{"*"},
            AllowCredentials: true,
        }),
    )

現在還存在連接上websocket會接收到推送,不連接就會接收不到,就算再次鏈接也依然接收不到,(項目目前不要求做,就沒做,后面做了補上來)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM