一種遠程服務(wù)調(diào)用方法、裝置及系統(tǒng)的制作方法
【專利摘要】本申請?zhí)峁┝诉h程服務(wù)調(diào)用方法、裝置及系統(tǒng),方法及裝置均可應(yīng)用在客戶端及服務(wù)器,客戶端配置多個連接池,每個連接池均各自與一服務(wù)器對應(yīng),當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個服務(wù)器中,確定空閑的目標服務(wù)器,在目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接,當目標長連接為有效狀態(tài)時,利用目標長連接,將服務(wù)調(diào)用請求發(fā)送至與目標服務(wù)器,觸發(fā)目標服務(wù)器調(diào)用與服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)目標服務(wù)器返回調(diào)用結(jié)果,并將調(diào)用結(jié)果發(fā)送至服務(wù)調(diào)用模塊。與現(xiàn)有技術(shù)相比,本發(fā)明中,服務(wù)調(diào)用模塊向遠程服務(wù)器發(fā)送服務(wù)調(diào)用請求,且可以選擇任意一服務(wù)器作為請求對象,提高了服務(wù)調(diào)用的穩(wěn)定性及安全性。
【專利說明】—種遠程服務(wù)調(diào)用方法、裝置及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件【技術(shù)領(lǐng)域】,尤其是一種遠程服務(wù)調(diào)用方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]在軟件領(lǐng)域中,應(yīng)用程序的開發(fā)模式通常為單一運行包模式,即應(yīng)用程序開發(fā)生成的代碼封裝在至少一個工程源碼包內(nèi),而所有的工程源碼包必須在同一運行環(huán)境內(nèi)運行,且均使用同一數(shù)據(jù)庫系統(tǒng)。
[0003]然而,對運行環(huán)境及數(shù)據(jù)庫系統(tǒng)的上述單一性要求,使得應(yīng)用程序的一個服務(wù)調(diào)用模塊在實現(xiàn)功能時,只能調(diào)用本地的服務(wù)實現(xiàn)模塊。也就是說,服務(wù)調(diào)用模塊與服務(wù)實現(xiàn)模塊必須集成在同一臺計算機系統(tǒng)中,當該計算機系統(tǒng)出現(xiàn)問題后,對服務(wù)調(diào)用模塊及服務(wù)實現(xiàn)模塊均產(chǎn)生影響,因此,服務(wù)調(diào)用的穩(wěn)定性較差且安全性較低。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種遠程服務(wù)調(diào)用方法、裝置及系統(tǒng),用以解決現(xiàn)有技術(shù)中服務(wù)調(diào)用的穩(wěn)定性較差且安全性較低的技術(shù)問題。為實現(xiàn)所述目的,本發(fā)明提供的技術(shù)方案如下:
[0005]一種遠程服務(wù)調(diào)用方法,應(yīng)用于客戶端,所述客戶端配置有多個連接池,每個所述連接池均各自與一服務(wù)器對應(yīng),所述方法包括:
[0006]當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器;
[0007]在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接;
[0008]當所述目標長連接為有效狀態(tài)時,利用所述目標長連接,將所述服務(wù)調(diào)用請求發(fā)送至與所述目標服務(wù)器,觸發(fā)所述目標服務(wù)器調(diào)用與所述服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)所述目標服務(wù)器返回所述調(diào)用結(jié)果;
[0009]將所述調(diào)用結(jié)果發(fā)送至所述服務(wù)調(diào)用模塊。
[0010]上述的遠程服務(wù)調(diào)用方法,優(yōu)選地,所述在多個所述服務(wù)器中,確定空閑的目標服務(wù)器,包括:
[0011]利用輪詢算法,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器。
[0012]上述的遠程服務(wù)調(diào)用方法,優(yōu)選地,所述在多個所述服務(wù)器中,確定空閑的目標服務(wù)器,包括:
[0013]在預(yù)先設(shè)置的第一堆棧中,確定空閑的目標服務(wù)器;其中,所述第一堆棧中包含有多個目標服務(wù)器。
[0014]上述的遠程服務(wù)調(diào)用方法,優(yōu)選地,在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接之后,所述方法還包括:
[0015]當所述目標長連接為異常狀態(tài)時,將所述目標服務(wù)器從第一堆棧移至預(yù)先設(shè)置的第二堆棧中;
[0016]當所述目標服務(wù)器對應(yīng)連接池中的任意一長連接為有效狀態(tài)時,將所述目標服務(wù)器從所述第二堆棧移至所述第一堆棧。
[0017]上述的遠程服務(wù)調(diào)用方法,優(yōu)選地,所述在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接,包括:
[0018]利用輪詢算法,在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接。
[0019]上述的遠程服務(wù)調(diào)用方法,優(yōu)選地,在所述將所述調(diào)用結(jié)果發(fā)送至所述應(yīng)用程序之前,還包括:
[0020]當接收到所述目標服務(wù)器返回的調(diào)用結(jié)果時,將所述目標長連接釋放回對應(yīng)的連接池。
[0021]本發(fā)明還提供了一種遠程服務(wù)調(diào)用方法,應(yīng)用于服務(wù)器,所述方法包括:
[0022]當接收到客戶端發(fā)送的服務(wù)調(diào)用請求時,提取所述服務(wù)調(diào)用請求中的服務(wù)名稱及調(diào)用參數(shù);
[0023]依據(jù)所述服務(wù)名稱及調(diào)用參數(shù),調(diào)用所述服務(wù)請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果。
[0024]本發(fā)明還提供了一種遠程服務(wù)調(diào)用裝置,應(yīng)用于客戶端,所述客戶端配置有多個連接池,每個所述連接池均各自與一服務(wù)器對應(yīng),所述裝置包括:
[0025]目標服務(wù)器確定單元,用于當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器;
[0026]目標長連接獲取單元,用于在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接;
[0027]目標服務(wù)調(diào)用單元,用于當所述目標長連接為有效狀態(tài)時,利用所述目標長連接,將所述服務(wù)調(diào)用請求發(fā)送至與所述目標服務(wù)器,觸發(fā)所述目標服務(wù)器調(diào)用與所述服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)所述目標服務(wù)器返回所述調(diào)用結(jié)果;
[0028]調(diào)用結(jié)果返回單元,用于將所述調(diào)用結(jié)果發(fā)送至所述服務(wù)調(diào)用模塊。
[0029]本發(fā)明還提供了一種遠程服務(wù)調(diào)用裝置,應(yīng)用于服務(wù)器,所述方法包括:
[0030]名稱參數(shù)提取單元,用于當接收到客戶端發(fā)送的服務(wù)調(diào)用請求時,提取所述服務(wù)調(diào)用請求中的服務(wù)名稱及調(diào)用參數(shù);
[0031]目標服務(wù)調(diào)用單元,用于依據(jù)所述服務(wù)名稱及調(diào)用參數(shù),調(diào)用所述服務(wù)請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果。
[0032]本發(fā)明還提供了一種遠程服務(wù)調(diào)用系統(tǒng),包括上述應(yīng)用在客戶端的遠程服務(wù)調(diào)用裝置及應(yīng)用在服務(wù)器遠程服務(wù)調(diào)用裝置。
[0033]由以上技術(shù)方案可知,本發(fā)明提供的遠程服務(wù)調(diào)用方法、裝置及系統(tǒng),方法及裝置均可以分別應(yīng)用在客戶端及服務(wù)器,客戶端配置有多個連接池,每個連接池均各自與一服務(wù)器對應(yīng),當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個服務(wù)器中,確定空閑的目標服務(wù)器,在目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接,當目標長連接為有效狀態(tài)時,利用目標長連接,將服務(wù)調(diào)用請求發(fā)送至與目標服務(wù)器,觸發(fā)目標服務(wù)器調(diào)用與服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)目標服務(wù)器返回調(diào)用結(jié)果,并將調(diào)用結(jié)果發(fā)送至服務(wù)調(diào)用模塊。與現(xiàn)有技術(shù)相比,本發(fā)明中,服務(wù)調(diào)用模塊向遠程服務(wù)器發(fā)送服務(wù)調(diào)用請求,且可以選擇任意一服務(wù)器作為請求對象,提高了服務(wù)調(diào)用的穩(wěn)定性及安全性。
【專利附圖】
【附圖說明】
[0034]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0035]圖1為本發(fā)明實施例提供的應(yīng)用在客戶端的遠程服務(wù)調(diào)用方法的流程圖;
[0036]圖2為本發(fā)明實施例提供的應(yīng)用在客戶端的遠程服務(wù)調(diào)用方法的另一流程圖;
[0037]圖3為本發(fā)明實施例提供的應(yīng)用在客戶端的遠程服務(wù)調(diào)用方法的又一流程圖;
[0038]圖4為本發(fā)明實施例提供的應(yīng)用在服務(wù)器的遠程服務(wù)調(diào)用方法的又一流程圖;
[0039]圖5為本發(fā)明實施例提供的應(yīng)用在客戶端的遠程服務(wù)調(diào)用裝置的結(jié)構(gòu)框圖;
[0040]圖6為本發(fā)明實施例提供的應(yīng)用在服務(wù)器的遠程服務(wù)調(diào)用裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0041]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0042]本發(fā)明提供的遠程服務(wù)調(diào)用方法應(yīng)用在客戶端,客戶端配置有多個連接池,每個連接池各自與一個服務(wù)器對應(yīng)。需要說明,本發(fā)明設(shè)置有多個服務(wù)器,每個服務(wù)器均可實現(xiàn)服務(wù)調(diào)用模塊的調(diào)用請求。也就是說,多個服務(wù)器之間互為備份,實現(xiàn)了服務(wù)調(diào)用請求的負載均衡。相較于現(xiàn)有技術(shù)中將應(yīng)用程序的調(diào)用請求實現(xiàn)模塊集成在一臺計算機而言,本實施例可提高服務(wù)調(diào)用的穩(wěn)定性及安全性。
[0043]基于上述提供的客戶端及多個服務(wù)器的系統(tǒng)架構(gòu),本發(fā)明實施例提供了一種遠程服務(wù)調(diào)用方法。參見圖1,其示出了該方法的流程,該流程具體包括:
[0044]步驟SlOl:當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器。
[0045]其中,服務(wù)調(diào)用模塊是客戶端應(yīng)用程序中的一個模塊,當該模塊需要調(diào)用遠程服務(wù)模塊時,生成服務(wù)調(diào)用請求,其中,服務(wù)調(diào)用請求中包含有需要調(diào)用的服務(wù)的名稱及參數(shù)。將服務(wù)調(diào)用請求發(fā)送到本方法的執(zhí)行主體,當本方法的執(zhí)行主體接收到該服務(wù)調(diào)用請求時,需要在設(shè)置的多個服務(wù)器中,查找一個當前處于空閑狀態(tài)的服務(wù)器,確定為目標服務(wù)器。
[0046]步驟S102:在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接。
[0047]其中,在客戶端設(shè)置有多個連接池,每個服務(wù)器均與一個連接池對應(yīng)。且每個連接池內(nèi)均初始化有多個長連接。在確定的目標服務(wù)器對應(yīng)的連接池中,查找一個當前處于空閑狀態(tài)的長連接,用于向該目標服務(wù)器發(fā)送服務(wù)調(diào)用請求。需要說明,空閑的長連接,指的是該長連接并未被任意的其他服務(wù)調(diào)用模塊占用發(fā)送服務(wù)調(diào)用請求。
[0048]步驟S103:當所述目標長連接為有效狀態(tài)時,利用所述目標長連接,將所述服務(wù)調(diào)用請求發(fā)送至與所述目標服務(wù)器,觸發(fā)所述目標服務(wù)器調(diào)用與所述服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)所述目標服務(wù)器返回所述調(diào)用結(jié)果。
[0049]其中,若網(wǎng)絡(luò)或者服務(wù)器出現(xiàn)故障,會導(dǎo)致目標長連接成為不可用狀態(tài)。為了提高服務(wù)調(diào)用請求的成功率,在發(fā)送服務(wù)調(diào)用請求之前,需要確定長連接是否處于有效狀態(tài)。當目標長連接處于有效狀態(tài)時,利用該目標長連接,發(fā)送服務(wù)調(diào)用請求。具體地,檢測目標長連接是否處于有效狀態(tài)的方法可以是,利用該目標長連接向目標服務(wù)器發(fā)送檢測數(shù)據(jù)包,假設(shè)收到目標服務(wù)器的回復(fù),確定該目標長連接處于有效狀態(tài)。
[0050]本實施例中,在發(fā)送服務(wù)調(diào)用請求前,需要將服務(wù)調(diào)用請求進行序列化后封裝在數(shù)據(jù)包中,然后利用目標長連接,將該數(shù)據(jù)包發(fā)送到目標服務(wù)器。目標服務(wù)器上設(shè)置有服務(wù)端組件,當目標服務(wù)器的服務(wù)端組件接收到服務(wù)調(diào)用請求后,實現(xiàn)服務(wù)調(diào)用過程,獲得服務(wù)調(diào)用結(jié)果。
[0051]具體地,目標服務(wù)器將上述序列化后的數(shù)據(jù)包進行反序列化處理,獲得需要調(diào)用的服務(wù)的名稱及參數(shù),依據(jù)該服務(wù)名稱查找到對應(yīng)的服務(wù)執(zhí)行模塊,觸發(fā)該服務(wù)執(zhí)行模塊執(zhí)行服務(wù)調(diào)用,獲得調(diào)用結(jié)果,將該調(diào)用結(jié)果進行序列化后通過長連接返回至本實施例的執(zhí)行主體。
[0052]步驟S104:將所述調(diào)用結(jié)果發(fā)送至所述服務(wù)調(diào)用模塊。
[0053]其中,本實施例的執(zhí)行主體接收到該調(diào)用結(jié)果后,將調(diào)用結(jié)果進行反序列化后,發(fā)送至發(fā)送服務(wù)調(diào)用請求的服務(wù)調(diào)用模塊,完成服務(wù)調(diào)用過程。
[0054]由以上的技術(shù)方案可知,本實施提供的遠程服務(wù)調(diào)用方法,應(yīng)用在客戶端,客戶端設(shè)置有多個連接池,每個連接池均與一個服務(wù)器對應(yīng),設(shè)置的多個服務(wù)器均可完成服務(wù)調(diào)用過程,因此,在發(fā)送服務(wù)調(diào)用請求前,可在設(shè)置的多個服務(wù)器中,確定一個空閑的服務(wù)器。與現(xiàn)有技術(shù)中只設(shè)置一臺用以實現(xiàn)服務(wù)調(diào)用的方式相比,多個服務(wù)器備份的設(shè)置方式增強了服務(wù)調(diào)用的穩(wěn)定性及安全性。
[0055]同時,連接池中初始化有多個長連接,利用長連接將服務(wù)調(diào)用請求發(fā)送至確定出的目標服務(wù)器。然而,現(xiàn)有技術(shù)中,利用短連接實現(xiàn)與目標服務(wù)器的連接。使用短連接的話,客戶端每次需要向服務(wù)器發(fā)送服務(wù)調(diào)用請求前,均需要創(chuàng)建短連接,且每次服務(wù)調(diào)用完成后,需要關(guān)閉短連接。這樣,每次創(chuàng)建短連接均需耗費系統(tǒng)資源,系統(tǒng)開銷較大,并且,會造成服務(wù)調(diào)用的延時。本實施例客戶端使用長連接與服務(wù)器進行數(shù)據(jù)交互,由于長連接是始終與服務(wù)器保持通信的連接,除非服務(wù)器端由于種種原因斷開該連接,因此,客戶端通過創(chuàng)建一次長連接,即可利用該長連接多次發(fā)送服務(wù)調(diào)用請求,系統(tǒng)開銷較小,且服務(wù)調(diào)用效率較高。
[0056]現(xiàn)有技術(shù)中,客戶端具有服務(wù)緩存功能,即客戶端會將服務(wù)執(zhí)行模塊(或者稱之為服務(wù)實現(xiàn)模塊)的內(nèi)存地址緩存在客戶端本地,當客戶端接收到服務(wù)調(diào)用模塊的服務(wù)調(diào)用請求后,首先在本地查找服務(wù)的內(nèi)存地址,并將查找到的內(nèi)存地址包含在生成的服務(wù)調(diào)用請求內(nèi),發(fā)送到服務(wù)器,服務(wù)器直接依據(jù)該內(nèi)存地址確定服務(wù)執(zhí)行模塊在內(nèi)存中的位置,進而觸發(fā)服務(wù)執(zhí)行模塊實現(xiàn)服務(wù)調(diào)用過程。然而,現(xiàn)有技術(shù)中的服務(wù)緩存方法,在服務(wù)器的服務(wù)執(zhí)行模塊的內(nèi)存地址發(fā)生變更后,會造成服務(wù)調(diào)用請求的無效,進而導(dǎo)致服務(wù)調(diào)用的失敗。
[0057]不同的是,本實施例中,接收到的服務(wù)調(diào)用請求中僅包含有服務(wù)名稱及服務(wù)參數(shù),并未包含有服務(wù)執(zhí)行模塊的內(nèi)存地址,而是將該服務(wù)調(diào)用請求發(fā)送到服務(wù)器,服務(wù)器依據(jù)預(yù)先設(shè)置的服務(wù)名稱與服務(wù)執(zhí)行模塊的內(nèi)存地址的對應(yīng)關(guān)系,確定需要調(diào)用的服務(wù)名稱對應(yīng)的服務(wù)執(zhí)行模塊的內(nèi)存地址。由于服務(wù)執(zhí)行模塊的內(nèi)存地址發(fā)生改變后,服務(wù)器會隨之改變內(nèi)存地址與服務(wù)名稱的對應(yīng)關(guān)系,因此,本實施例提供的遠程服務(wù)調(diào)用方法是動態(tài)的,也就是說,并不依賴于預(yù)先存儲在本地的服務(wù)執(zhí)行模塊的內(nèi)存地址,進而可以避免現(xiàn)有技術(shù)中將服務(wù)執(zhí)行模塊的內(nèi)存地址預(yù)先存儲導(dǎo)致的服務(wù)調(diào)用失敗情形。
[0058]需要說明,在上述實施例中,客戶端配置多個服務(wù)器的具體方式為,記錄每個服務(wù)器的IP地址及每個服務(wù)器處理服務(wù)調(diào)用請求的端口號。另外,服務(wù)器設(shè)置有服務(wù)執(zhí)行模塊,服務(wù)器調(diào)用服務(wù)執(zhí)行模塊以實現(xiàn)服務(wù)調(diào)用請求,獲得服務(wù)調(diào)用結(jié)果。服務(wù)執(zhí)行模塊在服務(wù)器內(nèi)存中的地址需要注冊到服務(wù)器運行組件中,注冊過程即是將服務(wù)的名稱與服務(wù)執(zhí)行模塊的內(nèi)存地址建立對應(yīng)關(guān)系,這樣,服務(wù)器接收到服務(wù)調(diào)用請求后,依據(jù)服務(wù)調(diào)用請求中的服務(wù)名稱及建立的對應(yīng)關(guān)系,可以確定服務(wù)執(zhí)行模塊的內(nèi)存地址,進而查找到服務(wù)執(zhí)行模塊的內(nèi)存位置,實現(xiàn)服務(wù)調(diào)用過程。
[0059]可選地,上述實施例中的步驟SlOl在多個所述服務(wù)器中,確定空閑的目標服務(wù)器的具體實現(xiàn)方式可以是:利用輪詢算法,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器。
[0060]具體地,輪詢算法指的是依次判斷各個目標服務(wù)器是否處于空閑狀態(tài)。假設(shè)多個服務(wù)器的標識保存在隊列中,從列首獲取首個服務(wù)器標識,判斷該服務(wù)器標識對應(yīng)的服務(wù)器是否處于空閑狀態(tài),若是,則將該獲取到的服務(wù)器標識對應(yīng)的服務(wù)器確定為目標服務(wù)器,否則,將獲取到的服務(wù)器標識放入隊列的隊尾,依次從隊首獲取下一個服務(wù)器標識,重復(fù)獲取的步驟,直至獲取到空閑的服務(wù)器。若隊列中保存的全部服務(wù)器標識對應(yīng)的服務(wù)器均未處于空閑狀態(tài),將該服務(wù)調(diào)用請求設(shè)置為等待狀態(tài),并實時判斷隊列中是否出現(xiàn)空閑服務(wù)器,當隊列中出現(xiàn)空閑的服務(wù)器后,即將該空閑的服務(wù)器確定為目標服務(wù)器。
[0061]當然,本發(fā)明并不限定確定空閑服務(wù)器的方式是利用輪詢算法,還可以利用權(quán)重算法,即預(yù)先設(shè)置每個服務(wù)器的權(quán)重值,將當前處于空閑狀態(tài)的服務(wù)器中權(quán)重值最大的服務(wù)器確定為目標服務(wù)器。
[0062]請參見圖2,其示出了本發(fā)明實施例提供的遠程服務(wù)調(diào)用方法的另一流程??蛇x地,目標服務(wù)器器的標識可以保存在堆棧中,因此,步驟SlOl在多個所述服務(wù)器中,確定空閑的目標服務(wù)器的具體實現(xiàn)方式可以是步驟S201:當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在預(yù)先設(shè)置的第一堆棧中,確定空閑的目標服務(wù)器;其中,所述第一堆棧中包含有多個目標服務(wù)器。
[0063]另外,在上述說明中可知,目標長連接可能出現(xiàn)異常狀態(tài),此時表明客戶端并不能與目標服務(wù)器正常進行通信,因此,見圖2,在上述實施例提供的遠程服務(wù)調(diào)用方法基礎(chǔ)上,還可以包括:
[0064]步驟S205:當所述目標長連接為異常狀態(tài)時,將所述目標服務(wù)器從第一堆棧移至預(yù)先設(shè)置的第二堆棧中。
[0065]本實施例中,預(yù)先設(shè)置有兩個堆棧,第一堆棧用于存儲連接正常的服務(wù)器,第二堆棧用于存儲連接異常的服務(wù)器。因此,當目標長連接為異常狀態(tài)時,需要將目標長連接對應(yīng)的服務(wù)器即目標服務(wù)器從第一堆棧中移至第二堆棧中,從而可以保證在第一堆棧中確定空閑服務(wù)器時,保證確定出的空閑服務(wù)器均是連接正常的空閑服務(wù)器,進而提高服務(wù)調(diào)用過程的準確性。
[0066]步驟S206:當所述目標服務(wù)器對應(yīng)連接池中的任意一長連接為有效狀態(tài)時,將所述目標服務(wù)器從所述第二堆棧移至所述第一堆棧。
[0067]其中,當目標服務(wù)器對應(yīng)連接池中出現(xiàn)任意一長連接的狀態(tài)為有效狀態(tài)時,表明客戶端與目標服務(wù)器的連接重新變?yōu)檎顟B(tài),因此,將該目服務(wù)器重新放回到第一堆棧中,保證其可以被正常調(diào)用。
[0068]需要說明,當所述目標長連接為異常狀態(tài)時,表明該目標服務(wù)器的連接異常,需要為服務(wù)調(diào)用請求確定新的目標服務(wù)器,即在步驟S205之后,還可以包括:重新返回步驟S201在預(yù)先設(shè)置的第一堆棧中,確定空閑的目標服務(wù)器。可以看出,設(shè)置的多個服務(wù)器之間是互為冗余,出現(xiàn)故障的服務(wù)器并不會影響客戶端服務(wù)調(diào)用請求的實現(xiàn)。
[0069]可選地,上述各個方法實施例中在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接的具體實現(xiàn)過程可以是:利用輪詢算法,在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接。
[0070]具體地,輪詢算法的過程是,依次判斷連接池中的多個長連接是否處于空閑狀態(tài)。即獲取連接池中的一個備選長連接,判斷該備選長連接是否處于空閑狀態(tài),若是,則將該備選長連接確定為目標長連接,否則,獲取連接池中的下一備選長連接,重復(fù)上述判斷過程,直至確定出目標長連接。進而,獲取該確定出的目標長連接進行服務(wù)調(diào)用請求的發(fā)送。
[0071]當然,獲取目標長連接的方式,還可以現(xiàn)有技術(shù)中任意一種方式,本發(fā)明并不做限定。
[0072]上述各個發(fā)明實施例中,需要初始化連接池。初始化連接池,即是在連接池中建立長連接。其中,初始化長連接的數(shù)量可以預(yù)先設(shè)置。當連接池中的所有長連接均處于使用狀態(tài)時,可以隨時創(chuàng)建新的長連接,將創(chuàng)建的新的長連接確定為目標長連接。
[0073]參見圖3,其示出了本發(fā)明實施例提供的遠程服務(wù)調(diào)用方法的又一流程,在上述方法實施例的步驟S104(即本實施中的步驟S305)之前,還可以包括:
[0074]步驟S304:當接收到所述目標服務(wù)器返回的調(diào)用結(jié)果時,將所述目標長連接釋放回對應(yīng)的連接池。
[0075]其中,目標服務(wù)器利用目標長連接將調(diào)用結(jié)果返回,因此,當接收到目標服務(wù)器返回的調(diào)用結(jié)果時,說明該目標長連接變?yōu)榭臻e狀態(tài)。進而,將該目標長連接釋放回對應(yīng)的連接池,即將該目標長連接在對應(yīng)連接池中的狀態(tài)設(shè)置為空閑,以供其他的服務(wù)調(diào)用請求使用。
[0076]對應(yīng)上述各個應(yīng)用在客戶端的遠程服務(wù)調(diào)用方法,參見圖4,本發(fā)明提供了一種遠程服務(wù)調(diào)用方法,應(yīng)用在服務(wù)器,該方法包括:
[0077]步驟S401:當接收到客戶端發(fā)送的服務(wù)調(diào)用請求時,提取所述服務(wù)調(diào)用請求中的服務(wù)名稱及調(diào)用參數(shù)。
[0078]本實施例中,應(yīng)用在服務(wù)器上的遠程服務(wù)調(diào)用方法,并不需要向客戶端返回服務(wù)的內(nèi)存地址,更具體地講,是服務(wù)執(zhí)行模塊的內(nèi)存地址。因此,客戶端并不需要緩存服務(wù)的內(nèi)存地址,發(fā)送服務(wù)調(diào)用請求前,也不需預(yù)先獲知服務(wù)的內(nèi)存地址,因此,服務(wù)調(diào)用請求中并未包含服務(wù)執(zhí)行模塊的內(nèi)存地址。
[0079]步驟S402:依據(jù)所述服務(wù)名稱及調(diào)用參數(shù),調(diào)用所述服務(wù)請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果。
[0080]其中,本實施例的執(zhí)行主體向服務(wù)執(zhí)行模塊發(fā)送調(diào)用請求,以調(diào)用該服務(wù)執(zhí)行模塊,使該服務(wù)調(diào)用模塊實現(xiàn)服務(wù)調(diào)用,獲得服務(wù)調(diào)用結(jié)果。
[0081]與現(xiàn)有技術(shù)相比,本實施例并不需要向客戶端發(fā)送服務(wù)執(zhí)行模塊的內(nèi)存地址,當接收到服務(wù)調(diào)用請求后,直接依據(jù)服務(wù)執(zhí)行模塊的內(nèi)存地址與服務(wù)名稱的對應(yīng)關(guān)系,確定調(diào)用服務(wù)執(zhí)行模塊,并將調(diào)用參數(shù)發(fā)送到該服務(wù)調(diào)用模塊觸發(fā)即可實現(xiàn)服務(wù)調(diào)用。該服務(wù)調(diào)用方法可以避免服務(wù)地址更改后出現(xiàn)的服務(wù)調(diào)用失敗的情形。
[0082]對應(yīng)上述圖1提供的方法實施例,本發(fā)明提供了應(yīng)用在客戶端的遠程服務(wù)調(diào)用裝置。具體說明可以參見上述方法實施例的說明,下文不做贅述。參見圖5,該遠程服務(wù)調(diào)用裝置具體包括:
[0083]目標服務(wù)器確定單元101,用于當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器;
[0084]目標長連接獲取單元102,用于在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接;
[0085]目標服務(wù)調(diào)用單元103,用于當所述目標長連接為有效狀態(tài)時,利用所述目標長連接,將所述服務(wù)調(diào)用請求發(fā)送至與所述目標服務(wù)器,觸發(fā)所述目標服務(wù)器調(diào)用與所述服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)所述目標服務(wù)器返回所述調(diào)用結(jié)果;
[0086]調(diào)用結(jié)果返回單元104,用于將所述調(diào)用結(jié)果發(fā)送至所述服務(wù)調(diào)用模塊。
[0087]需要說明,該服務(wù)調(diào)用裝置設(shè)置在客戶端,可以認為是客戶端組件。該客戶端組件可以將服務(wù)調(diào)用請求發(fā)送到多個服務(wù)器中的任意一空閑服務(wù)器上,實現(xiàn)了服務(wù)調(diào)用的負載均衡。同時,利用長連接技術(shù)發(fā)送服務(wù)調(diào)用請求,可以節(jié)省短連接帶來的系統(tǒng)開銷及時間延遲。
[0088]對應(yīng)上述圖4提供的方法實施例,本發(fā)明提供了應(yīng)用在服務(wù)器的遠程服務(wù)調(diào)用裝置。具體說明可以參見上述方法實施例的說明,下文不做贅述。參見圖6,該遠程服務(wù)調(diào)用裝置具體包括:
[0089]名稱參數(shù)提取單元201,用于當接收到客戶端發(fā)送的服務(wù)調(diào)用請求時,提取所述服務(wù)調(diào)用請求中的服務(wù)名稱及調(diào)用參數(shù);
[0090]目標服務(wù)調(diào)用單元202,用于依據(jù)所述服務(wù)名稱及調(diào)用參數(shù),調(diào)用所述服務(wù)請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果。
[0091]需要說明,該服務(wù)調(diào)用裝置設(shè)置在服務(wù)器,可以認為是服務(wù)端組件。
[0092]本發(fā)明還提供了一種遠程服務(wù)調(diào)用系統(tǒng),包括上述圖5提供的遠程服務(wù)調(diào)用裝置及圖6提供的遠程服務(wù)調(diào)用裝置。該系統(tǒng)可以實現(xiàn)將客戶端的服務(wù)調(diào)用請求發(fā)送到服務(wù)器,服務(wù)器調(diào)用服務(wù)后將調(diào)用結(jié)果返回至客戶端,實現(xiàn)遠程服務(wù)調(diào)用過程。
[0093]需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
[0094]對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【權(quán)利要求】
1.一種遠程服務(wù)調(diào)用方法,其特征在于,應(yīng)用于客戶端,所述客戶端配置有多個連接池,每個所述連接池均各自與一服務(wù)器對應(yīng),所述方法包括: 當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器; 在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接; 當所述目標長連接為有效狀態(tài)時,利用所述目標長連接,將所述服務(wù)調(diào)用請求發(fā)送至與所述目標服務(wù)器,觸發(fā)所述目標服務(wù)器調(diào)用與所述服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)所述目標服務(wù)器返回所述調(diào)用結(jié)果; 將所述調(diào)用結(jié)果發(fā)送至所述服務(wù)調(diào)用模塊。
2.根據(jù)權(quán)利要求1所述的遠程服務(wù)調(diào)用方法,其特征在于,所述在多個所述服務(wù)器中,確定空閑的目標服務(wù)器,包括: 利用輪詢算法,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器。
3.根據(jù)權(quán)利要求1所述的遠程服務(wù)調(diào)用方法,其特征在于,所述在多個所述服務(wù)器中,確定空閑的目標服務(wù)器,包括: 在預(yù)先設(shè)置的第一堆棧中,確定空閑的目標服務(wù)器;其中,所述第一堆棧中包含有多個目標服務(wù)器。
4.根據(jù)權(quán)利要求3所述的遠程服務(wù)調(diào)用方法,其特征在于,在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接之后,所述方法還包括: 當所述目標長連接為異常狀態(tài)時,將所述目標服務(wù)器從第一堆棧移至預(yù)先設(shè)置的第二堆棧中; 當所述目標服務(wù)器對應(yīng)連接池中的任意一長連接為有效狀態(tài)時,將所述目標服務(wù)器從所述第二堆棧移至所述第一堆棧。
5.根據(jù)權(quán)利要求1所述的遠程服務(wù)調(diào)用方法,其特征在于,所述在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接,包括: 利用輪詢算法,在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接。
6.根據(jù)權(quán)利要求1或4所述的遠程服務(wù)調(diào)用方法,其特征在于,在所述將所述調(diào)用結(jié)果發(fā)送至所述應(yīng)用程序之前,還包括: 當接收到所述目標服務(wù)器返回的調(diào)用結(jié)果時,將所述目標長連接釋放回對應(yīng)的連接池。
7.—種遠程服務(wù)調(diào)用方法,其特征在于,應(yīng)用于服務(wù)器,所述方法包括: 當接收到客戶端發(fā)送的服務(wù)調(diào)用請求時,提取所述服務(wù)調(diào)用請求中的服務(wù)名稱及調(diào)用參數(shù); 依據(jù)所述服務(wù)名稱及調(diào)用參數(shù),調(diào)用所述服務(wù)請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果。
8.—種遠程服務(wù)調(diào)用裝置,其特征在于,應(yīng)用于客戶端,所述客戶端配置有多個連接池,每個所述連接池均各自與一服務(wù)器對應(yīng),所述裝置包括: 目標服務(wù)器確定單元,用于當接收到服務(wù)調(diào)用模塊發(fā)送的服務(wù)調(diào)用請求時,在多個所述服務(wù)器中,確定空閑的目標服務(wù)器; 目標長連接獲取單元,用于在所述目標服務(wù)器對應(yīng)的連接池中,獲取空閑的目標長連接; 目標服務(wù)調(diào)用單元,用于當所述目標長連接為有效狀態(tài)時,利用所述目標長連接,將所述服務(wù)調(diào)用請求發(fā)送至與所述目標服務(wù)器,觸發(fā)所述目標服務(wù)器調(diào)用與所述服務(wù)調(diào)用請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果,并觸發(fā)所述目標服務(wù)器返回所述調(diào)用結(jié)果; 調(diào)用結(jié)果返回單元,用于將所述調(diào)用結(jié)果發(fā)送至所述服務(wù)調(diào)用模塊。
9.一種遠程服務(wù)調(diào)用裝置,其特征在于,應(yīng)用于服務(wù)器,所述方法包括: 名稱參數(shù)提取單元,用于當接收到客戶端發(fā)送的服務(wù)調(diào)用請求時,提取所述服務(wù)調(diào)用請求中的服務(wù)名稱及調(diào)用參數(shù); 目標服務(wù)調(diào)用單元,用于依據(jù)所述服務(wù)名稱及調(diào)用參數(shù),調(diào)用所述服務(wù)請求對應(yīng)的服務(wù),以獲得調(diào)用結(jié)果。
10.一種遠程服務(wù)調(diào)用系統(tǒng),其特征在于,包括如權(quán)利要求8所述的遠程服務(wù)調(diào)用裝置及權(quán)利要求9所述的遠程服務(wù)調(diào)用裝置。
【文檔編號】H04L29/08GK104270472SQ201410579012
【公開日】2015年1月7日 申請日期:2014年10月24日 優(yōu)先權(quán)日:2014年10月24日
【發(fā)明者】李七生, 胡斌, 馮維, 姜一維 申請人:杭州高達軟件系統(tǒng)股份有限公司