如何在Go中使用Facebook中的通知系统进行通知

时间:2016-07-30 21:22:36

标签: go websocket notifications beego

我想在我的项目中建立具有聊天模块的通知系统。更具体一点,当我发送消息接收者接收通知时。我已经制作了通知系统及其工作方式。我的问题是当用户打开第二个标签时,我的通知系统不能流畅地工作。

有我的代码

func GetNotification(w http.ResponseWriter, r *http.Request,id ,timestamp int) {
    LastMessageTime := -1
    conn, err := upgrader.Upgrade(w, r, nil)

    if err != nil {
        beego.Error(err)
        return
}


wakeupNotification(id)

for {
    select {

    case notificationTime := <-MessageNotification[strconv.Itoa(id)] :

        if notificationTime > LastMessageTime {
            LastMessageTime = notificationTime

        //MessageNotification[strconv.Itoa(id)] <-notificationTime

        chat_services,err := models.GetChatsNotifications(id,timestamp)

        if err != nil{
            return
        }

        not := notification{Status:true,MessageList:chat_services}

        conn.WriteJSON(not)
        }
    }
}


}


func SetNotification(id int,timeStamp int){
    go func(){
        wakeupNotification(id)
        MessageNotification[strconv.Itoa(id)] <- timeStamp

    }()
}

func wakeupNotification(id int){
    _,ok := MessageNotification[strconv.Itoa(id)]
    if !ok {
        MessageNotification[strconv.Itoa(id)] = make(chan int)
    }
}

func SleptNotification(id int){
    wakeupNotification(id)
    <-MessageNotification[strconv.Itoa(id)]
}

我也有控制器触发

    func (c *ChatController) Notification() {

    chat.GetNotification(c.Ctx.ResponseWriter,c.Ctx.Request,1,1)
}


func (c *ChatController) DeleteNotification(){

    chat.SleptNotification(1)

    c.Data["json"] = "readed"
    c.ServeJSON();


}

func (c *ChatController) Websocket(){

    //odalari olusturup mesajlasma bolumu yapilacak
    chat.SetNotification(1,int(time.Now().Unix()))

    c.Data["json"] = "test to trigger chan"
    c.ServeJSON();

}

我的问题是notificationTime := <-MessageNotification[strconv.Itoa(id)]一次工作而又无法再次工作。因此,代码永远不会在浏览器第二个标签中再次触发。 你有什么想法吗?

代码工作流利。 对不起英文。 谢谢你的帮助。

0 个答案:

没有答案