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