本申請涉及軟件技術(shù)領(lǐng)域,尤其涉及一種python腳本的更新方法及裝置、客戶端、服務(wù)器。
背景技術(shù):
現(xiàn)有技術(shù)基于系統(tǒng)本地的應(yīng)用程序的進程在更新、發(fā)布過程中,由于在每次更新腳本文件的過程中需要重啟進程,在重啟過程中,被更新的腳本文件的穩(wěn)定性、安全性都不可預(yù)估,為了觀察被更新的腳本文件的穩(wěn)定性,則需要有很長的灰度發(fā)布過程。
技術(shù)實現(xiàn)要素:
有鑒于此,本申請?zhí)峁┮环N新的技術(shù)方案,可以實現(xiàn)不重啟應(yīng)用程序的進程即可成實現(xiàn)腳本文件的更新。
為實現(xiàn)上述目的,本申請?zhí)峁┘夹g(shù)方案如下:
根據(jù)本申請的第一方面,提出了一種python腳本的更新方法,應(yīng)用在客戶端,包括:
當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊;
將所述新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段;
將所述第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制所述應(yīng)用程序在所述內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將所述第一腳本數(shù)據(jù)片段替換所述第二腳本數(shù)據(jù)片段。
根據(jù)本申請的第二方面,提出了一種python腳本的更新方法,應(yīng)用在服務(wù)器,包括:
確定已更新的python腳本;
將所述已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密;
對逐字節(jié)加密后的python腳本進行對稱加密,得到所述已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊,以供客戶端在接收到所述新版本數(shù)據(jù)塊后,將所述新版本數(shù)據(jù)塊通過上述技術(shù)方案所述的更新方法將第一腳本數(shù)據(jù)片段替換內(nèi)存中的第二腳本數(shù)據(jù)片段。
根據(jù)本申請的第三方面,提出了一種python腳本的更新裝置,應(yīng)用在客戶端,包括:
第一獲取模塊,用于當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊;
還原模塊,用于將所述第一獲取模塊獲取到的所述新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段;
更新模塊,用于將所述還原模塊還原得到的所述第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制所述應(yīng)用程序在所述內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將所述第一腳本數(shù)據(jù)片段替換所述第二腳本數(shù)據(jù)片段。
根據(jù)本申請的第四方面,提出了一種python腳本的更新裝置,應(yīng)用在服務(wù)器,包括:
第三確定模塊,用于確定已更新的python腳本;
分解模塊,用于將所述第三確定模塊確定的所述已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密;
加密模塊,用于對所述分解模塊逐字節(jié)加密后的python腳本進行對稱加密,得到所述已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊。
根據(jù)本申請的第五方面,提出了一種客戶端,所述客戶端包括:
第一處理器、內(nèi)部總線、第一網(wǎng)絡(luò)接口、內(nèi)存以及存儲第一處理器可執(zhí) 行指令的第一存儲器;
其中,第一網(wǎng)絡(luò)接口,用于當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊;
所述第一處理器,用于將所述新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段;將所述第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制所述應(yīng)用程序在所述內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將所述第一腳本數(shù)據(jù)片段替換所述第二腳本數(shù)據(jù)片段。
根據(jù)本申請的第六方面,提出了一種服務(wù)器,所述服務(wù)器包括:
第二處理器、內(nèi)部總線、第二網(wǎng)絡(luò)接口、內(nèi)存以及存儲第二處理器可執(zhí)行指令的第二存儲器;
其中,所述第二網(wǎng)絡(luò)接口,用于接收已更新的python腳本;
所述第二處理器,用于將所述已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密;對逐字節(jié)加密后的python腳本進行對稱加密,得到所述已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊,以供客戶端在接收到所述新版本數(shù)據(jù)塊后,將所述新版本數(shù)據(jù)塊通過上述技術(shù)方案所述的更新方法將第一腳本數(shù)據(jù)片段替換內(nèi)存中的第二腳本數(shù)據(jù)片段。
由以上技術(shù)方案可見,本申請通過將需要更新的python腳本對應(yīng)的第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制應(yīng)用程序在內(nèi)存中將需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將第一腳本數(shù)據(jù)片段替換第二腳本數(shù)據(jù)片段,由于可以直接在內(nèi)存中替換需要更新的python腳本對應(yīng)的腳本數(shù)據(jù)片段,因此不需重啟應(yīng)用程序的本地進程即可實現(xiàn)腳本數(shù)據(jù)片段的加載,不用關(guān)閉應(yīng)用程序便可完成python腳本的更新,提高了python腳本更新過程的穩(wěn)定性、安全性以及效率,縮短了應(yīng)用程序的灰度更新和發(fā)布的周期。
附圖說明
圖1示出了根據(jù)本發(fā)明的示例性實施例一的python腳本的更新方法的流程示意圖;
圖2示出了根據(jù)本發(fā)明的示例性實施例二的python腳本的更新方法的流程示意圖;
圖3示出了根據(jù)本發(fā)明的示例性實施例三的python腳本的更新方法的流程示意圖;
圖4示出了根據(jù)本發(fā)明的示例性實施例四的python腳本的更新方法的流程示意圖;
圖5示出了根據(jù)本發(fā)明的示例性實施例五的python腳本的更新方法的流程示意圖;
圖6示出了根據(jù)本發(fā)明的示例性實施例六的python腳本的更新方法的流程示意圖;
圖7示出了根據(jù)本發(fā)明的一示例性實施例的客戶端的結(jié)構(gòu)示意圖;
圖8示出了根據(jù)本發(fā)明的一示例性實施例的服務(wù)器的結(jié)構(gòu)示意圖;
圖9示出了根據(jù)本發(fā)明的示例性實施例一的python腳本的更新裝置的結(jié)構(gòu)示意圖;
圖10示出了根據(jù)本發(fā)明的示例性實施例二的python腳本的更新裝置的結(jié)構(gòu)示意圖;
圖11示出了根據(jù)本發(fā)明的示例性實施例三的python腳本的更新裝置的結(jié)構(gòu)示意圖;
圖12示出了根據(jù)本發(fā)明的示例性實施例四的python腳本的更新裝置的結(jié)構(gòu)示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。
應(yīng)當理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應(yīng)于確定”。
為對本申請進行進一步說明,提供下列實施例:
圖1示出了根據(jù)本發(fā)明的示例性實施例一的python腳本的更新方法的流程示意圖;本實施例可應(yīng)用在客戶端,如圖1所示,包括如下步驟:
步驟101,當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊。
步驟102,將新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段。
步驟103,將第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制應(yīng)用程序在內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將第一腳本數(shù)據(jù)片段替換第二腳本數(shù)據(jù)片段。
可選的,本實施例還可以包括:
步驟104,啟動內(nèi)存中的第一腳本數(shù)據(jù)片段。
在上述步驟101中,在一實施例中,可以通過比較客戶端當前正在執(zhí)行的程序中的python腳本的第一校驗值與服務(wù)器中的該同一python腳本的第二校驗值,當?shù)谝恍r炛岛偷诙r炛挡幌嗤瑫r,確定檢測到需要對應(yīng)用程序進行python腳本更新;在另一實施例中,服務(wù)器可以在接收到上傳的已經(jīng)更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊時,向客戶端中發(fā)送更新通知消息, 客戶端在接收到該更新通知消息后,即可確定檢測到應(yīng)用程序需要進行python腳本更新。在一實施例,可以從服務(wù)器上下載需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊。
在上述步驟102中,在一實施例中,當新版本數(shù)據(jù)塊為未加密的python腳本時,可直接通過調(diào)用python提供的接口函數(shù)(例如,pystring_fromstring接口函數(shù))對腳本分解數(shù)據(jù)進行詞法解析,得到可被執(zhí)行的腳本數(shù)據(jù)片段;當新版本數(shù)據(jù)塊為已加密的python腳本時,可對已加密的python腳本進行與加密方法相對應(yīng)的解密方法進行解密,并調(diào)用python提供的接口函數(shù)對腳本分解數(shù)據(jù)進行詞法解析,得到可被執(zhí)行的腳本數(shù)據(jù)片段。
在上述步驟103和步驟104中,例如,一即時聊天應(yīng)用程序,包括功能a、功能b、功能c,在該即時聊天應(yīng)用程序正在運行的過程中,當通過上述步驟101-步驟102得到功能a對應(yīng)的可被執(zhí)行的第一腳本數(shù)據(jù)片段后,可以將該第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制功能a在內(nèi)存中對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,將功能a對應(yīng)的可被執(zhí)行的第一腳本數(shù)據(jù)片段替換內(nèi)存中功能a對應(yīng)的第二腳本數(shù)據(jù)片段塊,替換完成后,啟動內(nèi)存中的功能a更新后的第一腳本數(shù)據(jù)片段。當功能b與功能a相關(guān)聯(lián)時,在更新功能a對應(yīng)的python腳本的過程中,還可以暫停功能b對應(yīng)的腳本數(shù)據(jù)片段,從而可以防止在python腳本更新過程中內(nèi)存中的其他邏輯腳本對應(yīng)用程序造成不可預(yù)知的異常情況,或者應(yīng)用程序?qū)ζ渌麅?nèi)存中的邏輯python腳本造成不可預(yù)知的異常情況。
由上述描述可知,本發(fā)明實施例通過將需要更新的python腳本對應(yīng)的第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制應(yīng)用程序在內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將第一腳本數(shù)據(jù)片段替換內(nèi)存中的第二腳本數(shù)據(jù)片段,由于可以直接在內(nèi)存中替換需要更新的腳本數(shù)據(jù)片段,因此不需重啟應(yīng)用程序的本地進程即可實現(xiàn)腳本數(shù)據(jù)片段的加載,不用關(guān)閉應(yīng)用程序便可完成python腳本的更新,提高了python腳本更新過程的穩(wěn)定性、安全性以及效率,縮短了應(yīng)用程序的灰度更新和發(fā)布的周期。
圖2示出了根據(jù)本發(fā)明的示例性實施例二的python腳本的更新方法的流程示意圖;本實施例在上述實施例的基礎(chǔ)上,以新版本數(shù)據(jù)塊在已加密的情形下如何對新版本數(shù)據(jù)塊進行解密并解析成可被執(zhí)行的第一腳本數(shù)據(jù)片段為例進行示例性說明,如圖2所示,包括如下步驟:
步驟201,當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊。
步驟202,確定新版本數(shù)據(jù)塊是否為已加密數(shù)據(jù)塊,當新版本數(shù)據(jù)塊為已加密數(shù)據(jù)塊時,執(zhí)行步驟203,當新版本數(shù)據(jù)塊為非加密數(shù)據(jù)塊時,執(zhí)行步驟205。
步驟203,根據(jù)與新版本數(shù)據(jù)塊的加密算法相一致的解密算法解密新版本數(shù)據(jù)塊,得到腳本分解數(shù)據(jù),執(zhí)行步驟204。
步驟204,將腳本分解數(shù)據(jù)解析成可被執(zhí)行的第一腳本數(shù)據(jù)片段,執(zhí)行步驟206。
步驟205,將新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段,執(zhí)行步驟206。
步驟206,將第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制應(yīng)用程序在內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將第一腳本數(shù)據(jù)片段替換成第二腳本數(shù)據(jù)片段,執(zhí)行步驟207。
步驟207,啟動內(nèi)存中的第一腳本數(shù)據(jù)片段,流程結(jié)束。
步驟201、步驟204-步驟207的描述可以參見上述圖1所示實施例中的相關(guān)描述,在此不再詳述。
上述步驟202中,可以通過在新版本數(shù)據(jù)塊中添加一個標識已確定該新版本數(shù)據(jù)塊是否已經(jīng)加密,例如,標識為1時,表示該新版本數(shù)據(jù)塊為已加密的數(shù)據(jù)塊,標識為0時,表示該新版本數(shù)據(jù)塊為未加密的數(shù)據(jù)塊。
上述步驟203中,客戶端可以與服務(wù)器預(yù)先確定好一致的加密算法和解密算法,客戶端在接收到已加密的新版本數(shù)據(jù)塊后,可以根據(jù)預(yù)先約定的與加密算法相一致的解密算法對已加密的新版本數(shù)據(jù)塊進行解密,例如,當已 更新的python腳本文件需要加密時,對python腳本按每字節(jié)屬性分解開,并逐字節(jié)進行加密之后,將己經(jīng)按字節(jié)加密過的整體數(shù)據(jù)混合進行高強度對稱加密,被加密的腳本文件通過加密處理后已經(jīng)是非標準的可解析腳本文件(本申請中所述的“新版本數(shù)據(jù)塊”),客戶端在接收到該已加密的新版本數(shù)據(jù)塊,根據(jù)與上述過程相逆的解密算法對新版本數(shù)據(jù)塊進行解密,從而可以得到需要更新的python腳本對應(yīng)的第一腳本數(shù)據(jù)片段。
本實施例在具有上述實施例的有益技術(shù)效果的基礎(chǔ)上,當新版本數(shù)據(jù)塊為已加密數(shù)據(jù)塊時,根據(jù)更新數(shù)據(jù)塊的加密數(shù)據(jù)結(jié)構(gòu)解密更新數(shù)構(gòu)據(jù)塊,得到腳本分解數(shù)據(jù),從而可以確保腳本數(shù)據(jù)在更新過程中的安全性要求。
圖3示出了根據(jù)本發(fā)明的示例性實施例三的python腳本的更新方法的流程示意圖;本實施例在上述實施例的基礎(chǔ)上,以如何對新版本數(shù)據(jù)塊的完整性進行校驗為例進行示例性說明,如圖3所示,包括如下步驟:
步驟301,檢測新版本數(shù)據(jù)塊是否包含有數(shù)字水印,如果新版本數(shù)據(jù)塊包含有數(shù)字水印,執(zhí)行步驟302,如果新版本數(shù)據(jù)塊未包含有數(shù)字水印,直接通過上述圖1或者圖2所示實施例更新python腳本即可,本實施例不再詳述。
步驟302,如果新版本數(shù)據(jù)塊包含有數(shù)字水印,根據(jù)數(shù)字水印確定新版本數(shù)據(jù)塊是否具有完整性,如果新版本數(shù)據(jù)塊具有完整性,執(zhí)行步驟303,如果新版本數(shù)據(jù)塊不具有完整性,可以發(fā)出更新錯誤的通知消息,并控制應(yīng)用程序停止腳本更新。
步驟303,如果新版本數(shù)據(jù)塊具有完整性,去除新版本數(shù)據(jù)塊的數(shù)字水印,并通過上述圖1或者圖2所示實施例更新python腳本即可,本實施例不再詳述。
上述步驟301中,在一實施例中,可以通過在新版本數(shù)據(jù)塊中添加另一個標識已確定該新版本數(shù)據(jù)塊是否已經(jīng)添加數(shù)字水印,例如,標識為1時,表示該新版本數(shù)據(jù)塊已經(jīng)添加有數(shù)字水印,標識為0時,表示該新版本數(shù)據(jù)塊未添加數(shù)字水印。
上述步驟302和步驟303中,可以通過現(xiàn)有技術(shù)提供的方法來通過數(shù)字水印確定新版本數(shù)據(jù)塊是否具有完整性,以及去除新版本數(shù)據(jù)塊的數(shù)字水印,本實施例不再詳述。
本實施例在具有上述實施例的有益技術(shù)效果的基礎(chǔ)上,通過數(shù)字水印對新版本數(shù)據(jù)塊的完整性進行水印保護,從而可以確保新版本數(shù)據(jù)塊不會被修改替換,避免被黑客攻擊,進而保證新版本數(shù)據(jù)塊對應(yīng)的原始腳本文件的安全性。
圖4示出了根據(jù)本發(fā)明的示例性實施例四的python腳本的更新方法的流程示意圖;本實施例在上述實施例的基礎(chǔ)上,以如何確定檢測到應(yīng)用程序需要進行python腳本更新為例進行示例性說明,如圖4所示,包括如下步驟:
步驟401,從服務(wù)器獲取需要更新的python腳本對應(yīng)的md5文件。
步驟402,從md5文件中獲取需要更新的python腳本對應(yīng)的第一校驗值,以及確定應(yīng)用程序的需要更新的python腳本對應(yīng)的第二校驗值。
步驟403,當?shù)谝恍r炛岛偷诙r炛挡幌嗤瑫r,確定檢測到應(yīng)用程序需要進行python腳本更新。
在上述步驟401中,在一實施例中,客戶端可以主動從服務(wù)器處獲取需要更新的python腳本對應(yīng)的md5文件,服務(wù)器在生成新版本數(shù)據(jù)塊時,通過哈希算法計算新版本數(shù)據(jù)塊對應(yīng)的第一哈希值,將該第一哈希值存儲在md5文件中。
在上述步驟402和步驟403中,例如,一即時聊天應(yīng)用程序,包括功能a、功能b、功能c,在該即時聊天應(yīng)用程序正在運行的過程中,當從服務(wù)器上獲取到功能a、功能b、功能c各自對應(yīng)的md5文件后,從各自對應(yīng)的md5文件中獲取各自對應(yīng)的第一校驗值,根據(jù)與計算第一校驗值相同的哈希算法計算即時聊天應(yīng)用程序的功能a、功能b、功能c各自正在運行的python腳本對應(yīng)的第二校驗值,當檢測到功能b和功能c各自的第一校驗值和第二校驗值相同時,說明功能b和功能c在服務(wù)器與客戶端的python腳本相同,此時不需要對功能b和功能c各自對應(yīng)的python腳本進行更新,當檢測到 功能a的第一校驗值和第二校驗值不相同時,說明客戶端上的功能a對應(yīng)的python腳本需要更新,通過上述圖1或者圖2實施例即可對功能a對應(yīng)的python腳本進行更新,本實施例不再詳述python腳本的更新過程。
本實施例在具有上述實施例有益技術(shù)效果的基礎(chǔ)上,通過客戶端主動向服務(wù)器獲取python腳本對應(yīng)的md5文件,根據(jù)md5文件在服務(wù)器上的第一校驗值以及客戶端的第二校驗值來確定是否需要對python腳本進行更新,從而可以使客戶端能夠主動自行檢查是否需要更新python腳本,可以使用戶能夠盡快使用到應(yīng)用程序更新后的功能,提高用戶體驗。
圖5示出了根據(jù)本發(fā)明的示例性實施例五的python腳本的更新方法的流程示意圖;本實施例可應(yīng)用在服務(wù)器,如圖5所示,包括如下步驟:
步驟501,確定已更新的python腳本。
步驟502,將已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密。
步驟503,對逐字節(jié)加密后的python腳本進行對稱加密,得到已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊。
在上述步驟501中,例如,當確定需要對應(yīng)用程序的其中一個功能更新時,研發(fā)人員可以編寫該功能對應(yīng)的基于python腳本的邏輯代碼,例如,一即時聊天應(yīng)用程序,包括功能a、功能b、功能c,當研發(fā)人員根據(jù)應(yīng)用程序的需求更新功能a時,可以基于python腳本編寫更新后的功能a對應(yīng)的邏輯代碼,該python腳本即為功能a對應(yīng)的已更新的python腳本,將該已更新的python腳本更新到服務(wù)器上。
當通過上述步驟502和步驟503對已更新的python腳本進行加密后,得到的已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊,該新版本數(shù)據(jù)塊通過加密處理后已經(jīng)不是一個標準的可解析腳本文件,而是以密文方式將新版本數(shù)據(jù)塊保存在服務(wù)器上。
客戶端在接收到新版本數(shù)據(jù)塊后,通過上述圖1-圖4任一實施例提供的更新方法替換成在內(nèi)存中更新腳本數(shù)據(jù)片段,本實施例不再詳述。
本實施例中,通過對已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密,對逐字節(jié)加密后的python腳本進行對稱加密,得到已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊,有利于增強python腳本的安全性和穩(wěn)定性,并可防止腳本出現(xiàn)錯誤的情形下影響后續(xù)更新過程,進而影響客戶端的腳本更新。
圖6示出了根據(jù)本發(fā)明的示例性實施例六的python腳本的更新方法的流程示意圖;本實施例在上述實施例的基礎(chǔ)上,以如何對已更新數(shù)據(jù)添加數(shù)字水印為例進行示例性說明,如圖6所示,包括如下步驟:
步驟601,確定新版本數(shù)據(jù)塊對應(yīng)的數(shù)字水印。
步驟602,將數(shù)字水印添加到新版本數(shù)據(jù)塊中。
步驟603,根據(jù)新版本數(shù)據(jù)塊生成新版本數(shù)據(jù)塊對應(yīng)的第一校驗值。
步驟604,將第一校驗值存儲在新版本數(shù)據(jù)塊對應(yīng)的md5文件中。
上述步驟601和步驟602中,可以通過現(xiàn)有技術(shù)提供的方法將數(shù)字水印添加到新版本數(shù)據(jù)塊中,本實施例不再詳述。
上述步驟603和步驟604中,可以通過現(xiàn)有技術(shù)提供的哈希算法生成新版本數(shù)據(jù)塊對應(yīng)的第一校驗值,并將第一校驗值存儲在新版本數(shù)據(jù)塊對應(yīng)的md5文件中,本實施例不再詳述。
本領(lǐng)域技術(shù)人員可以理解的是,本實施例不對步驟601-步驟604的執(zhí)行順序做限制,也可以通過先執(zhí)行步驟603和步驟604得到md5文件,或者同時執(zhí)行步驟601-步驟602、步驟603-步驟604,從而同時對已更新數(shù)據(jù)添加水印以及生成md5文件。
本實施例在具有上述實施例的有益技術(shù)效果的基礎(chǔ)上,通過數(shù)字水印對新版本數(shù)據(jù)塊的完整性進行水印保護,從而可以確保新版本數(shù)據(jù)塊不會被修改替換,避免被黑客攻擊,進而保證新版本數(shù)據(jù)塊對應(yīng)的原始腳本文件的安全性;通過md5文件中的第一校驗值可以使客戶端主動檢測是否需要對python腳本進行更新。
通過上述實施例可知,本申請可以將所有邏輯功能和代碼寫在python腳本中,并基于解釋型腳本語言python跟應(yīng)用程序的宿主進程進行交互;通過 本地進程來更新和重加載python腳本,即可實現(xiàn)不需要重啟進程亦不需要灰度發(fā)布即可成一次邏輯功能的更新;由于python腳本在出錯的情形下并不會影響應(yīng)用程序的宿主進程的穩(wěn)定性,因此在對python腳本進行更新時不會導(dǎo)致腳本功能出錯。
對應(yīng)于上述的python腳本的更新方法,本申請還提出了圖7所示的根據(jù)本申請的一示例性實施例的客戶端的示意結(jié)構(gòu)圖。請參考圖7,在硬件層面,該客戶端包括第一處理器、內(nèi)部總線、第一網(wǎng)絡(luò)接口、內(nèi)存以及存儲第一處理器可執(zhí)行指令的第一存儲器,當然還可能包括其他業(yè)務(wù)所需要的硬件。
其中,第一網(wǎng)絡(luò)接口,用于當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊;
第一處理器,用于將所述新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段;將所述第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制所述應(yīng)用程序在所述內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將所述第一腳本數(shù)據(jù)片段替換所述第二腳本數(shù)據(jù)片段。
對應(yīng)于上述的python腳本的更新方法,本申請還提出了圖8所示的根據(jù)本申請的一示例性實施例的服務(wù)器的示意結(jié)構(gòu)圖。請參考圖8,在硬件層面,該服務(wù)器包括第二處理器、內(nèi)部總線、第二網(wǎng)絡(luò)接口、內(nèi)存以及存儲第二處理器可執(zhí)行指令的第二存儲器,當然還可能包括其他業(yè)務(wù)所需要的硬件。
其中,第二網(wǎng)絡(luò)接口,用于接收已更新的python腳本;
所述第二處理器,用于將所述已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密;對逐字節(jié)加密后的python腳本進行對稱加密,得到所述已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊,以供客戶端在接收到所述新版本數(shù)據(jù)塊后,將所述新版本數(shù)據(jù)塊通過上述圖1-圖4所示的更新方法替換成內(nèi)存中的待更新的python腳本數(shù)據(jù)塊。
圖9示出了根據(jù)本發(fā)明的示例性實施例一的python腳本的更新裝置的結(jié)構(gòu)示意圖;如圖9所示,該python腳本的更新裝置可應(yīng)用在客戶端,可以包括:第一獲取模塊91、還原模塊92、更新模塊93、啟動模塊94。其中:
第一獲取模塊91,用于當檢測到應(yīng)用程序需要進行python腳本更新時,獲取需要更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊;
還原模塊92,用于將第一獲取模塊91獲取到的新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段;
更新模塊93,用于將還原模塊92還原得到的第一腳本數(shù)據(jù)片段加載至內(nèi)存,控制應(yīng)用程序在內(nèi)存中需要更新的python腳本對應(yīng)的第二腳本數(shù)據(jù)片段暫停執(zhí)行,并將第一腳本數(shù)據(jù)片段替換第二腳本數(shù)據(jù)片段。
圖10示出了根據(jù)本發(fā)明的示例性實施例二的python腳本的更新裝置的結(jié)構(gòu)示意圖;在上述圖9所示實施例的基礎(chǔ)上,如圖10所示,
在一實施例中,還原模塊92包括:
第一確定單元921,用于確定新版本數(shù)據(jù)塊是否為已加密數(shù)據(jù)塊;
解密單元922,用于當?shù)谝淮_定單元921確定新版本數(shù)據(jù)塊為已加密數(shù)據(jù)塊時,根據(jù)與新版本數(shù)據(jù)塊的加密算法相一致的解密算法解密新版本數(shù)據(jù)塊,得到腳本分解數(shù)據(jù);
解析單元923,用于將解密單元922解密得到的腳本分解數(shù)據(jù)解析成可被執(zhí)行的第一腳本數(shù)據(jù)片段;
當?shù)谝淮_定單元921確定新版本數(shù)據(jù)塊為非加密數(shù)據(jù)塊時,還原模塊92將新版本數(shù)據(jù)塊作為腳本分解數(shù)據(jù),并執(zhí)行將新版本數(shù)據(jù)塊還原成可被執(zhí)行的第一腳本數(shù)據(jù)片段的步驟。
在一實施例中,解析單元923包括:
解析子單元(圖中未示),用于通過python提供的接口函數(shù)對腳本分解數(shù)據(jù)進行詞法解析,得到可被執(zhí)行的第一腳本數(shù)據(jù)片段。
在一實施例中,裝置還可包括:
啟動模塊94,用于在更新模塊93將第一腳本數(shù)據(jù)片段替換第二腳本數(shù)據(jù)片段后,啟動內(nèi)存中的第一腳本數(shù)據(jù)片段。
在一實施例中,裝置還可包括:
檢測模塊95,用于檢測下載模塊91下載得到的新版本數(shù)據(jù)塊是否包含 有數(shù)字水??;
第一確定模塊96,用于如果檢測模塊95檢測到新版本數(shù)據(jù)塊包含有數(shù)字水印,根據(jù)數(shù)字水印確定新版本數(shù)據(jù)塊是否具有完整性;
去除模塊97,用于如果第一確定模塊96確定新版本數(shù)據(jù)塊具有完整性,去除新版本數(shù)據(jù)塊的數(shù)字水印。
在一實施例中,裝置還可包括:
第二獲取模塊98,用于從服務(wù)器上獲取的第一獲取模塊91獲取到的新版本數(shù)據(jù)塊對應(yīng)的md5文件;
第三獲取模塊99,用于從第二獲取模塊98獲取到的md5文件中獲取需要更新的python腳本對應(yīng)的第一校驗值,以及確定應(yīng)用程序的需要更新的python腳本對應(yīng)的第二校驗值;
第二確定模塊90,用于當?shù)诙@取模塊99獲取到的第一校驗值和第二校驗值不相同時,確定檢測到應(yīng)用程序需要進行python腳本更新。
圖11示出了根據(jù)本發(fā)明的示例性實施例三的python腳本的更新裝置的結(jié)構(gòu)示意圖;如圖11所示,該python腳本的更新裝置可應(yīng)用在服務(wù)器,可以包括:第三確定模塊111、分解模塊112、加密模塊113。其中:
第三確定模塊111,用于確定已更新的python腳本;
分解模塊112,用于將第三確定模塊111確定的已更新的python腳本按字節(jié)屬性進行分解并逐字節(jié)進行加密;
加密模塊113,用于對分解模塊112逐字節(jié)加密后的python腳本進行對稱加密,得到已更新的python腳本對應(yīng)的新版本數(shù)據(jù)塊。
圖12示出了根據(jù)本發(fā)明的示例性實施例四的python腳本的更新裝置的結(jié)構(gòu)示意圖;在上述圖11所示實施例的基礎(chǔ)上,如圖12所示,裝置還包括:
第四確定模塊114,用于確定加密模塊113加密后得到的新版本數(shù)據(jù)塊對應(yīng)的數(shù)字水??;
添加模塊115,用于將第四確定模塊114確定的數(shù)字水印添加到新版本數(shù)據(jù)塊中。
在一實施例中,裝置還可包括:
生成模塊116,用于根據(jù)加密模塊113加密后得到的新版本數(shù)據(jù)塊生成新版本數(shù)據(jù)塊對應(yīng)的第一校驗值;
存儲模塊117,用于將生成模塊116生成的第一校驗值存儲在新版本數(shù)據(jù)塊對應(yīng)的md5文件中。
上述實施例可見,本申請可以將所有邏輯功能和代碼寫在python腳本中,并基于解釋型腳本語言python跟應(yīng)用程序的宿主進程進行交互;通過本地進程來更新和重加載python腳本,即可實現(xiàn)不需要重啟進程亦不需要灰度發(fā)布即可成一次邏輯功能的更新;由于python腳本在出錯的情形下并不會影響應(yīng)用程序的宿主進程的穩(wěn)定性,因此在對python腳本進行更新時不會導(dǎo)致底層引擎出錯,當更新過程出現(xiàn)問題時可依靠更新引擎再次回滾。
本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請的一般性原理并包括本申請未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權(quán)利要求指出。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本申請保護的范圍之內(nèi)。