Прежде всего, я хочу сделать систему уведомлений Long Polling. Чтобы быть более конкретным, я сделаю http-запрос, и ответ будет возвращен, только если канал карты true
.
Это блок кода, который я использовал:
var MessageNotification = make(map[string]chan bool, 10)
func GetNotification(id int, timestamp int) notification {
<-MessageNotification["1"]
var chat_services []*models.Chat_service
o := orm.NewOrm()
_, err := o.QueryTable("chat_service").Filter("Sender__id", id).RelatedSel().All(&chat_services)
if err != nil {
return notification{Status: false}
}
return notification{Status: true, MessageList: chat_services}
}
func SetNotification(id int) {
MessageNotification[strconv.Itoa(id)] <- true
}
Это блок контроллера:
func (c *ChatController) Notification() {
data := chat.GetNotification(1,0)
c.Data["json"] = data
c.ServeJSON()
}
func (c *ChatController) Websocket(){
chat.SetNotification(1)
c.Data["json"] = "test"
c.ServeJSON();
}
имена функций и переменная, созданные для теста.
Ошибка не возникла. Спасибо за вашу помощь.
SetNotification
? В вашем коде нет цикла, поэтому, вероятно, это блокирующий канал. Можете ли вы поделиться еще немного кода? - person abhink   schedule 26.07.2016<-MessageNotification["1"]
заставляет программу ждать или я ошибаюсь? - person Sinojin   schedule 26.07.2016Notification
иWebsocket
? - person abhink   schedule 26.07.2016