最近要做后台主動推送:(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會接收到推送,不連接就會接收不到,就算再次鏈接也依然接收不到,(項目目前不要求做,就沒做,后面做了補上來)
