最近要做后台主动推送:(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会接收到推送,不连接就会接收不到,就算再次链接也依然接收不到,(项目目前不要求做,就没做,后面做了补上来)