我想为每个用户创建一个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方法,不是吗?
答案 0 :(得分:0)
我明白了。
Revel使用cookie来保存Session数据。这些值存储在键“REVEL_SESSION”的cookie中。因此,revel在保存Cookie时使用http标头Set-Cookie。但是,我们使用websocket协议。因此,我们无法保存cookie。