一種消息推送系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)字通信領(lǐng)域,特別是一種消息推送系統(tǒng)及方法。
【背景技術(shù)】
[0002]目前,移動(dòng)通信已從模擬通信發(fā)展到了數(shù)字移動(dòng)通信階段,未來(lái)移動(dòng)通信的目標(biāo)是,能在任何時(shí)間、任何地點(diǎn)、向任何人提供快速可靠的通信服務(wù),因此,如何實(shí)現(xiàn)即時(shí)通信和離線消息的推送受到越來(lái)越多的關(guān)注。
[0003]MQTT協(xié)議是一種輕量級(jí)的、基于代理的“發(fā)布/訂閱”模式的消息傳輸協(xié)議,協(xié)議簡(jiǎn)潔、小巧、可擴(kuò)展性強(qiáng)、省流量、省電,為移動(dòng)終端推送量身定制。
[0004]隨著智能操作系統(tǒng)廣泛應(yīng)用到智能手機(jī)、平板電腦以及智能電視中,現(xiàn)有的消息推送方法仍停留在PC時(shí)代,無(wú)法實(shí)現(xiàn)分布式消息推送;使用臃腫的HTTP、XMPP協(xié)議進(jìn)行通信,寬帶占用高;推送與接入耦合緊密,不能進(jìn)行伸縮部署,在海量終端的接入、高并發(fā)訪問(wèn)的情況下,不能及時(shí)推送消息,無(wú)法滿足千萬(wàn)級(jí)終端接入;對(duì)于離線用戶的消息推送不友好,或者根本不支持。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問(wèn)題是,針對(duì)現(xiàn)有技術(shù)不足,提供一種消息推送系統(tǒng)及方法。
[0006]為解決上述技術(shù)問(wèn)題,本發(fā)明所采用的技術(shù)方案是:一種消息推送系統(tǒng),包括至少一個(gè)用于發(fā)放終端認(rèn)證憑據(jù)、接收消息推送命令、記錄訂閱狀態(tài)和推送狀態(tài)的控制模塊;至少一個(gè)用于向終端發(fā)送推送消息的推送模塊;當(dāng)所述控制模塊數(shù)量為一個(gè)時(shí),所述控制模塊與終端、推送模塊通信;當(dāng)所述控制模塊數(shù)量為兩個(gè)以上時(shí),每個(gè)控制模塊均與所有的推送模塊通信,其中一個(gè)控制模塊與終端通信;其中一個(gè)推送模塊與終端通信。
[0007]所述推送模塊與控制模塊數(shù)量比為3:1。
[0008]所述控制模塊與存儲(chǔ)模塊通信。存儲(chǔ)模塊可以存儲(chǔ)海量數(shù)據(jù)信息。
[0009]所述推送模塊與所述控制模塊之間采用全雙工通信方式通信。所述終端與推送模塊之間的通信、控制模塊與推送模塊之間的通信采用不同端口進(jìn)行隔離,提高系統(tǒng)的安全性。
[0010]一種利用上述消息推送系統(tǒng)進(jìn)行消息推送的方法,該方法主要實(shí)現(xiàn)過(guò)程為:終端與控制模塊通信,獲取認(rèn)證憑據(jù);終端通過(guò)輪詢的方法與推送模塊建立連接,并向該推送模塊發(fā)送認(rèn)證憑據(jù),推送模塊收到認(rèn)證憑據(jù)后,發(fā)送給控制模塊確認(rèn)認(rèn)證憑據(jù)的有效性;驗(yàn)證有效后推送模塊向終端返回登錄成功的信息;終端向推送模塊訂閱推送頻道,推送模塊將訂閱關(guān)系通知控制模塊,控制模塊記錄此訂閱關(guān)系;由消息發(fā)送方將消息發(fā)送給控制模塊同時(shí)指定推送頻道;控制模塊根據(jù)訂閱關(guān)系獲取訂閱終端,并將消息分發(fā)給相應(yīng)推送模塊;推送模塊將消息推送到具體終端;最后終端返回消息反饋給推送模塊;推送模塊進(jìn)一步將反饋傳遞給控制模塊;控制模塊記錄此反饋,并標(biāo)記該消息已被終端接收。
[0011]所述終端與所述推送模塊采用MQTT協(xié)議通信。降低了消息推送的帶寬,提高了消息推送的準(zhǔn)確性。
[0012]所述控制模塊確認(rèn)認(rèn)證憑據(jù)的有效性的實(shí)現(xiàn)過(guò)程包括:控制模塊根據(jù)終端的唯一標(biāo)識(shí),返回代表該終端身份的唯一認(rèn)證憑據(jù),該認(rèn)證憑據(jù)在24小時(shí)內(nèi)有效;當(dāng)終端嘗試與多個(gè)推送模塊建立連接時(shí),保留最后一個(gè)連接;控制模塊記錄終端與推送模塊的連接關(guān)系;終端與推送模塊建立連接后,發(fā)送心跳包維持與該推送模塊的連接。
[0013]與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明支持千萬(wàn)級(jí)終端接入,能夠極大地降低終端接入成本,在海量終端接入和高并發(fā)訪問(wèn)的情況下,也能夠及時(shí)推送消息;支持離線用戶的消息推送;通過(guò)MQTT實(shí)現(xiàn)分布式消息推送,降低了消息推送的帶寬,提高了消息推送的準(zhǔn)確性;本發(fā)明系統(tǒng)的各個(gè)模塊相對(duì)獨(dú)立,可以分散部署在不同的機(jī)器上,可根據(jù)終端接入數(shù)目和消息推送數(shù)量動(dòng)態(tài)調(diào)配服務(wù)器資源,達(dá)到伸縮部署、高性能、高并發(fā)的目的,實(shí)現(xiàn)了分布式消息推送。
【附圖說(shuō)明】
[0014]圖1為本發(fā)明一實(shí)施例結(jié)構(gòu)框圖;
圖2為本發(fā)明實(shí)施例離線消息推送流程圖;
圖3為本發(fā)明實(shí)施例主動(dòng)消息推送流程圖。
【具體實(shí)施方式】
[0015]如圖1所示,本發(fā)明系統(tǒng)包括推送模塊、控制模塊和存儲(chǔ)模塊。推送模塊與控制模塊之間構(gòu)成雙向全雙工通信,存儲(chǔ)模塊只與控制模塊相連。推送模塊MlOO和終端構(gòu)成全雙工通信,通信使用MQTT協(xié)議;推送模塊MlOO和控制模塊M200同樣是全雙工通信;推送模塊MlOO不和存儲(chǔ)模塊M300直接通信,控制模塊M200和存儲(chǔ)模塊M300之間的通信由控制模塊M200主動(dòng)發(fā)起。推送模塊MlOO用于向終端發(fā)送推送消息;控制模塊用于發(fā)放終端認(rèn)證憑據(jù)、接收消息推送、記錄訂閱狀態(tài)和推送狀態(tài);存儲(chǔ)模塊用于存儲(chǔ)數(shù)據(jù);終端與控制模塊之間的連接為短連接,通信完后兩者之間的連接立即斷開(kāi)。
[0016]本發(fā)明推送方法實(shí)現(xiàn)過(guò)程為:終端向所述控制模塊通信,獲取認(rèn)證憑據(jù);終端與推送模塊建立連接,并傳遞憑據(jù)進(jìn)行認(rèn)證;推送模塊與控制模塊通信驗(yàn)證憑據(jù)的有效性,并返回登錄結(jié)果給終端;終端登錄成功后,向推送模塊訂閱相關(guān)的推送頻道;推送模塊向控制模塊通報(bào)此訂閱關(guān)系;由消息發(fā)送方將消息發(fā)送給推送模塊并指定推送頻道;控制模塊根據(jù)推送頻道以及記錄的訂閱關(guān)系獲取在線終端;控制模塊將在線終端根據(jù)其所連的推送模塊進(jìn)行分組,并將消息和終端列表傳遞給推送模塊;推送模塊依次將消息推送給終端列表中的終端;終端收到消息后,向推送模塊返回接收消息的反饋通知;推送模塊向控制模塊上報(bào)此反饋,并由控制模塊記錄此反饋。
[0017]終端與推送模塊之間的通信全部采用MQTT協(xié)議。
[0018]控制模塊會(huì)根據(jù)終端唯一標(biāo)識(shí),返回代表該終端身份的唯一認(rèn)證憑據(jù);認(rèn)證憑據(jù)只在一定期限內(nèi)有效;一個(gè)終端只允許與一個(gè)推送模塊建立連接,終端嘗試與多個(gè)推送模塊建立連接時(shí),只會(huì)保留最后一個(gè)連接;在憑證有效期內(nèi)終端可以反復(fù)與任意一個(gè)推送模塊建立連接進(jìn)行認(rèn)證;控制模塊會(huì)記錄終端與推送模塊的對(duì)應(yīng)關(guān)系;終端與推送模塊建立連接后,發(fā)送心跳包維持與該推送模塊的連接。
[0019]終端訂閱的推送頻道記錄會(huì)在終端離線后清除,終端可以同時(shí)訂閱多個(gè)推送頻道,終端也可以訂閱之前從未有過(guò)的新頻道;控制模塊在保存終端訂閱的推送頻道后,會(huì)檢查此頻道已產(chǎn)生的離線消息,并將未過(guò)期的消息推送給終端。
[0020]發(fā)送消息指定推送頻道的同時(shí)可以指定消息的有效期,消息首先會(huì)被送達(dá)訂閱此頻道的在線終端,并在消息有效期內(nèi)保存此消息,隨后上線的終端訂閱了此頻道都會(huì)收到此消息;終端收到消息后向上進(jìn)行反饋,確保消息不會(huì)被重復(fù)送達(dá)。
[0021 ] 終端與推送模塊之間的通信,控制模塊與推送模塊之間的通信使用不同端口進(jìn)行隔尚,提尚系統(tǒng)的安全性。
[0022]推送模塊使用隊(duì)列、異步事件處理機(jī)制,確保在高并發(fā)情況下不會(huì)進(jìn)行堵塞。<