无法在WebSocket控制器中重新保存会话?

时间:2015-01-23 08:32:47

标签: websocket revel

我想为每个用户创建一个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方法,不是吗?

1 个答案:

答案 0 :(得分:0)

我明白了。

Revel使用cookie来保存Session数据。这些值存储在键“REVEL_SESSION”的cookie中。因此,revel在保存Cookie时使用http标头Set-Cookie。但是,我们使用websocket协议。因此,我们无法保存cookie。