本發(fā)明涉及互聯(lián)網(wǎng)通訊,具體涉及一種基于MQTT的消息插播方法。
背景技術(shù):
目前的通訊技術(shù),在新增一條消息時(shí),多數(shù)是通過(guò)客戶(hù)端建立一個(gè)長(zhǎng)連接的socket來(lái)監(jiān)聽(tīng)服務(wù)端下發(fā)的消息,這種長(zhǎng)連接很容易造成消息堵塞,不斷發(fā)送心跳會(huì)消耗流量,且連接數(shù)量受到限制。
MQTT通訊協(xié)議是為大量計(jì)算能力有限,且工作在低寬帶、不可靠的網(wǎng)絡(luò)的遠(yuǎn)程傳感器或者控制通訊設(shè)計(jì)的協(xié)議,它具有如下特性:
1)使用發(fā)布/訂閱消息模式,提供一對(duì)多的消息發(fā)布,解除應(yīng)用程序耦合;
2)對(duì)負(fù)載內(nèi)容屏蔽的消息傳輸;
3)使用TCP/IP提供網(wǎng)絡(luò)連接;
4)有三種消息發(fā)布服務(wù)質(zhì)量:
“至多一次”,消息發(fā)布完全依賴(lài)底層TCP/IP網(wǎng)絡(luò)。會(huì)發(fā)生消息丟失或重復(fù)。這一級(jí)別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無(wú)所謂,因?yàn)椴痪煤筮€會(huì)有第二次發(fā)送。
“至少一次”,確保消息到達(dá),但消息重復(fù)可能會(huì)發(fā)生。
“只有一次”,確保消息到達(dá)一次。這一級(jí)別可用于如下情況,在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會(huì)導(dǎo)致不正確的結(jié)果。
小型傳輸,開(kāi)銷(xiāo)很小(固定長(zhǎng)度的頭部是2字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量;
根據(jù)mqtt的特性,選擇mqtt協(xié)議來(lái)插播消息是一個(gè)非常理想的方法。
DES(Data Encryption Standard)是分組對(duì)稱(chēng)密碼算法。DES采用了64位的分組長(zhǎng)度和56位的密鑰長(zhǎng)度,它將64位的輸入經(jīng)過(guò)一系列變換得到64位的輸出。解密則使用了相同的步驟和相同的密鑰。DES的密鑰長(zhǎng)度為64位,由于第n*8(n=1,2,…8)是校驗(yàn)位,因此實(shí)際參與加密的長(zhǎng)度為56位,密鑰空間含有2^56個(gè)密鑰。
DES算法利用多次組合替代算法和換位算法,分散和錯(cuò)亂的相互作用,把明文編制成密碼強(qiáng)度很高的密文,它的加密和解密用的是同一算法。
DES算法,是一種乘積密碼,其在算法結(jié)構(gòu)上主要采用了置換、代替、模二相加等函數(shù),通過(guò)輪函數(shù)迭代的方式來(lái)進(jìn)行計(jì)算和工作。
DES算法也會(huì)使用到數(shù)據(jù)置換技術(shù),主要有初始置換IP和逆初始置換IP^-1兩種類(lèi)型。DES算法使用置換運(yùn)算的目的是將原始明文的所有格式及所有數(shù)據(jù)全部打亂重排。而在輪加密函數(shù)中,即將數(shù)據(jù)全部打亂重排,同時(shí)在數(shù)據(jù)格式方面,將原有的32位數(shù)據(jù)格式,擴(kuò)展成為48位數(shù)據(jù)格式,目的是為了滿(mǎn)足S盒組對(duì)數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)格式規(guī)范的要求。
一組數(shù)據(jù)信息經(jīng)過(guò)一系列的非線(xiàn)性變換以后,很難從中推導(dǎo)出其計(jì)算的過(guò)程和使用的非線(xiàn)性組合;但是如果這組數(shù)據(jù)信息使用的是線(xiàn)性變換,計(jì)算就容易的多。在DES算法中,屬于非線(xiàn)性變換的計(jì)算過(guò)程只有S盒,其余的數(shù)據(jù)計(jì)算和變換都是屬于線(xiàn)性變換,所以DES算法安全的關(guān)鍵在于S盒的安全強(qiáng)度。此外,S盒和置換IP相互配合,形成了很強(qiáng)的抗差分攻擊和抗線(xiàn)性攻擊能力,其中抗差分攻擊能力更強(qiáng)一些。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)上述問(wèn)題,提供了一種基于MQTT的消息插播方法。
本發(fā)明采用的技術(shù)方案是:一種基于MQTT的消息插播方法,包括以下步驟:
S1,終端啟動(dòng)時(shí),訂閱消息主題;
S2,用戶(hù)發(fā)布插播消息,消息經(jīng)過(guò)DES加密;
S3,終端根據(jù)訂閱主題接收用戶(hù)發(fā)布的插播消息;
S4,終端接收插播消息,并進(jìn)行DES解密;
S5,終端根據(jù)插播消息的屬性顯示在屏幕上。
進(jìn)一步地,所述步驟S1還包括:
S11,連接MQTT:
生成連接字符串:指定消息代理主機(jī)的IP地址和MQTT分配的端口號(hào),端口號(hào)缺省值為1883;設(shè)置連接屬性,包括客戶(hù)機(jī)的標(biāo)識(shí)、訂閱類(lèi)型、發(fā)送活動(dòng)消息的間隔時(shí)間;
創(chuàng)建MQTT客戶(hù)機(jī)對(duì)象;
S12,向代理訂閱主題:訂閱是由MQTT對(duì)象處理,包括兩個(gè)數(shù)組參數(shù),即訂閱主題數(shù)組、服務(wù)質(zhì)量數(shù)組。
更進(jìn)一步地,所述步驟S2還包括:
S21,向數(shù)字標(biāo)牌發(fā)布消息:直接使用MQTT提供的API函數(shù)publish,需要提供主題、消息、服務(wù)質(zhì)量等參數(shù);
S22,接收來(lái)自代理的消息:為使應(yīng)用接收到訂閱的消息,創(chuàng)建一個(gè)回調(diào)處理函數(shù),并且在MQTT客戶(hù)端注冊(cè);
用MqttSimpleCallback接口創(chuàng)建簡(jiǎn)單接口的對(duì)象,并實(shí)現(xiàn)connectionLost、deliveryComplete和messageArrived三個(gè)方法;
當(dāng)與代理的連接意外終止時(shí),就調(diào)用connectionLost方法;如果出現(xiàn)這種情況,則此方法試圖重新連接到代理;如果connectionLost方法無(wú)法重新連接,則會(huì)拋出異常來(lái)通知客戶(hù)機(jī)重新連接失敗;
messageArrived方法通知系統(tǒng)訂閱主題的消息已到達(dá)客戶(hù)端;
deliveryComplete方法表示發(fā)送是否完成;
S23,消息發(fā)布前需要DES加密。
更進(jìn)一步地,所述步驟S3還包括:接收消息解密:數(shù)字標(biāo)牌訂閱消息后,代理發(fā)布數(shù)字標(biāo)牌訂閱的主題,數(shù)字標(biāo)牌接收到發(fā)布的消息并解密。
更進(jìn)一步地,所述步驟S4還包括:對(duì)相關(guān)代碼加密及解密。
更進(jìn)一步地,所述步驟S5具體為:
終端接收到消息解密之后,根據(jù)消息內(nèi)容里的播放速度、播放時(shí)間、是否追加插播消息、字體顏色、字體大小、字體??课恢?、透明度的屬性在終端上顯示示消息的內(nèi)容。
本發(fā)明的優(yōu)點(diǎn):
本發(fā)明使用的mqtt協(xié)議用在弱信號(hào)、低寬帶等環(huán)境下工作也可保證接收完整,而且消息經(jīng)過(guò)DES加密,安全性得到保證,是mqtt協(xié)議和DES安全認(rèn)證運(yùn)用在數(shù)字標(biāo)牌上是一種非常好的方法。
除了上面所描述的目的、特征和優(yōu)點(diǎn)之外,本發(fā)明還有其它的目的、特征和優(yōu)點(diǎn)。下面將參照?qǐng)D,對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
附圖說(shuō)明
構(gòu)成本申請(qǐng)的一部分的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。
圖1是本發(fā)明的一種基于MQTT的消息插播方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
參考圖1,如圖1所示的一種基于MQTT的消息插播方法,包括以下步驟:
S1,終端(數(shù)字標(biāo)牌)啟動(dòng)時(shí),訂閱消息主題;
S2,用戶(hù)發(fā)布插播消息,消息經(jīng)過(guò)DES加密;
S3,終端根據(jù)訂閱主題接收用戶(hù)發(fā)布的插播消息;
S4,終端接收插播消息,并進(jìn)行DES解密;
S5,終端根據(jù)插播消息的屬性顯示在屏幕上。
所述步驟S1還包括:
S11,連接MQTT:
生成連接字符串:指定消息代理主機(jī)的IP地址和MQTT分配的端口號(hào),端口號(hào)缺省值為1883;設(shè)置連接屬性,包括客戶(hù)機(jī)的標(biāo)識(shí)、訂閱類(lèi)型、發(fā)送活動(dòng)消息的間隔時(shí)間;
創(chuàng)建MQTT客戶(hù)機(jī)對(duì)象;
S12,向代理訂閱主題:訂閱是由MQTT對(duì)象處理,包括兩個(gè)數(shù)組參數(shù),即訂閱主題數(shù)組、服務(wù)質(zhì)量數(shù)組。
所述步驟S2還包括:
S21,向數(shù)字標(biāo)牌發(fā)布消息:直接使用MQTT提供的API函數(shù)publish,需要提供主題、消息、服務(wù)質(zhì)量等參數(shù);
S22,接收來(lái)自代理的消息:為使應(yīng)用接收到訂閱的消息,創(chuàng)建一個(gè)回調(diào)處理函數(shù),并且在MQTT客戶(hù)端注冊(cè);
用MqttSimpleCallback接口創(chuàng)建簡(jiǎn)單接口的對(duì)象,并實(shí)現(xiàn)connectionLost、deliveryComplete和messageArrived三個(gè)方法;
當(dāng)與代理的連接意外終止時(shí),就調(diào)用connectionLost方法;如果出現(xiàn)這種情況,則此方法試圖重新連接到代理;如果connectionLost方法無(wú)法重新連接,則會(huì)拋出異常來(lái)通知客戶(hù)機(jī)重新連接失敗;
messageArrived方法通知系統(tǒng)訂閱主題的消息已到達(dá)客戶(hù)端;
deliveryComplete方法表示發(fā)送是否完成;
S23,消息發(fā)布前需要DES加密。
所述步驟S3還包括:接收消息解密:數(shù)字標(biāo)牌訂閱消息后,代理發(fā)布數(shù)字標(biāo)牌訂閱的主題,數(shù)字標(biāo)牌接收到發(fā)布的消息并解密。
所述步驟S4還包括:對(duì)相關(guān)代碼加密及解密。
所述步驟S5具體為:
終端接收到消息解密之后,根據(jù)消息內(nèi)容里的播放速度、播放時(shí)間、是否追加插播消息、字體顏色、字體大小、字體??课恢?、透明度的屬性在終端上顯示示消息的內(nèi)容。由于這些屬性值可以不一樣,所以終端可以展示出豐富的內(nèi)容。
由于是通過(guò)mqtt協(xié)議來(lái)傳輸?shù)?,在弱信?hào)、低寬帶環(huán)境都可以保證接收到,這樣客戶(hù)的體驗(yàn)會(huì)更加完善。
本發(fā)明的基于MQTT的消息插播方法,終端(數(shù)字標(biāo)牌)啟動(dòng)時(shí),訂閱消息主題如:cloudring/client/terminal/terminalId/#,其中terminalId為終端的具體值;
用戶(hù)發(fā)布插播消息,消息經(jīng)過(guò)DES加密;
終端根據(jù)訂閱主題接收用戶(hù)發(fā)布的插播消息;
終端接收插播消息,并進(jìn)行DES解密;
終端根據(jù)插播消息的屬性(字體、位置、顏色等)顯示在屏幕上。
現(xiàn)在很多的數(shù)字標(biāo)牌,本身的wifi信號(hào)不強(qiáng),如果是走h(yuǎn)ttp協(xié)議,則可能發(fā)生斷網(wǎng)的情況或者鏈接不通暢導(dǎo)致消息接收不到或者是不完整,這樣就會(huì)導(dǎo)致廣告的體驗(yàn)效果差,本發(fā)明使用的mqtt協(xié)議用在弱信號(hào)、低寬帶等環(huán)境下工作也可保證接收完整,而且消息經(jīng)過(guò)DES加密,安全性得到保證,是mqtt協(xié)議和DES安全認(rèn)證運(yùn)用在數(shù)字標(biāo)牌上是一種非常好的方法。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。