鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ django的消息推送問題

django的消息推送問題

題目描述

我是用django+channel做的消息推送功能,但是呢有個問題,就是比如系統(tǒng)給A用戶推送了一條消息,如果A用戶連接到了/message這個websocket,那么消息可以正常推送過去,但是如果A用戶沒有打開APP并且也沒有連接到websocket,那么系統(tǒng)推送的消息就相當(dāng)于丟失了

你期待的結(jié)果是什么?

能不能做到這種,系統(tǒng)給A推送了10條消息,當(dāng)A用戶打開APP并連接到/message這個websocket時,就把之前推送的10條消息都返回過去

消息是不保存在數(shù)據(jù)庫的

有一個關(guān)鍵的問題,就是,系統(tǒng)怎么知道A用戶有沒有連接到/message呢?

回答
編輯回答
浪婳

那簡單,不用數(shù)據(jù)庫那就放在內(nèi)存吧。建個字典 dict 存放待用戶待推送的消息:

wait_push = {
    <user_id> : ['text', 'text', ...]
}

用戶 self.accept() 接受websocket請求后,檢測下是否有消息再 self.send() 。為了避免內(nèi)存高占用,字典可以僅保存一定數(shù)量的推送,超過的話就頂?shù)襞f的。

2017年6月28日 11:28