我想为每个用户创建一个 Goroutine 以按顺序发送 websocket 数据。所以,我写了如下代码。
func (c User) List(ws *websocket.Conn) revel.Result {
disconnect := make(chan bool)
if c.Session["connected"] != "true" {
c.Session["connected"] = "true"
go func() {
for {
select {
case <-ticker.C:
if websocket.JSON.Send(ws, &map[string]interface{}{"hoge": "fuga"}) != nil {
c.Session["connected"] = "false"
disconnect <- true
}
}
}
}()
}
<-disconnect
return nil
}
但是,代码为每次访问创建了 goroutine。
我尝试了如下代码。
func (c App) WebSocket(ws *websocket.Conn) revel.Result {
fmt.Println(c.Session)
c.Session["connected"] = "true"
return nil
}
https://gist.github.com/uzimith/0066e863a0809d4a91ec
输出是这样的。
map[]
map[]
无法在 WebSocket 控制器中保存会话?
我认为我们需要一个 Session.Save 方法,不是吗?