2015-01-23 4 views
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 
} 

Однако код делает goroutines для каждого доступа.

И я попробовал код, как показано ниже.

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?

Я думаю, нам нужен сеанс. Сохраняйте метод, не так ли?

ответ

0

Я понял.

Ревель использует файл cookie для сохранения данных сеанса. Эти значения хранятся в файле cookie ключа «REVEL_SESSION». Таким образом, revel использует http-заголовок Set-Cookie, когда он сохраняет Cookie. Однако мы используем протокол websocket. Поэтому мы не можем сохранить cookie.

Смежные вопросы