一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法及處理裝置制造方法
【專利摘要】本發(fā)明提供一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法及處理裝置,所述方法包括:應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能;協(xié)議棧進(jìn)行報文處理和/或超時處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,并將生成的消息插入消息隊列;協(xié)議棧進(jìn)行消息處理時,從消息隊列取出消息,調(diào)用應(yīng)用程序相應(yīng)的處理函數(shù)處理,處理完成后清空所述消息隊列。本發(fā)明利用單任務(wù)消息隊列輪詢機(jī)制取代系統(tǒng)調(diào)用,提高了協(xié)議棧的處理性能。
【專利說明】一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法及處理裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理,尤其涉及應(yīng)用程序與協(xié)議棧之間的信息傳輸方法及處理裝置。
【背景技術(shù)】
[0002]目前比較常用的專用協(xié)議棧大致分為兩種,一種是以Iinux或者FreeBSD標(biāo)準(zhǔn)協(xié)議棧為基礎(chǔ)的商用專有協(xié)議棧,另一種是遵守TCP協(xié)議棧標(biāo)準(zhǔn),按照某種系統(tǒng)框架進(jìn)行修改而得出的開源的輕量級協(xié)議棧,最常見的能夠移植商用的就是LWIP,其它協(xié)議棧類似OpenTCP。這些開源的協(xié)議棧大多適用于理論研究以及協(xié)議棧教學(xué)使用,其實現(xiàn)雖然提出一些比較實用的技術(shù)和概念,但缺乏一些具體實現(xiàn)方案,商業(yè)化難度較大。
[0003]對于LWIP協(xié)議棧,該協(xié)議棧使用信號量和“mailbox”機(jī)制來實現(xiàn)應(yīng)用程序與協(xié)議棧之間的信息傳輸,包括數(shù)據(jù)傳遞,事件通知和觸發(fā),協(xié)議棧參數(shù)配置等功能,避免了使用傳統(tǒng)協(xié)議棧使用的系統(tǒng)調(diào)用,從而減少了應(yīng)用程序從內(nèi)核到用戶態(tài)的上下文切換,以減少系統(tǒng)運(yùn)行的資源占用,提高系統(tǒng)性能。
[0004]目前LWIP協(xié)議棧由于其資源消耗小,處理流程實現(xiàn)簡潔而被廣泛使用在嵌入式的數(shù)據(jù)處理終端上,例如圖像采集終端,可視化監(jiān)控終端設(shè)備上。
[0005]現(xiàn)有的各種輕量級協(xié)議棧大多都是把最大限度的減少系統(tǒng)資源消耗作為目標(biāo),因此它們的處理性能一般都比較低。另外,雖然LWIP提出的使用信號量和“mailbox”機(jī)制來代替系統(tǒng)調(diào)用的方案可以在一定程度上提高系統(tǒng)的處理性能,但是信號量和“mailbox”機(jī)制仍然不能完全避免應(yīng)用程序的調(diào)度問題。原因在于信號量和“mailbox”機(jī)制都會引起當(dāng)前進(jìn)程進(jìn)入睡眠狀態(tài),當(dāng)一個進(jìn)程從運(yùn)行狀態(tài)轉(zhuǎn)為睡眠狀態(tài)或者從睡眠狀態(tài)轉(zhuǎn)為運(yùn)行狀態(tài)的時候,CPU都會發(fā)生調(diào)度,以便讓其它進(jìn)程可以得到處理。這種操作是需要一定的系統(tǒng)開銷的。因此LWIP提出的技術(shù)方案雖然避免了系統(tǒng)調(diào)用帶來的性能消耗,但是同時也引入了信號量的睡眠和喚醒,增加了一定的性能消耗。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是提供一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法,在避免系統(tǒng)調(diào)用的同時避免使用信號量,從而避免信號量所引起的睡眠情況和喚醒,減少進(jìn)程調(diào)度造成的性能損失,提高協(xié)議棧的處理性能。
[0007]為了解決上述技術(shù)問題,本發(fā)明提供一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法,所述方法包括:
[0008]應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能;
[0009]所述協(xié)議棧進(jìn)行報文處理和/或超時處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,并將所述生成的消息插入消息隊列;
[0010]所述協(xié)議棧進(jìn)行消息處理時,從所述消息隊列取出消息,調(diào)用應(yīng)用程序相應(yīng)的處理函數(shù)處理,處理完成后清空所述消息隊列。
[0011]較佳地,
[0012]所述協(xié)議棧以單任務(wù)方式,循環(huán)進(jìn)行所述報文處理、超時處理和消息處理,或者循環(huán)進(jìn)行所述超時處理、報文處理和消息處理。
[0013]較佳地,
[0014]所述應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù),包括:
[0015]系統(tǒng)啟動時,在所述回調(diào)函數(shù)表中指定各套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù),回調(diào)函數(shù)是協(xié)議棧提供的內(nèi)部接口函數(shù),用于調(diào)用協(xié)議棧相應(yīng)的功能函數(shù),并將參數(shù)從套接字應(yīng)用編程接口的參數(shù)結(jié)構(gòu)體中取出,傳遞給所述功能函數(shù);
[0016]所述應(yīng)用程序調(diào)用一套接字應(yīng)用編程接口時,該套接字應(yīng)用編程接口從所述回調(diào)函數(shù)表查找對應(yīng)的回調(diào)函數(shù)并通過所述回調(diào)函數(shù)調(diào)用協(xié)議棧相應(yīng)的功能函數(shù)。
[0017]較佳地,
[0018]所述協(xié)議棧為TCP協(xié)議棧,所述協(xié)議棧進(jìn)行報文處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,包括以下情況中的一種或多種:
[0019]在被動建立連接時,收到三次握手中的最后一個確認(rèn)報文后,生成create消息以通知應(yīng)用程序連接建成,所述create消息包含新建連接的連接句柄;
[0020]在主動建立連接時,發(fā)出三次握手的最后一個確認(rèn)報文后,生成tx_clear消息以通知應(yīng)用程序連接可讀寫,所述tx_clear消息包含所述連接的連接句柄;
[0021]在通知所述應(yīng)用程序接口接收數(shù)據(jù)時,生成receive消息,所述receive消息包含接收數(shù)據(jù)所建立連接的連接句柄;
[0022]在通知應(yīng)用程序接口關(guān)閉待關(guān)閉連接時,生成close消息,所述close消息包含所述待關(guān)閉連接的連接句柄。
[0023]較佳地,
[0024]所述協(xié)議棧為TCP協(xié)議棧,所述協(xié)議棧進(jìn)行超時處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,包括:
[0025]如所述協(xié)議棧為一連接設(shè)置的定時器超時,產(chǎn)生reset消息以通知應(yīng)用程序所述連接被異常中止,所述reset消息包含所述連接的連接句柄。
[0026]本發(fā)明還提供一種用于實現(xiàn)協(xié)議棧功能的處理裝置,包括:
[0027]套接字應(yīng)用編程接口,用于提供給應(yīng)用程序調(diào)用,且在被調(diào)用時,基于回調(diào)函數(shù)表調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能;
[0028]報文處理模塊,用于進(jìn)行報文處理,且在出現(xiàn)需要通知應(yīng)用程序的事件時,生成相應(yīng)的消息;
[0029]超時處理模塊,用于在連接超時時,生成相應(yīng)的消息;
[0030]消息管理模塊,用于將所述報文處理模塊和超時處理模塊生成的消息插入消息隊列;
[0031]消息處理模塊,用于從所述消息隊列取出消息,調(diào)用應(yīng)用程序相應(yīng)的處理函數(shù)處理,處理完成后清空所述消息隊列。
[0032]較佳地,[0033]所述的處理裝置還包括:
[0034]調(diào)度模塊,用于以單任務(wù)方式,依次激活所述報文處理模塊、超時處理模塊和消息處理模塊循環(huán)進(jìn)行報文處理、超時處理和消息處理;或者,依次激活所述超時處理模塊、報文處理模塊和消息處理模塊循環(huán)進(jìn)行超時處理、報文處理和消息處理。
[0035]較佳地,
[0036]套接字應(yīng)用編程接口用于提供給應(yīng)用程序調(diào)用,且在被調(diào)用時,基于回調(diào)函數(shù)表調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能包括:
[0037]系統(tǒng)啟動時,在所述回調(diào)函數(shù)表中指定各套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù),回調(diào)函數(shù)是協(xié)議棧提供的內(nèi)部接口函數(shù),用于調(diào)用協(xié)議棧相應(yīng)的功能函數(shù),并將參數(shù)從套接字應(yīng)用編程接口的參數(shù)結(jié)構(gòu)體中取出,傳遞給所述功能函數(shù);
[0038]所述應(yīng)用程序調(diào)用一套接字應(yīng)用編程接口時,該套接字應(yīng)用編程接口從所述回調(diào)函數(shù)表查找對應(yīng)的回調(diào)函數(shù)并通過所述回調(diào)函數(shù)調(diào)用協(xié)議棧相應(yīng)的功能函數(shù)。
[0039]較佳地,
[0040]所述協(xié)議棧為TCP協(xié)議棧;
[0041]所述報文處理模塊進(jìn)行報文處理,且在出現(xiàn)需要通知應(yīng)用程序的事件時,生成相應(yīng)的消息,包括以下情況中的一種或多種:
[0042]在被動建立連接時,收到三次握手中的最后一個確認(rèn)報文后,所述報文處理模塊生成create消息以通知應(yīng)用程序連接建成,所述create消息包含新建連接的連接句柄;
[0043]在主動建立連接時,發(fā)出三次握手的最后一個確認(rèn)報文后,所述報文處理模塊生成tx_clear消息以通知應(yīng)用程序連接可讀寫,所述tx_clear消息包含所述連接的連接句柄;
[0044]在通知所述應(yīng)用程序接口接收數(shù)據(jù)時,所述報文處理模塊生成receive消息,所述receive消息包含接收數(shù)據(jù)所建立連接的連接句柄;
[0045]在通知應(yīng)用程序接口關(guān)閉待關(guān)閉連接時,所述報文處理模塊生成close消息,所述close消息包含所述待關(guān)閉連接的連接句柄。
[0046]較佳地,
[0047]所述協(xié)議棧為TCP協(xié)議棧,所述超時處理模塊在連接超時時,生成相應(yīng)的消息,包括:
[0048]如所述協(xié)議棧為一連接設(shè)置的定時器超時,超時處理模塊產(chǎn)生reset消息以通知應(yīng)用程序所述連接被異常中止,所述reset消息包含所述連接的連接句柄。
[0049]上述方案利用單任務(wù)的消息隊列輪詢機(jī)制取代傳統(tǒng)協(xié)議棧中的系統(tǒng)調(diào)用,避免了運(yùn)行空間在內(nèi)核態(tài)和用戶態(tài)之間的切換以及應(yīng)用程序睡眠情況的發(fā)生,從而減少進(jìn)程調(diào)度造成的性能損失,提高協(xié)議棧及系統(tǒng)的處理性能。
【專利附圖】
【附圖說明】
[0050]圖1是本發(fā)明實施例一的應(yīng)用程序與協(xié)議棧之間的信息傳輸方法的流程圖;
[0051]圖2是本發(fā)明實施例一的用于實現(xiàn)協(xié)議棧功能的處理裝置的結(jié)構(gòu)示意圖;
[0052]圖3是本發(fā)明實施例一的用于實現(xiàn)協(xié)議棧功能的處理裝置中調(diào)度模塊執(zhí)行調(diào)度的不意圖;[0053]圖4是本發(fā)明實施例一的套接字應(yīng)用編程接口的調(diào)用結(jié)構(gòu)的示意圖。
【具體實施方式】
[0054]為使本申請的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對本申請的實施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
[0055]實施例一
[0056]如圖1所示,本實施例提供一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法,包括:
[0057]步驟SlOl:應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能;
[0058]本實施例中,協(xié)議??梢詾門CP協(xié)議棧,應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù)包括:
[0059]系統(tǒng)啟動時,在回調(diào)函數(shù)表中指定各套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù),回調(diào)函數(shù)是協(xié)議棧提供的內(nèi)部接口函數(shù),用于調(diào)用協(xié)議棧相應(yīng)的功能函數(shù),并將參數(shù)從套接字應(yīng)用編程接的參數(shù)結(jié)構(gòu)體中取出,傳遞給功能函數(shù);
[0060]應(yīng)用程序調(diào)用一套接字應(yīng)用編程接時,該套接字應(yīng)用編程接從回調(diào)函數(shù)表查找對應(yīng)的回調(diào)函數(shù)并通過回調(diào)函 數(shù)調(diào)用協(xié)議棧相應(yīng)的功能函數(shù)。
[0061]基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口是TCP協(xié)議棧提供給應(yīng)用程序的應(yīng)用程序編程接口函數(shù),它通過回調(diào)函數(shù)注冊的方式來調(diào)用TCP協(xié)議棧的功能函數(shù)以執(zhí)行應(yīng)用程序需要的功能,它是TCP協(xié)議棧與應(yīng)用程序之間傳遞數(shù)據(jù)和信息的接口。
[0062]如表1所示,基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口是一組預(yù)定義的函數(shù)集合,它提供了 TCP連接創(chuàng)建,設(shè)置,數(shù)據(jù)接收,數(shù)據(jù)發(fā)送,連接關(guān)閉等功能接口函數(shù)。通過系統(tǒng)啟動時注冊回調(diào)函數(shù)表來建立各套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù)和協(xié)議棧之間的聯(lián)系。應(yīng)用程序通過調(diào)用不同的套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù)來傳遞參數(shù)。套接字應(yīng)用編程接口通過查詢回調(diào)函數(shù)表來確定應(yīng)用程序需要的功能函數(shù)入口。
【權(quán)利要求】
1.一種應(yīng)用程序與協(xié)議棧之間的信息傳輸方法,所述方法包括: 應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能; 所述協(xié)議棧進(jìn)行報文處理和/或超時處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,并將所述生成的消息插入消息隊列; 所述協(xié)議棧進(jìn)行消息處理時,從所述消息隊列取出消息,調(diào)用應(yīng)用程序相應(yīng)的處理函數(shù)處理,處理完成后清空所述消息隊列。
2.如權(quán)利要求1所述的信息傳輸方法,其特征在于: 所述協(xié)議棧以單任務(wù)方式,循環(huán)進(jìn)行所述報文處理、超時處理和消息處理,或者循環(huán)進(jìn)行所述超時處理、報文處理和消息處理。
3.如權(quán)利要求1或2所述的信息傳輸方法,其特征在于: 所述應(yīng)用程序使用基于回調(diào)函數(shù)表的套接字應(yīng)用編程接口,調(diào)用協(xié)議棧的功能函數(shù),包括: 系統(tǒng)啟動時,在所述回調(diào)函數(shù)表中指定各套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù),回調(diào)函數(shù)是協(xié)議棧提供的內(nèi)部接口函數(shù),用于調(diào)用協(xié)議棧相應(yīng)的功能函數(shù),并將參數(shù)從套接字應(yīng)用編程接口的參數(shù)結(jié)構(gòu)體中取出,傳遞給所述功能函數(shù); 所述應(yīng)用程序調(diào)用一套接字應(yīng)用編程接口時,該套接字應(yīng)用編程接口從所述回調(diào)函數(shù)表查找對應(yīng)的回調(diào)函數(shù)并通過所述回調(diào)函數(shù)調(diào)用協(xié)議棧相應(yīng)的功能函數(shù)。
4.如權(quán)利要求1或2所述的信息傳輸方法,其特征在于:` 所述協(xié)議棧為TCP協(xié)議棧,所述協(xié)議棧進(jìn)行報文處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,包括以下情況中的一種或多種: 在被動建立連接時,收到三次握手中的最后一個確認(rèn)報文后,生成create消息以通知應(yīng)用程序連接建成,所述create消息包含新建連接的連接句柄; 在主動建立連接時,發(fā)出三次握手的最后一個確認(rèn)報文后,生成tX_Clear消息以通知應(yīng)用程序連接可讀寫,所述tx_clear消息包含所述連接的連接句柄; 在通知所述應(yīng)用程序接口接收數(shù)據(jù)時,生成receive消息,所述receive消息包含接收數(shù)據(jù)所建立連接的連接句柄; 在通知應(yīng)用程序接口關(guān)閉待關(guān)閉連接時,生成close消息,所述close消息包含所述待關(guān)閉連接的連接句柄。
5.如權(quán)利要求1或2所述的信息傳輸方法,其特征在于: 所述協(xié)議棧為TCP協(xié)議棧,所述協(xié)議棧進(jìn)行超時處理時,如出現(xiàn)需要通知應(yīng)用程序的事件,則生成相應(yīng)的消息,包括: 如所述協(xié)議棧為一連接設(shè)置的定時器超時,產(chǎn)生reset消息以通知應(yīng)用程序所述連接被異常中止,所述reset消息包含所述連接的連接句柄。
6.一種用于實現(xiàn)協(xié)議棧功能的處理裝置,其特征在于,包括: 套接字應(yīng)用編程接口,用于提供給應(yīng)用程序調(diào)用,且在被調(diào)用時,基于回調(diào)函數(shù)表調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能; 報文處理模塊,用于進(jìn)行報文處理,且在出現(xiàn)需要通知應(yīng)用程序的事件時,生成相應(yīng)的消息;超時處理模塊,用于在連接超時時,生成相應(yīng)的消息; 消息管理模塊,用于將所述報文處理模塊和超時處理模塊生成的消息插入消息隊列;消息處理模塊,用于從所述消息隊列取出消息,調(diào)用應(yīng)用程序相應(yīng)的處理函數(shù)處理,處理完成后清空所述消息隊列。
7.如權(quán)利要求6所述的處理裝置,其特征在于,還包括: 調(diào)度模塊,用于以單任務(wù)方式,依次激活所述報文處理模塊、超時處理模塊和消息處理模塊循環(huán)進(jìn)行報文處理、超時處理和消息處理;或者,依次激活所述超時處理模塊、報文處理模塊和消息處理模塊循環(huán)進(jìn)行超時處理、報文處理和消息處理。
8.如權(quán)利要求6或7所述的處理裝置,其特征在于: 套接字應(yīng)用編程接口用于提供給應(yīng)用程序調(diào)用,且在被調(diào)用時,基于回調(diào)函數(shù)表調(diào)用協(xié)議棧的功能函數(shù)以執(zhí)行相應(yīng)的功能包括: 系統(tǒng)啟動時,在所述回調(diào)函數(shù)表中指定各套接字應(yīng)用編程接口對應(yīng)的回調(diào)函數(shù),回調(diào)函數(shù)是協(xié)議棧提供的內(nèi)部接口函數(shù),用于調(diào)用協(xié)議棧相應(yīng)的功能函數(shù),并將參數(shù)從套接字應(yīng)用編程接口的參數(shù)結(jié)構(gòu)體中取出,傳遞給所述功能函數(shù); 所述應(yīng)用程序調(diào)用一套接字應(yīng)用編程接口時,該套接字應(yīng)用編程接口從所述回調(diào)函數(shù)表查找對應(yīng)的回調(diào)函數(shù)并通過所述回調(diào)函數(shù)調(diào)用協(xié)議棧相應(yīng)的功能函數(shù)。
9.如權(quán)利要求6或7所述的處理裝置,其特征在于: 所述協(xié)議棧為TCP協(xié)議棧; 所述報文處理模塊進(jìn)行報文處理,且在出現(xiàn)需要通知應(yīng)用程序的事件時,生成相應(yīng)的消息,包括以下情況中的一種或多種: 在被動建立連接時,收到三次握手中的最后一個確認(rèn)報文后,所述報文處理模塊生成create消息以通知應(yīng)用程序連接建成,所述create消息包含新建連接的連接句柄; 在主動建立連接時,發(fā)出三次握手的最后一個確認(rèn)報文后,所述報文處理模塊生成tx_clear消息以通知應(yīng)用程序連接可讀寫,所述tx_clear消息包含所述連接的連接句柄; 在通知所述應(yīng)用程序接口接收數(shù)據(jù)時,所述報文處理模塊生成receive消息,所述receive消息包含接收數(shù)據(jù)所建立連接的連接句柄; 在通知應(yīng)用程序接口關(guān)閉待關(guān)閉連接時,所述報文處理模塊生成close消息,所述close消息包含所述待關(guān)閉連接的連接句柄。
10.如權(quán)利要求6或7所述的處理裝置,其特征在于: 所述協(xié)議棧為TCP協(xié)議棧,所述超時處理模塊在連接超時時,生成相應(yīng)的消息,包括:如所述協(xié)議棧為一連接設(shè)置的定時器超時,超時處理模塊產(chǎn)生reset消息以通知應(yīng)用程序所述連接被異常中止,所 述reset消息包含所述連接的連接句柄。
【文檔編號】G06F9/48GK103888441SQ201410003969
【公開日】2014年6月25日 申請日期:2014年1月3日 優(yōu)先權(quán)日:2014年1月3日
【發(fā)明者】馮璐 申請人:北京太一星晨信息技術(shù)有限公司