0

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

4

1 回答 1

0

我明白了。

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

于 2015-01-24T06:36:20.297 回答