一種應(yīng)用平臺(tái)與插件間異常隔離的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種應(yīng)用平臺(tái)與插件間異常隔離的方法,包括:應(yīng)用平臺(tái)通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,如果檢測(cè)或接收到代理平臺(tái)出現(xiàn)異常時(shí),將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。本發(fā)明還同時(shí)公開了一種實(shí)現(xiàn)所述方法的系統(tǒng),運(yùn)用該方法和系統(tǒng)可實(shí)現(xiàn)在插件出現(xiàn)異常時(shí)保證應(yīng)用平臺(tái)不受影響而能正常運(yùn)行。
【專利說(shuō)明】一種應(yīng)用平臺(tái)與插件間異常隔離的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Windows系統(tǒng)中插件異常處理【技術(shù)領(lǐng)域】,尤其涉及一種應(yīng)用平臺(tái)與插件間異常隔離的方法及系統(tǒng)。
【背景技術(shù)】
[0002]當(dāng)前,Windows桌面應(yīng)用的內(nèi)容越來(lái)越豐富,程序也越來(lái)越龐大,特別是一些比較成熟的商業(yè)化產(chǎn)品,為了更好的滿足用戶對(duì)程序功能擴(kuò)展的需求,往往將程序主體功能設(shè)計(jì)為應(yīng)用平臺(tái),而擴(kuò)展功能則作為插件,插件被應(yīng)用平臺(tái)調(diào)用來(lái)實(shí)現(xiàn)功能的擴(kuò)展。例如:常見的word、firefox、photoshop等軟件,它們都支持插件擴(kuò)展。由于Windows操作系統(tǒng)以及常見的技術(shù)手段的限制,插件通常被設(shè)計(jì)為dll形式、或0CX形式,然后由應(yīng)用平臺(tái)通過(guò)加載動(dòng)態(tài)鏈接庫(kù)、或加載ActiveX控件等方式進(jìn)行調(diào)用。
[0003]對(duì)于插件,通常是由應(yīng)用平臺(tái)廠商、具有認(rèn)證資質(zhì)的廠商、開源項(xiàng)目、個(gè)人開發(fā)者進(jìn)行開發(fā),對(duì)于前兩種開發(fā)者而言,插件可能會(huì)經(jīng)過(guò)較為嚴(yán)格的測(cè)試過(guò)程后才進(jìn)行發(fā)布;而對(duì)于后兩種開發(fā)者,特別是個(gè)人開發(fā)者,由于時(shí)間、成本以及開發(fā)人員自身的技術(shù)能力和責(zé)任心等原因,插件很難通過(guò)較完善的測(cè)試過(guò)程,就直接發(fā)布了,而這種發(fā)布幾乎是對(duì)用戶不負(fù)責(zé)任的行為,可以說(shuō)是將測(cè)試的工作轉(zhuǎn)嫁給了用戶。
[0004]如上所述,又由于Windows系統(tǒng)的特性,一旦在動(dòng)態(tài)鏈接庫(kù)或ActiveX控件中出現(xiàn)異常,而這種異常又沒有被動(dòng)態(tài)庫(kù)程序或控件程序自身捕獲和處理,則異常將被發(fā)送到上級(jí)調(diào)用者,也就是上文所述的應(yīng)用平臺(tái),更為嚴(yán)重的問(wèn)題是,通常這種異常并不是由應(yīng)用平臺(tái)調(diào)用插件的直接調(diào)用操作導(dǎo)致的,而很可能是插件在運(yùn)行過(guò)程中自身出現(xiàn)的異常導(dǎo)致的,而對(duì)于這種異常,應(yīng)用平臺(tái)無(wú)法在插件調(diào)用入口處進(jìn)行捕獲,只能將異常拋到最外層異常捕獲函數(shù)中去處理,此時(shí)程序整體已經(jīng)崩潰。
[0005]綜上所述,插件的異常將會(huì)導(dǎo)致應(yīng)用平臺(tái)的崩潰。目前,針對(duì)上述問(wèn)題并無(wú)通用的技術(shù)手段來(lái)解決,現(xiàn)有技術(shù)中僅提供了定位異常崩潰原因的技術(shù)。因此,對(duì)于插件的異常影響應(yīng)用平臺(tái)正常運(yùn)行的問(wèn)題,亟待提出一種有效的解決方案。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明的主要目的在于提供一種應(yīng)用平臺(tái)與插件間異常隔離的方法及系統(tǒng),可實(shí)現(xiàn)在插件出現(xiàn)異常時(shí)保證應(yīng)用平臺(tái)不受影響而能正常運(yùn)行。
[0007]為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0008]本發(fā)明提供了一種應(yīng)用平臺(tái)與插件間異常隔離的系統(tǒng),包括:插件;該系統(tǒng)還包括:應(yīng)用平臺(tái)和代理平臺(tái);其中,
[0009]所述應(yīng)用平臺(tái),包括插件管理器,用于與代理平臺(tái)進(jìn)行通信,通過(guò)代理平臺(tái)加載插件,檢測(cè)或接收到代理平臺(tái)出現(xiàn)的異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;
[0010]所述代理平臺(tái),用于與應(yīng)用平臺(tái)進(jìn)行通信,根據(jù)應(yīng)用平臺(tái)的指令加載所述插件,判斷所述插件出現(xiàn)異常時(shí),通知所述應(yīng)用平臺(tái)。
[0011]其中,所述插件管理器通過(guò)代理平臺(tái)加載插件,為:
[0012]所述插件管理器創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,與代理平臺(tái)進(jìn)行通信,將所要調(diào)用的插件的信息通知所述代理平臺(tái);將所述代理平臺(tái)的注冊(cè)信息中的代理平臺(tái)的進(jìn)程ID以及對(duì)應(yīng)的插件的信息存入已加載插件隊(duì)列中,之后通知代理平臺(tái)加載所述插件,以及監(jiān)視代理平臺(tái)的運(yùn)行狀況。
[0013]優(yōu)選的,所述插件管理器包括:插件啟動(dòng)模塊、插件通信模塊和隊(duì)列存儲(chǔ)模塊;其中,
[0014]所述插件啟動(dòng)模塊,用于創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,并將所要調(diào)用的插件的信息通知所述代理平臺(tái);
[0015]所述插件通信模塊,用于執(zhí)行所述應(yīng)用平臺(tái)與所述代理平臺(tái)間的通信,接收所述代理平臺(tái)發(fā)送給所述應(yīng)用平臺(tái)的消息,并向所述代理平臺(tái)發(fā)送控制信息;
[0016]所述隊(duì)列存儲(chǔ)模塊,用于存儲(chǔ)已加載插件隊(duì)列和待加載插件隊(duì)列,所述已加載插件隊(duì)列用于存儲(chǔ)已運(yùn)行的代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息;所述待加載插件隊(duì)列用于存儲(chǔ)等待啟動(dòng)的插件的信息。
[0017]優(yōu)選的,所述代理平臺(tái)包括:插件容器模塊和通信模塊,其中,
[0018]所述插件容器模塊,用于加載所述插件;
[0019]所述通信模塊,用于執(zhí)行所述代理平臺(tái)與所述應(yīng)用平臺(tái)間的通信,接收所述應(yīng)用平臺(tái)發(fā)送的控制信息,并向所述應(yīng)用平臺(tái)發(fā)送信息。
[0020]上述方案中,所述代理平臺(tái),還用于插件正常退出時(shí),通知所述應(yīng)用平臺(tái)所述插件運(yùn)行結(jié)束,并結(jié)束自身的運(yùn)行;
[0021]相應(yīng)的,所述應(yīng)用平臺(tái)中的所述插件管理器,還用于收到所述代理平臺(tái)的通知后,將所述代理平臺(tái)的信息從已加載插件隊(duì)列中刪除。
[0022]上述方案中,所述異常為不可被捕獲的異常時(shí),所述應(yīng)用平臺(tái)中的所述插件管理器,還用于定時(shí)掃描所述已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)的進(jìn)程ID在內(nèi)存映像中不存在,則將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0023]所述插件管理器,還用于定時(shí)向所述代理平臺(tái)發(fā)送心跳包,如果所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未返回心跳響應(yīng),則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0024]所述插件管理器,還用于判斷所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未主動(dòng)向所述應(yīng)用平臺(tái)發(fā)送心跳包,則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;
[0025]相應(yīng)的,所述代理平臺(tái),還用于收到所述插件管理器發(fā)送的心跳包后,在設(shè)置的時(shí)間內(nèi)返回心跳響應(yīng);或者,還用于在設(shè)置的時(shí)間內(nèi)主動(dòng)發(fā)送心跳包。
[0026]優(yōu)選的,所述異常為可被捕獲的異常時(shí),所述應(yīng)用平臺(tái)中的插件管理器,用于通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,確定所述代理平臺(tái)捕獲到插件程序的異常時(shí),將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;
[0027]所述代理平臺(tái),用于根據(jù)應(yīng)用平臺(tái)的指令加載所述插件,如果捕獲到插件程序的異常,則通知所述應(yīng)用平臺(tái)。
[0028]本發(fā)明還提供了一種應(yīng)用平臺(tái)與插件間異常隔離的方法,該方法包括:
[0029]應(yīng)用平臺(tái)通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,如果檢測(cè)或接收到代理平臺(tái)出現(xiàn)異常時(shí),將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
[0030]其中,所述應(yīng)用平臺(tái)通過(guò)所述代理平臺(tái)加載所述插件,包括:
[0031]當(dāng)用戶在應(yīng)用平臺(tái)上啟動(dòng)插件時(shí),應(yīng)用平臺(tái)創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,并將所要調(diào)用的插件信息通知給所述代理平臺(tái);代理平臺(tái)向所述應(yīng)用平臺(tái)進(jìn)行注冊(cè),所述應(yīng)用平臺(tái)將所述注冊(cè)信息中所述代理平臺(tái)的進(jìn)程ID以及對(duì)應(yīng)的插件的信息存入已加載插件隊(duì)列中,之后由代理平臺(tái)加載所述插件;應(yīng)用平臺(tái)監(jiān)視代理平臺(tái)的運(yùn)行狀況。
[0032]優(yōu)選的,該方法還包括:
[0033]如果插件正常退出,則代理平臺(tái)通知應(yīng)用平臺(tái)所述插件運(yùn)行結(jié)束,應(yīng)用平臺(tái)將所述代理平臺(tái)的信息從已加載插件隊(duì)列中刪除,代理平臺(tái)結(jié)束運(yùn)行。
[0034]優(yōu)選的,該方法還包括:
[0035]所述應(yīng)用平臺(tái)定時(shí)掃描所述已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)的進(jìn)程ID在內(nèi)存映像中不存在,則將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0036]所述應(yīng)用平臺(tái)定時(shí)向所述代理平臺(tái)發(fā)送心跳包,如果所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未返回心跳響應(yīng),則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0037]所述應(yīng)用平臺(tái)判斷所述代理平臺(tái)在設(shè)置的時(shí)間未主動(dòng)發(fā)送心跳包,則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
[0038]優(yōu)選的,如果所述異常為可被捕獲的異常時(shí),該方法包括:
[0039]所述應(yīng)用平臺(tái)通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,如果所述代理平臺(tái)捕獲到插件程序的異常,則通知所述應(yīng)用平臺(tái);應(yīng)用平臺(tái)將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
[0040]本發(fā)明提供的應(yīng)用平臺(tái)與插件間異常隔離的方法及系統(tǒng),應(yīng)用平臺(tái)通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,如果所述應(yīng)用平臺(tái)判斷所述代理平臺(tái)出現(xiàn)異常,則應(yīng)用平臺(tái)將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。本發(fā)明采用引入獨(dú)立進(jìn)程的方式,即通過(guò)代理平臺(tái),將應(yīng)用平臺(tái)和插件之間的直接調(diào)用關(guān)系轉(zhuǎn)為間接調(diào)用關(guān)系,從邏輯上實(shí)現(xiàn)了兩者的隔離,可實(shí)現(xiàn)在插件出現(xiàn)異常時(shí)保證應(yīng)用平臺(tái)不受影響而能正常運(yùn)行。
[0041]此外,本發(fā)明還對(duì)插件正常退出、插件出現(xiàn)可被捕獲的異常以及插件出現(xiàn)不可捕獲的插件異常等幾種情況提供了對(duì)應(yīng)的解決方案,為插件異常的預(yù)防與隔離提供了有效途徑。
【專利附圖】
【附圖說(shuō)明】
[0042]圖1為本發(fā)明實(shí)施例所述應(yīng)用平臺(tái)與插件間異常隔離的系統(tǒng)結(jié)構(gòu)示意圖;
[0043]圖2為本發(fā)明實(shí)施例所述應(yīng)用平臺(tái)與插件間異常隔離的方法流程圖示意圖;
[0044]圖3為本發(fā)明實(shí)施例所述應(yīng)用平臺(tái)與插件間異常隔離的具體方法流程圖。
【具體實(shí)施方式】
[0045]為了使本發(fā)明所要解決的技術(shù)問(wèn)題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0046]下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
[0047]圖1為本發(fā)明實(shí)施例所述應(yīng)用平臺(tái)與插件間異常隔離的系統(tǒng)結(jié)構(gòu)示意圖,如圖1所示,包括:應(yīng)用平臺(tái)10、代理平臺(tái)20和已有的插件30 ;其中,
[0048]所述應(yīng)用平臺(tái)10,包括插件管理器101,運(yùn)行于主機(jī)上,用于與代理平臺(tái)進(jìn)行通信,通過(guò)代理平臺(tái)20加載插件30,檢測(cè)或接收到所述代理平臺(tái)出現(xiàn)的異常后,將所述代理平臺(tái)20的信息以及所述對(duì)應(yīng)的插件30的信息從已加載插件隊(duì)列中刪除,將所述插件30的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件30 ;
[0049]這里,所述應(yīng)用平臺(tái)10主要提供應(yīng)用的主體功能,并設(shè)置有擴(kuò)展接口供第三方開發(fā)插件,支持對(duì)插件的安裝、顯示和調(diào)用,所述應(yīng)用平臺(tái)10還具有其他功能,由于為現(xiàn)有技術(shù),此處不再詳述。
[0050]所述代理平臺(tái)20,用于與應(yīng)用平臺(tái)進(jìn)行通信,根據(jù)應(yīng)用平臺(tái)的指令加載所述插件30,判斷所述插件30出現(xiàn)異常時(shí),通知所述應(yīng)用平臺(tái)10 ;
[0051]所述插件30,為擁有特定的擴(kuò)展功能,通常作為所述應(yīng)用平臺(tái)10的功能擴(kuò)展,為用戶提供更豐富的輔助功能或更佳的用戶體驗(yàn)。
[0052]在本發(fā)明的一個(gè)實(shí)施例中,所述代理平臺(tái)20,還用于插件正常退出時(shí),通知所述應(yīng)用平臺(tái)10所述插件30運(yùn)行結(jié)束,并結(jié)束自身的運(yùn)行;
[0053]相應(yīng)的,所述應(yīng)用平臺(tái)10中的所述插件管理器101,還用于收到所述代理平臺(tái)20的通知后,將所述代理平臺(tái)20的信息從已加載插件隊(duì)列中刪除。
[0054]在本發(fā)明的一個(gè)實(shí)施例中,所述異常為不可被捕獲的異常時(shí),所述應(yīng)用平臺(tái)10中的所述插件管理器101,還用于定時(shí)掃描所述已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)20的進(jìn)程ID在內(nèi)存映像中不存在,則將所述代理平臺(tái)20的信息以及所述對(duì)應(yīng)的插件30的信息從已加載插件隊(duì)列中刪除,并將所述插件30的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件30 ;或者,
[0055]所述插件管理器,還用于定時(shí)向所述代理平臺(tái)發(fā)送心跳包,如果所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未返回心跳響應(yīng),則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0056]所述插件管理器,還用于判斷所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未主動(dòng)向所述應(yīng)用平臺(tái)發(fā)送心跳包,則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;
[0057]相應(yīng)的,所述代理平臺(tái),還用于收到所述插件管理器發(fā)送的心跳包后,在設(shè)置的時(shí)間內(nèi)返回心跳響應(yīng);或者,還用于在設(shè)置的時(shí)間內(nèi)主動(dòng)發(fā)送心跳包。
[0058]所述異常為可被捕獲的異常時(shí),所述應(yīng)用平臺(tái)中的插件管理器,用于通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,確定所述代理平臺(tái)捕獲到插件程序的異常時(shí),將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;
[0059]所述代理平臺(tái),用于根據(jù)應(yīng)用平臺(tái)的指令加載所述插件,如果捕獲到插件程序的異常,則通知所述應(yīng)用平臺(tái)。
[0060]其中,所述插件管理器101通過(guò)代理平臺(tái)20加載所述插件30,具體為:
[0061]所述插件管理器101創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)20的實(shí)例,與代理平臺(tái)進(jìn)行通信,將所要調(diào)用的插件30的信息通知所述代理平臺(tái)20 ;將所述代理平臺(tái)20的注冊(cè)信息中的代理平臺(tái)的進(jìn)程ID以及對(duì)應(yīng)的插件的信息存入已加載插件隊(duì)列中,之后通知代理平臺(tái)20加載所述插件30,以及監(jiān)視代理平臺(tái)的運(yùn)行狀況。
[0062]相應(yīng)的,在本發(fā)明的一個(gè)實(shí)施例中,所述插件管理器101還包括:插件啟動(dòng)模塊1011、插件通信模塊1012和隊(duì)列存儲(chǔ)模塊1013 ;其中,
[0063]所述插件啟動(dòng)模塊1011,用于創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)20的實(shí)例,并將所要調(diào)用的插件30的信息通知所述代理平臺(tái)20 ;
[0064]所述插件通信模塊1012,用于執(zhí)行所述應(yīng)用平臺(tái)10與所述代理平臺(tái)20間的通信,接收所述代理平臺(tái)20發(fā)送給所述應(yīng)用平臺(tái)10的消息,并向所述代理平臺(tái)20發(fā)送控制信息;例如:接收代理平臺(tái)20發(fā)送的注冊(cè)信息、心跳包、正常退出通知、以及插件異常通知等消息。
[0065]所述隊(duì)列存儲(chǔ)模塊1013,用于存儲(chǔ)已加載插件隊(duì)列和待加載插件隊(duì)列,所述已加載插件隊(duì)列用于存儲(chǔ)已運(yùn)行的代理平臺(tái)20的信息以及所述對(duì)應(yīng)的插件30的信息;所述待加載插件隊(duì)列用于存儲(chǔ)等待啟動(dòng)的插件的信息。
[0066]在本發(fā)明的一個(gè)實(shí)施例中,所述代理平臺(tái)20還包括:插件容器模塊201和通信模塊202,其中,
[0067]所述插件容器模塊201,用于加載所述插件30 ;
[0068]所述通信模塊202,用于執(zhí)行所述代理平臺(tái)20與所述應(yīng)用平臺(tái)10間的通信,接收所述應(yīng)用平臺(tái)10發(fā)送的控制信息,并向所述應(yīng)用平臺(tái)10發(fā)送信息。例如:向應(yīng)用平臺(tái)10發(fā)送注冊(cè)信息、心跳包、正常退出通知、以及插件異常通知等消息。
[0069]圖2為本發(fā)明實(shí)施例所述應(yīng)用平臺(tái)與插件間異常隔離的方法流程圖示意圖,如圖2所示,包括如下步驟:
[0070]步驟201:在應(yīng)用平臺(tái)與插件間設(shè)置代理平臺(tái);
[0071]其中,所述代理平臺(tái)介于應(yīng)用平臺(tái)與插件之間,它同時(shí)具備應(yīng)用平臺(tái)和插件的部分特性,例如:和插件相似的調(diào)用接口、加載和管理插件的能力等。對(duì)于應(yīng)用平臺(tái)而言,它就是插件;而對(duì)插件而言,它就是應(yīng)用平臺(tái),通過(guò)代理平臺(tái)實(shí)現(xiàn)應(yīng)用平臺(tái)和插件之間的隔離。所述代理平臺(tái)的應(yīng)用見后續(xù)描述。
[0072]步驟202:應(yīng)用平臺(tái)通過(guò)所述代理平臺(tái)加載所述插件;
[0073]具體為:當(dāng)用戶在應(yīng)用平臺(tái)上啟動(dòng)插件時(shí),創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,并將所要調(diào)用的插件信息通知給所述代理平臺(tái);代理平臺(tái)向所述應(yīng)用平臺(tái)進(jìn)行注冊(cè),即:代理平臺(tái)將自身的進(jìn)程ID、通信端口和對(duì)應(yīng)的、負(fù)責(zé)調(diào)用的插件信息通知所述應(yīng)用平臺(tái),所述應(yīng)用平臺(tái)將所述注冊(cè)信息中的所述代理平臺(tái)的進(jìn)程ID以及對(duì)應(yīng)的插件的信息存入已加載插件隊(duì)列中,之后代理平臺(tái)加載所述插件。
[0074]步驟203:如果所述應(yīng)用平臺(tái)檢測(cè)或接收到代理平臺(tái)出現(xiàn)異常后,則應(yīng)用平臺(tái)將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;
[0075]具體為:用戶在使用插件過(guò)程中,若插件出現(xiàn)可被捕獲的異常時(shí),例如:出現(xiàn)內(nèi)存地址非法訪問(wèn)時(shí),則代理平臺(tái)捕獲到所述異常,并發(fā)送消息通知應(yīng)用平臺(tái)當(dāng)前的插件出現(xiàn)異常。應(yīng)用平臺(tái)收到所述代理平臺(tái)發(fā)送的消息后,記錄所述異常信息,并將所述代理平臺(tái)的信息以及所述插件的信息從已加載插件隊(duì)列中刪除,同時(shí)將所述插件的信息添加在待加載插件隊(duì)列中。之后,根據(jù)用戶預(yù)先的配置策略通過(guò)所述代理平臺(tái)重新加載所述插件。當(dāng)然,還可在用戶界面通知用戶“該插件已崩潰,是否重新加載”等。
[0076]在本發(fā)明一個(gè)實(shí)施例中,所述步驟202與步驟203之間還包括:
[0077]如果插件正常退出,則代理平臺(tái)通知應(yīng)用平臺(tái)所述插件運(yùn)行結(jié)束,應(yīng)用平臺(tái)將所述代理平臺(tái)的信息從已加載插件隊(duì)列中刪除,代理平臺(tái)結(jié)束運(yùn)行。
[0078]在本發(fā)明一個(gè)實(shí)施例中,對(duì)于不可被捕獲的異常,所述步驟203還包括:
[0079]所述應(yīng)用平臺(tái)定時(shí)掃描所述已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)的進(jìn)程ID在內(nèi)存映像中不存在,即:將與所述代理平臺(tái)對(duì)應(yīng)的插件識(shí)別為已崩潰的插件,則將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0080]所述應(yīng)用平臺(tái)定時(shí)向所述代理平臺(tái)發(fā)送心跳包,如果所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未返回心跳響應(yīng),則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者,
[0081]所述應(yīng)用平臺(tái)判斷所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未主動(dòng)發(fā)送心跳包,則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
[0082]下面結(jié)合一具體實(shí)施例對(duì)本發(fā)明所述方法和系統(tǒng)進(jìn)行詳細(xì)描述,如圖3所示,實(shí)現(xiàn)流程如下:
[0083]步驟301:用戶從應(yīng)用平臺(tái)上調(diào)用插件;
[0084]步驟302:應(yīng)用平臺(tái)調(diào)用插件管理器檢查已加載插件隊(duì)列中是否包含需要被調(diào)用的插件,若已包含,則直接調(diào)用該插件,流程結(jié)束;否則,執(zhí)行步驟303 ;
[0085]步驟303:若要被調(diào)用的插件尚未啟動(dòng),則插件管理器調(diào)用自身的插件啟動(dòng)模塊,插件啟動(dòng)模塊創(chuàng)建一個(gè)新的代理平臺(tái)的實(shí)例,并將所要調(diào)用的插件通過(guò)啟動(dòng)參數(shù)傳遞給代理平臺(tái);
[0086]步驟304:代理平臺(tái)啟動(dòng)后,向應(yīng)用平臺(tái)注冊(cè),即:將自己的進(jìn)程ID、通信端口和所負(fù)責(zé)調(diào)用的插件通過(guò)通訊模塊發(fā)送給插件管理器中的插件通信模塊,插件管理器在收到代理平臺(tái)的注冊(cè)消息后,將該代理平臺(tái)的進(jìn)程ID及其負(fù)責(zé)調(diào)用的插件程序添加在已加載插件隊(duì)列中;
[0087]步驟305:代理平臺(tái)調(diào)用內(nèi)部的插件容器模塊來(lái)加載所述插件;
[0088]步驟306:代理平臺(tái)判斷所述插件在運(yùn)行過(guò)程中是否正常退出,如果為正常退出,則通訊模塊會(huì)發(fā)送消息給插件通信模塊,告知本代理平臺(tái)將要退出,通知插件管理器將所述代理平臺(tái)的信息從已加載插件隊(duì)列中清除,至此流程結(jié)束;如果為非正常退出,則執(zhí)行步驟 307 ;
[0089]這里,若是由用戶主動(dòng)關(guān)閉插件,則屬于正常退出,若是由于插件程序內(nèi)部異常導(dǎo)致的程序崩潰則是非正常退出。
[0090]步驟307:若插件在使用過(guò)程中出現(xiàn)非正常退出,則所述代理平臺(tái)判斷所述插件是否出現(xiàn)可被捕獲的異常,如果是,則執(zhí)行步驟309,否則,執(zhí)行步驟308 ;
[0091]這里,如果插件在使用過(guò)程中出現(xiàn)非正常退出,可能會(huì)出現(xiàn)兩種情況,即代理平臺(tái)捕獲到了插件異常,以及代理平臺(tái)未捕獲到插件異常(插件有極少數(shù)的異常是無(wú)法捕獲的,如:除零異常)。
[0092]步驟308:對(duì)于代理平臺(tái)未捕獲到的異常,會(huì)導(dǎo)致代理平臺(tái)的崩潰,而對(duì)于應(yīng)用平臺(tái)和插件管理器而言,這種崩潰是不知情的,所以插件管理器通過(guò)定時(shí)掃描已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)的進(jìn)程ID在內(nèi)存映像中是否存在;或者,使用與代理平臺(tái)之間的心跳包等方式,判斷所述代理平臺(tái)是否已經(jīng)出現(xiàn)異常,判斷代理平臺(tái)出現(xiàn)異常后,執(zhí)行步驟310;
[0093]步驟309:對(duì)于代理平臺(tái)可捕獲到的異常,代理平臺(tái)可記錄異常信息,如:所述代理平臺(tái)的進(jìn)程ID、負(fù)責(zé)調(diào)用的插件、崩潰消息等,并將所述異常信息通過(guò)通訊模塊發(fā)送給插件管理器中的插件通信模塊,之后執(zhí)行步驟310 ;
[0094]這里,對(duì)于代理平臺(tái)可捕獲到的異常,同樣會(huì)導(dǎo)致代理平臺(tái)的崩潰,不同的是相對(duì)于未捕獲到的異常而言,能夠即時(shí)對(duì)捕獲到的異常進(jìn)行異常處理。
[0095]步驟310:插件管理器將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,之后執(zhí)行步驟311 ;
[0096]步驟311:根據(jù)預(yù)先的配置重新加載所述插件;
[0097]這里,可以根據(jù)用戶預(yù)先的插件異常處理的設(shè)置重新加載所述插件,即:將待加載插件隊(duì)列中的待加載插件的信息通過(guò)上述步驟所述操作流程重新啟動(dòng)代理平臺(tái),并由代理平臺(tái)加載插件。
[0098] 以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種應(yīng)用平臺(tái)與插件間異常隔離的系統(tǒng),包括:插件;其特征在于,該系統(tǒng)還包括:應(yīng)用平臺(tái)和代理平臺(tái);其中, 所述應(yīng)用平臺(tái),包括插件管理器,用于與代理平臺(tái)進(jìn)行通信,通過(guò)代理平臺(tái)加載插件,檢測(cè)或接收到代理平臺(tái)出現(xiàn)的異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件; 所述代理平臺(tái),用于與應(yīng)用平臺(tái)進(jìn)行通信,根據(jù)應(yīng)用平臺(tái)的指令加載所述插件,判斷所述插件出現(xiàn)異常時(shí),通知所述應(yīng)用平臺(tái)。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述插件管理器通過(guò)代理平臺(tái)加載插件,為: 所述插件管理器創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,與代理平臺(tái)進(jìn)行通信,將所要調(diào)用的插件的信息通知所述代理平臺(tái);將所述代理平臺(tái)的注冊(cè)信息中的代理平臺(tái)的進(jìn)程ID以及對(duì)應(yīng)的插件的信息存入已加載插件隊(duì)列中,之后通知代理平臺(tái)加載所述插件,以及監(jiān)視代理平臺(tái)的運(yùn)行狀況。
3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述插件管理器包括:插件啟動(dòng)模塊、插件通信模塊和隊(duì)列存儲(chǔ)模塊;其中, 所述插件啟動(dòng)模塊,用于創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,并將所要調(diào)用的插件的信息通知所述代理平臺(tái); 所述插件通信模塊,用于執(zhí)行所述應(yīng)用平臺(tái)與所述代理平臺(tái)間的通信,接收所述代理平臺(tái)發(fā)送給所述應(yīng)用平臺(tái)的消息,并向所述代理平臺(tái)發(fā)送控制信息; 所述隊(duì)列存儲(chǔ)模塊,用于存儲(chǔ)已加載插件隊(duì)列和待加載插件隊(duì)列,所述已加載插件隊(duì)列用于存儲(chǔ)已運(yùn)行的代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息;所述待加載插件隊(duì)列用于存儲(chǔ)等待啟動(dòng)的插件的信息。
4.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述代理平臺(tái)包括:插件容器模塊和通信模塊,其中, 所述插件容器模塊,用于加載所述插件; 所述通信模塊,用于執(zhí)行所述代理平臺(tái)與所述應(yīng)用平臺(tái)間的通信,接收所述應(yīng)用平臺(tái)發(fā)送的控制信息,并向所述應(yīng)用平臺(tái)發(fā)送信息。
5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的系統(tǒng),其特征在于,所述代理平臺(tái),還用于插件正常退出時(shí),通知所述應(yīng)用平臺(tái)所述插件運(yùn)行結(jié)束,并結(jié)束自身的運(yùn)行; 相應(yīng)的,所述應(yīng)用平臺(tái)中的所述插件管理器,還用于收到所述代理平臺(tái)的通知后,將所述代理平臺(tái)的信息從已加載插件隊(duì)列中刪除。
6.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的系統(tǒng),其特征在于,所述異常為不可被捕獲的異常時(shí),所述應(yīng)用平臺(tái)中的所述插件管理器,還用于定時(shí)掃描所述已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)的進(jìn)程ID在內(nèi)存映像中不存在,則將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者, 所述插件管理器,還用于定時(shí)向所述代理平臺(tái)發(fā)送心跳包,如果所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未返回心跳響應(yīng),則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者, 所述插件管理器,還用于判斷所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未主動(dòng)向所述應(yīng)用平臺(tái)發(fā)送心跳包,則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件; 相應(yīng)的,所述代理平臺(tái),還用于收到所述插件管理器發(fā)送的心跳包后,在設(shè)置的時(shí)間內(nèi)返回心跳響應(yīng);或者,還用于在設(shè)置的時(shí)間內(nèi)主動(dòng)發(fā)送心跳包。
7.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的系統(tǒng),其特征在于,所述異常為可被捕獲的異常時(shí),所述應(yīng)用平臺(tái)中的插件管理器,用于通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,確定所述代理平臺(tái)捕獲到插件程序的異常時(shí),將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件; 所述代理平臺(tái),用于根據(jù)應(yīng)用平臺(tái)的指令加載所述插件,如果捕獲到插件程序的異常,則通知所述應(yīng)用平臺(tái)。
8.一種應(yīng)用平臺(tái)與插件間異常隔離的方法,其特征在于,該方法包括: 應(yīng)用平臺(tái)通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,如果檢測(cè)或接收到代理平臺(tái)出現(xiàn)異常時(shí),將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述應(yīng)用平臺(tái)通過(guò)所述代理平臺(tái)加載所述插件,包括: 當(dāng)用戶在應(yīng)用平臺(tái)上啟動(dòng)插件時(shí),應(yīng)用平臺(tái)創(chuàng)建一個(gè)或多個(gè)代理平臺(tái)的實(shí)例,并將所要調(diào)用的插件信息通知給所述代理平臺(tái);代理平臺(tái)向所述應(yīng)用平臺(tái)進(jìn)行注冊(cè),所述應(yīng)用平臺(tái)將所述注冊(cè)信息中所述代理平臺(tái)的進(jìn)程ID以及對(duì)應(yīng)的插件的信息存入已加載插件隊(duì)列中,之后由代理平臺(tái)加載所述插件;應(yīng)用平臺(tái)監(jiān)視代理平臺(tái)的運(yùn)行狀況。
10.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,所述應(yīng)用平臺(tái)通過(guò)所述代理平臺(tái)加載所述插件之后,該方法還包括: 如果插件正常退出,則代理平臺(tái)通知應(yīng)用平臺(tái)所述插件運(yùn)行結(jié)束,應(yīng)用平臺(tái)將所述代理平臺(tái)的信息從已加載插件隊(duì)列中刪除,代理平臺(tái)結(jié)束運(yùn)行。
11.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,如果所述異常為不可被捕獲的異常時(shí),該方法還包括: 所述應(yīng)用平臺(tái)定時(shí)掃描所述已加載插件隊(duì)列,判斷所述已加載插件隊(duì)列中所述代理平臺(tái)的進(jìn)程ID在內(nèi)存映像中不存在,則將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者, 所述應(yīng)用平臺(tái)定時(shí)向所述代理平臺(tái)發(fā)送心跳包,如果所述代理平臺(tái)在設(shè)置的時(shí)間內(nèi)未返回心跳響應(yīng),則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件;或者, 所述應(yīng)用平臺(tái)判斷所述代理平臺(tái)在設(shè)置的時(shí)間未主動(dòng)發(fā)送心跳包,則確定所述代理平臺(tái)出現(xiàn)異常,將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,并將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
12.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,如果所述異常為可被捕獲的異常時(shí),該方法包括: 所述應(yīng)用平臺(tái)通過(guò)已設(shè)置的代理平臺(tái)加載所述插件,如果所述代理平臺(tái)捕獲到插件程序的異常,則通知所述應(yīng)用平臺(tái);應(yīng)用平臺(tái)將所述代理平臺(tái)的信息以及所述對(duì)應(yīng)的插件的信息從已加載插件隊(duì)列中刪除,將所述插件的信息添加在待加載插件隊(duì)列中,并根據(jù)預(yù)先的配置重新加載所述插件。
【文檔編號(hào)】G06F11/30GK104424043SQ201310392576
【公開日】2015年3月18日 申請(qǐng)日期:2013年9月2日 優(yōu)先權(quán)日:2013年9月2日
【發(fā)明者】楊志鵬, 段乾, 張曉廷, 孟祥宇 申請(qǐng)人:深圳中興網(wǎng)信科技有限公司