專利名稱:一種服務(wù)器之間的數(shù)據(jù)傳輸方法和服務(wù)器的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及通信和計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種服務(wù)器之間的數(shù)據(jù)傳輸方法和服務(wù)器。
背景技術(shù):
在各種網(wǎng)絡(luò)環(huán)境中,經(jīng)常會(huì)涉及服務(wù)器之間的數(shù)據(jù)傳輸。例如,位于前端的服務(wù)器會(huì)將自身的數(shù)據(jù)發(fā)送給后端服務(wù)器,由后端服務(wù)器對(duì)數(shù)據(jù)進(jìn)行處理;后端服務(wù)器在對(duì)數(shù)據(jù)進(jìn)行處理后,還會(huì)將處理過的數(shù)據(jù)返回給前端服務(wù)器。在現(xiàn)有技術(shù)中,一種實(shí)現(xiàn)服務(wù)器之間的數(shù)據(jù)傳輸方法是在服務(wù)器A中,由操作系統(tǒng)將應(yīng)用進(jìn)程中的數(shù)據(jù)拷貝到內(nèi)核中(第一次數(shù)據(jù)拷貝),再通過進(jìn)程之間的通信機(jī)制,如 unix domain機(jī)制,將內(nèi)核中的數(shù)據(jù)發(fā)送給數(shù)據(jù)分發(fā)進(jìn)程;數(shù)據(jù)分發(fā)進(jìn)程收到數(shù)據(jù)后,操作系統(tǒng)分配一個(gè)內(nèi)存空間1,將數(shù)據(jù)拷貝到內(nèi)存空間1中(第二次數(shù)據(jù)拷貝);最后,數(shù)據(jù)分發(fā)進(jìn)程利用發(fā)送(send)機(jī)制將內(nèi)存空間1中的數(shù)據(jù)發(fā)送給服務(wù)器B,其中,當(dāng)數(shù)據(jù)分發(fā)進(jìn)程利用send機(jī)制發(fā)送數(shù)據(jù)時(shí),操作系統(tǒng)分配一個(gè)新的內(nèi)存空間2,并將內(nèi)存空間1中的數(shù)據(jù)拷貝到內(nèi)存空間2中(第三次數(shù)據(jù)拷貝),使一個(gè)數(shù)據(jù)結(jié)構(gòu)skjxiffer與內(nèi)存空間2相映射,將數(shù)據(jù)結(jié)構(gòu)sk_buffer發(fā)送給網(wǎng)卡進(jìn)行驅(qū)動(dòng)。顯然,在上述的整個(gè)數(shù)據(jù)傳輸過程中,需要經(jīng)歷三次數(shù)據(jù)拷貝,比較耗費(fèi)時(shí)間和CPU資源。另一種實(shí)現(xiàn)服務(wù)器之間的數(shù)據(jù)傳輸方法是在服務(wù)器A中,由數(shù)據(jù)分發(fā)進(jìn)程預(yù)測(cè)所有應(yīng)用進(jìn)程中的數(shù)據(jù)需要占用的內(nèi)存空間,并根據(jù)預(yù)測(cè)結(jié)果預(yù)先創(chuàng)建一個(gè)固定大小的共享內(nèi)存,各個(gè)應(yīng)用進(jìn)程將自身數(shù)據(jù)拷貝到共享內(nèi)存上(第一次數(shù)據(jù)拷貝),當(dāng)數(shù)據(jù)分發(fā)進(jìn)程獲知共享內(nèi)存有數(shù)據(jù)到達(dá)時(shí),從共享內(nèi)存中獲取到達(dá)的數(shù)據(jù),利用send機(jī)制將獲取的數(shù)據(jù)發(fā)送給服務(wù)器B(第二次數(shù)據(jù)拷貝)。顯然,在上述的整個(gè)數(shù)據(jù)傳輸過程中,仍需要經(jīng)歷二次數(shù)據(jù)拷貝,盡管相對(duì)于第一個(gè)現(xiàn)有技術(shù)方案來說,一定程度地節(jié)省了時(shí)間和CPU資源。但是,發(fā)明人在研究中發(fā)現(xiàn),在上述第二種數(shù)據(jù)傳輸方法中,由數(shù)據(jù)分發(fā)進(jìn)程和應(yīng)用進(jìn)程共享的共享內(nèi)存是由數(shù)據(jù)分發(fā)進(jìn)程根據(jù)預(yù)測(cè)結(jié)果而預(yù)先創(chuàng)建的一個(gè)大小不可以改變的空間,在實(shí)際應(yīng)用中,如果創(chuàng)建的共享內(nèi)存的空間小于所有應(yīng)用進(jìn)程的數(shù)據(jù)所需的空間,則無法滿足應(yīng)用進(jìn)程的空間需求,導(dǎo)致應(yīng)用進(jìn)程無法正常工作;如果創(chuàng)建的共享內(nèi)存的空間大于所有應(yīng)用進(jìn)程的數(shù)據(jù)所需的空間,又會(huì)浪費(fèi)系統(tǒng)資源。
發(fā)明內(nèi)容
為了解決上述技術(shù)問題,本申請(qǐng)實(shí)施例提供了一種服務(wù)器之間的數(shù)據(jù)傳輸方法和服務(wù)器,以在節(jié)省系統(tǒng)資源的情況下,同時(shí)保證應(yīng)用進(jìn)程正常工作。本申請(qǐng)實(shí)施例公開了如下技術(shù)方案一種服務(wù)器之間的數(shù)據(jù)傳輸方法,包括應(yīng)用進(jìn)程根據(jù)各自對(duì)內(nèi)存空間的需求創(chuàng)建各自的文件,將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存,并將創(chuàng)建的文件句柄發(fā)送給服務(wù)器中的數(shù)據(jù)分發(fā)進(jìn)程,所述文件句柄攜帶共享內(nèi)存信息;應(yīng)用進(jìn)程根據(jù)各自創(chuàng)建的文件的文件句柄攜帶的共享內(nèi)存信息檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中;數(shù)據(jù)分發(fā)進(jìn)程根據(jù)接收的文件句柄檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù);數(shù)據(jù)分發(fā)進(jìn)程將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。一種服務(wù)器,包括共享內(nèi)存創(chuàng)建模塊,用于根據(jù)各個(gè)應(yīng)用進(jìn)程各自對(duì)內(nèi)存空間的需求分別為各個(gè)應(yīng)用進(jìn)程創(chuàng)建各自的文件,將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存,并將創(chuàng)建的文件的文件句柄發(fā)送給剩余空間檢測(cè)模塊和數(shù)據(jù)到達(dá)檢測(cè)模塊,所述文件句柄攜帶共享內(nèi)存信息;剩余空間檢測(cè)模塊,用于根據(jù)接收的文件句柄中攜帶的共享內(nèi)存信息檢測(cè)所述共享內(nèi)存創(chuàng)建模塊創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中;數(shù)據(jù)到達(dá)檢測(cè)模塊,用于根據(jù)接收的文件句柄中攜帶的共享內(nèi)存信息檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù);數(shù)據(jù)傳輸模塊,用于將所述數(shù)據(jù)到達(dá)檢測(cè)模塊獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。由上述實(shí)施例可以看出,由各個(gè)應(yīng)用進(jìn)程在啟動(dòng)時(shí),根據(jù)各自對(duì)內(nèi)存空間的實(shí)際需求創(chuàng)建各自的文件,并將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存。當(dāng)應(yīng)用進(jìn)程檢測(cè)到自身創(chuàng)建的共享內(nèi)存有剩余空間存儲(chǔ)數(shù)據(jù)時(shí),即將數(shù)據(jù)拷貝到各自的共享內(nèi)存中,而當(dāng)數(shù)據(jù)分發(fā)進(jìn)程檢測(cè)到應(yīng)用進(jìn)程的數(shù)據(jù)到達(dá)共享內(nèi)存后,從共享內(nèi)存中獲取應(yīng)用進(jìn)程的數(shù)據(jù),最后將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。因此,在數(shù)據(jù)傳輸過程中,共享內(nèi)存是根據(jù)應(yīng)用進(jìn)程的使用需求設(shè)置,在保證應(yīng)用進(jìn)程正常工作的同時(shí),節(jié)省了系統(tǒng)資源,提高了數(shù)據(jù)傳輸?shù)男屎头?wù)器的性能。
為了更清楚地說明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對(duì)于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本申請(qǐng)一種服務(wù)器之間的數(shù)據(jù)傳輸?shù)姆椒ǖ囊粋€(gè)實(shí)施例的流程圖;圖2為本申請(qǐng)初始時(shí)循環(huán)隊(duì)列的示意圖;圖3為本申請(qǐng)取數(shù)據(jù)后循環(huán)隊(duì)列的示意圖;圖4為本申請(qǐng)插入數(shù)據(jù)后循環(huán)隊(duì)列的示意圖;圖5為本申請(qǐng)一種服務(wù)器之間的數(shù)據(jù)傳輸方法的一個(gè)實(shí)施例的流程圖;圖6為本申請(qǐng)一種對(duì)循環(huán)隊(duì)列的可讀性和可寫性進(jìn)行判斷的步驟的具體流程示意圖;圖7為本申請(qǐng)一種服務(wù)器的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;圖8為本申請(qǐng)一種服務(wù)器的另一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對(duì)本申請(qǐng)實(shí)施例進(jìn)行詳細(xì)描述。
買施例一請(qǐng)參閱圖1,其為本申請(qǐng)一種服務(wù)器之間的數(shù)據(jù)傳輸?shù)姆椒ǖ囊粋€(gè)實(shí)施例的流程圖,該方法包括以下步驟步驟101 應(yīng)用進(jìn)程根據(jù)各自對(duì)內(nèi)存空間的需求創(chuàng)建各自的文件,將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存,并將創(chuàng)建的文件句柄發(fā)送給服務(wù)器中的數(shù)據(jù)分發(fā)進(jìn)程,所述文件句柄攜帶共享內(nèi)存信息;例如,在現(xiàn)有技術(shù)中,是由數(shù)據(jù)分發(fā)進(jìn)程預(yù)先創(chuàng)建一個(gè)固定大小的共享內(nèi)存,然后再分配給不同的應(yīng)用進(jìn)程使用。在本申請(qǐng)中,各個(gè)應(yīng)用進(jìn)程根據(jù)各自對(duì)內(nèi)存空間的需求自己創(chuàng)建各自的文件,如,各個(gè)應(yīng)用進(jìn)程在啟動(dòng)時(shí)根據(jù)各自對(duì)內(nèi)存空間的需求創(chuàng)建各自的文件。當(dāng)創(chuàng)建文件后,將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存,以便應(yīng)用進(jìn)程將自身待處理的數(shù)據(jù)存儲(chǔ)在自己創(chuàng)建的共享內(nèi)存中。如,以三個(gè)應(yīng)用進(jìn)程A、B和C為了進(jìn)行說明,在應(yīng)用進(jìn)程 A、B和C根據(jù)各自對(duì)內(nèi)存空間的需求分別自己創(chuàng)建文件,應(yīng)用進(jìn)程A創(chuàng)建文件1,應(yīng)用進(jìn)程 B創(chuàng)建文件2,應(yīng)用進(jìn)程C創(chuàng)建文件3,應(yīng)用進(jìn)程A再將文件1映射為共享內(nèi)存1 ‘,應(yīng)用進(jìn)程B再將文件2映射為共享內(nèi)存2',應(yīng)用進(jìn)程C再將文件3映射為共享內(nèi)存3'。同時(shí), 三個(gè)應(yīng)用進(jìn)程還將創(chuàng)建的文件句柄發(fā)送給服務(wù)器中的數(shù)據(jù)分發(fā)進(jìn)程,文件句柄中攜帶有共享內(nèi)存信息。該共享內(nèi)存信息可以是共享內(nèi)容的地址和容量等信息。步驟102 應(yīng)用進(jìn)程根據(jù)各自創(chuàng)建的文件的文件句柄攜帶的共享內(nèi)存信息檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中;例如,當(dāng)位于某一個(gè)服務(wù)器上的應(yīng)用進(jìn)程由于各種各樣的使用需要,需要將自身待處理的數(shù)據(jù)發(fā)送給遠(yuǎn)端的服務(wù)器代為處理時(shí),上述三個(gè)應(yīng)用進(jìn)程檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自的數(shù)據(jù),如果有,將各自的數(shù)據(jù)拷貝到各自創(chuàng)建的共享內(nèi)存中。優(yōu)選地,所述應(yīng)用進(jìn)程根據(jù)各自創(chuàng)建的文件的文件句柄攜帶的共享內(nèi)存信息檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中包括應(yīng)用進(jìn)程將各自創(chuàng)建的文件的文件句柄作為參數(shù)傳給接口函數(shù),所述文件句柄攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,所述開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的前一位序號(hào),所述終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào),接口函數(shù)將接收的文件句柄指示的共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,并根據(jù)所述開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷所述循環(huán)隊(duì)列是否可寫,如果可寫,向應(yīng)用進(jìn)程返回共享內(nèi)存有剩余空間的結(jié)果;應(yīng)用進(jìn)程在接收到所述結(jié)果后,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中, 更新所述文件句柄中的開始標(biāo)識(shí)或終止標(biāo)識(shí)。例如,每個(gè)應(yīng)用進(jìn)程在將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存之前,需要檢測(cè)各自的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù)。如,應(yīng)用進(jìn)程可以通過一個(gè)接口函數(shù)實(shí)現(xiàn)上述檢測(cè)過程。在該接口函數(shù)中,需要接收每個(gè)應(yīng)用進(jìn)程傳遞的各自文件的文件句柄這個(gè)參數(shù)。其中,文件句柄中攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存容量,開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的前一位序號(hào),終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào)。同時(shí),接口函數(shù)會(huì)將一個(gè)共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列。如,請(qǐng)參閱圖2,其為本申請(qǐng)初始時(shí)循環(huán)隊(duì)列的示意圖,循環(huán)隊(duì)列中存儲(chǔ)有3個(gè)數(shù)據(jù)datal、data2和data3,其在共享內(nèi)存中的序號(hào)依次為1、2和3。開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)datal的前一位序號(hào),即,開始標(biāo)識(shí)為0,終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)data3的序號(hào),即,終止標(biāo)記為3。當(dāng)從循環(huán)隊(duì)列中取數(shù)據(jù)時(shí),可設(shè)定先讀取開始標(biāo)識(shí)標(biāo)記的值,再將開始標(biāo)識(shí)標(biāo)記的值加1 ;當(dāng)從循環(huán)隊(duì)列中插入數(shù)據(jù)時(shí),可設(shè)定先讀取終止標(biāo)識(shí)標(biāo)記的值,再將終止標(biāo)記的值加1。圖3為本申請(qǐng)取數(shù)據(jù)后循環(huán)隊(duì)列的示意圖,圖4所示為本申請(qǐng)插入數(shù)據(jù)后循環(huán)隊(duì)列的示意圖。當(dāng)接口函數(shù)接收到文件句柄后,即可根據(jù)文件句柄中攜帶的開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷該循環(huán)隊(duì)列是否可寫,如果可寫,向應(yīng)用進(jìn)程返回共享內(nèi)存有剩余空間的結(jié)果。每個(gè)應(yīng)用進(jìn)程在接收到接口函數(shù)返回的可寫的結(jié)果后,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中,同時(shí),還要更新文件句柄中的開始標(biāo)識(shí)或終止標(biāo)識(shí)。步驟103 數(shù)據(jù)分發(fā)進(jìn)程根據(jù)接收的文件句柄檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù);優(yōu)選地,所述數(shù)據(jù)分發(fā)進(jìn)程根據(jù)接收的文件句柄檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)達(dá)到各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取所述應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)包括數(shù)據(jù)分發(fā)進(jìn)程將接收的文件句柄作為參數(shù)傳給接口函數(shù),所述文件句柄攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,所述開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的前一位序號(hào),所述終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào),接口函數(shù)將接收的文件句柄指示的共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,并根據(jù)所述開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷所述循環(huán)隊(duì)列是否可讀,如果可讀,向應(yīng)用進(jìn)程返回有數(shù)據(jù)到達(dá)所述共享內(nèi)存的結(jié)果;數(shù)據(jù)分發(fā)進(jìn)程在接收到所述結(jié)果后,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù),并更新所述文件句柄中攜帶的終止標(biāo)識(shí)或開始標(biāo)識(shí)。例如,數(shù)據(jù)分發(fā)進(jìn)程在從某一個(gè)共享內(nèi)存中獲取某一個(gè)應(yīng)用進(jìn)程待處理的數(shù)據(jù)之前,需要檢測(cè)該應(yīng)用進(jìn)程的數(shù)據(jù)是否到達(dá)該共享內(nèi)存。如,前面提到,一個(gè)應(yīng)用可以通過接口函數(shù)實(shí)現(xiàn)一種檢測(cè)過程。同樣,數(shù)據(jù)分發(fā)進(jìn)程也可以通過一個(gè)接口函數(shù)實(shí)現(xiàn)上述檢測(cè)過程。在該接口函數(shù)中,需要接收數(shù)據(jù)分發(fā)進(jìn)程傳遞的某個(gè)文件的文件句柄。其中,文件句柄中攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存容量。開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的前一位序號(hào),終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào)。同時(shí),接口函數(shù)會(huì)將一個(gè)共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,前面已經(jīng)詳細(xì)地描述了循環(huán)隊(duì)列,故此處不再贅述。當(dāng)接口函數(shù)接收到文件句柄后,即可根據(jù)文件句柄中攜帶的開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷該循環(huán)隊(duì)列是否可讀,如果可讀,向數(shù)據(jù)分發(fā)進(jìn)程返回有數(shù)據(jù)到達(dá)共享內(nèi)存的結(jié)果。當(dāng)數(shù)據(jù)分發(fā)進(jìn)程接收到接口函數(shù)返回的有數(shù)據(jù)到達(dá)共享內(nèi)存的結(jié)果后,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù),同時(shí),并更新文件句柄中的終止標(biāo)識(shí)或開始標(biāo)識(shí)。步驟104 數(shù)據(jù)分發(fā)進(jìn)程將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。其中,所述一服務(wù)器中的數(shù)據(jù)分發(fā)進(jìn)程可以利用現(xiàn)有的send發(fā)送機(jī)制將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器,也可以利用文件發(fā)送(sendfile)發(fā)送機(jī)制將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。利用sendfile機(jī)制將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器包括數(shù)據(jù)分發(fā)進(jìn)程調(diào)用一個(gè)數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)獲取的數(shù)據(jù),且與所述共享內(nèi)存相映射;數(shù)據(jù)分發(fā)進(jìn)程將所述數(shù)據(jù)結(jié)構(gòu)發(fā)送給網(wǎng)卡進(jìn)行驅(qū)動(dòng)。
在Linux系統(tǒng)中包括有兩種發(fā)送機(jī)制send發(fā)送機(jī)制和sendfile發(fā)送機(jī)制。與現(xiàn)有技術(shù)中數(shù)據(jù)分發(fā)進(jìn)程利用send發(fā)送機(jī)制將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器不同,本申請(qǐng)實(shí)施例中數(shù)據(jù)分發(fā)進(jìn)程優(yōu)選利用sendfile發(fā)送機(jī)制將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。其中,數(shù)據(jù)結(jié)構(gòu)直接與共享內(nèi)存相映射,并由網(wǎng)卡驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)。進(jìn)一步的,上述數(shù)據(jù)傳輸方法還包括當(dāng)應(yīng)用進(jìn)程退出時(shí),釋放退出的應(yīng)用進(jìn)程創(chuàng)建的共享內(nèi)存。例如,本申請(qǐng)中的服務(wù)器可通過調(diào)用現(xiàn)有技術(shù)中的flush函數(shù)實(shí)現(xiàn)釋放退出的應(yīng)用進(jìn)程創(chuàng)建的共享內(nèi)存。在調(diào)用flush函數(shù)后,數(shù)據(jù)分發(fā)進(jìn)程關(guān)閉退出的應(yīng)用進(jìn)程所創(chuàng)建的文件的文件句柄,所述flush函數(shù)重載退出的應(yīng)用進(jìn)程創(chuàng)建的文件。當(dāng)某一個(gè)應(yīng)用進(jìn)程A無論是正常還是異常退出時(shí),在調(diào)用flush函數(shù)后,該flush 函數(shù)重載了應(yīng)用進(jìn)程A創(chuàng)建的文件。此時(shí),該應(yīng)用進(jìn)程A創(chuàng)建的文件從文件系統(tǒng)中解除,即, 該應(yīng)用進(jìn)程A創(chuàng)建的文件對(duì)于數(shù)據(jù)分發(fā)進(jìn)程來說是不可見的。數(shù)據(jù)分發(fā)進(jìn)程在調(diào)用flush 函數(shù)后,關(guān)閉應(yīng)用進(jìn)程A創(chuàng)建的文件的文件句柄,例如,當(dāng)數(shù)據(jù)分發(fā)進(jìn)程無法獲取至此文件句柄,應(yīng)用進(jìn)程A創(chuàng)建的文件被刪除,與該文件相映射的共享內(nèi)存被釋放。需要說明的是,本申請(qǐng)實(shí)施例中的“一服務(wù)器”和“遠(yuǎn)端服務(wù)器”僅為互相之間由于各種各樣的應(yīng)用而進(jìn)行數(shù)據(jù)傳輸?shù)膬蓚€(gè)服務(wù)器,而對(duì)其具體指代哪個(gè)服務(wù)器并不進(jìn)行限定。例如,如果“一服務(wù)器”為前端服務(wù)器,則“遠(yuǎn)端服務(wù)器”即為與前端服務(wù)器進(jìn)行數(shù)據(jù)傳輸?shù)暮蠖朔?wù)器,反之亦然。由上述實(shí)施例可以看出,由各個(gè)應(yīng)用進(jìn)程在啟動(dòng)時(shí),根據(jù)各自對(duì)內(nèi)存空間的實(shí)際需求創(chuàng)建各自的文件,并將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存。當(dāng)應(yīng)用進(jìn)程檢測(cè)到自身創(chuàng)建的共享內(nèi)存有剩余空間存儲(chǔ)數(shù)據(jù)時(shí),即將數(shù)據(jù)拷貝到各自的共享內(nèi)存中,而當(dāng)數(shù)據(jù)分發(fā)進(jìn)程檢測(cè)到應(yīng)用進(jìn)程的數(shù)據(jù)到達(dá)共享內(nèi)存后,從共享內(nèi)存中獲取應(yīng)用進(jìn)程的數(shù)據(jù),最后將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。因此,在數(shù)據(jù)傳輸過程中,共享內(nèi)存是根據(jù)應(yīng)用進(jìn)程的使用需求設(shè)置,在保證應(yīng)用進(jìn)程正常工作的同時(shí),節(jié)省了系統(tǒng)資源,提高了數(shù)據(jù)傳輸?shù)男屎头?wù)器的性能。當(dāng)應(yīng)用進(jìn)程退出時(shí),由每個(gè)應(yīng)用進(jìn)程創(chuàng)建的共享內(nèi)存也會(huì)隨之被釋放,節(jié)省了系統(tǒng)資源。另外,當(dāng)本申請(qǐng)實(shí)施例采用sendfile機(jī)制將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器,與現(xiàn)有的 send機(jī)制發(fā)送數(shù)據(jù)相比,可以節(jié)省一次數(shù)據(jù)拷貝過程。進(jìn)一步地節(jié)省了數(shù)據(jù)傳輸時(shí)間和 CPU資源。實(shí)施例二下面以一個(gè)具體的應(yīng)用場(chǎng)景為例詳細(xì)說明服務(wù)器之間的數(shù)據(jù)傳輸方法。其中,在該應(yīng)用場(chǎng)景中,為前端服務(wù)器與后端服務(wù)器之間的數(shù)據(jù)傳輸。另外,為了方便描述過程,假設(shè)前端服務(wù)器有多個(gè)應(yīng)用進(jìn)程進(jìn)行數(shù)據(jù)傳輸,由于各應(yīng)用進(jìn)程均可采用本申請(qǐng)中的方案進(jìn)行數(shù)據(jù)傳輸,因此在本實(shí)施例中僅以其中的一個(gè)應(yīng)用進(jìn)程A進(jìn)行說明。請(qǐng)參閱圖5,其為本申請(qǐng)一種服務(wù)器之間的數(shù)據(jù)傳輸方法的一個(gè)實(shí)施例的流程圖,如圖5所示,所述數(shù)據(jù)傳輸方法包括步驟501 前端服務(wù)器的應(yīng)用進(jìn)程A在啟動(dòng)時(shí),根據(jù)自身對(duì)內(nèi)存空間的需求創(chuàng)建一個(gè)文件1,并將創(chuàng)建的文件1映射為一個(gè)共享內(nèi)存a ;
步驟502 在應(yīng)用進(jìn)程A將自身的數(shù)據(jù)拷貝到共享內(nèi)存a之前,應(yīng)用進(jìn)程將文件1 的文件句柄作為參數(shù)傳給epoll接口函數(shù),由印oil接口函數(shù)判斷共享內(nèi)存a是否可寫;其中,印oil是Linux內(nèi)核為處理大批量句柄而作了改進(jìn)的接口函數(shù),它能顯著減少程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率。epoll接口函數(shù)具有判斷循環(huán)隊(duì)列是否可寫和是否可讀的兩種工作方式。其中,文件句柄中攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一數(shù)據(jù)的第一位序號(hào),終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào)。印oil接口函數(shù)將共享內(nèi)存a作為一個(gè)循環(huán)隊(duì)列,按照判斷循環(huán)隊(duì)列是否可寫的方式,根據(jù)獲得的開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,判斷循環(huán)隊(duì)列是否可寫,即可獲知共享內(nèi)存a是否可寫。,并且,印oil接口函數(shù)根據(jù)獲得的開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,判斷循環(huán)隊(duì)列是否可讀,即可獲知共享內(nèi)存a是否可讀。下面將一同說明epoll接口函數(shù)根據(jù)獲得的開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷循環(huán)隊(duì)列是否可讀是否可寫的具體步驟。請(qǐng)參閱圖6,其為本申請(qǐng)中對(duì)循環(huán)隊(duì)列的可讀性和可寫性進(jìn)行判斷的步驟的優(yōu)選流程示意圖,其中,在初始狀態(tài)下,終止標(biāo)識(shí)標(biāo)記的序號(hào)大于開始標(biāo)識(shí)標(biāo)記的序號(hào),該過程包括步驟601 獲取文件1的文件句柄中的開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存容量;步驟602 判斷開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)是否大于終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù),如果是, 進(jìn)入步驟603,如果否,進(jìn)入步驟604 ;步驟603 當(dāng)開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)大于終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)時(shí),判斷開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)與終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)之差是否大于1,如果是,進(jìn)入步驟605,如果否, 進(jìn)入步驟606 ;步驟604 當(dāng)開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)小于或等于終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)時(shí),判斷終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)與開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)之差是否大于1,如果是,進(jìn)入步驟607, 如果否,進(jìn)入步驟608 ;步驟605 判定循環(huán)隊(duì)列可寫,進(jìn)入步驟610 ;步驟606 判斷終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)加上共享內(nèi)存的容量再減去1后的值是否大于開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù),如果是,進(jìn)入步驟614,如果否,進(jìn)入步驟613 ;步驟607 判定循環(huán)隊(duì)列可讀,進(jìn)入步驟609 ;步驟608 當(dāng)判定循環(huán)隊(duì)列可讀時(shí),判斷開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)加上共享內(nèi)存的容量再減去1后是否大于終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù),如果是,進(jìn)入步驟611,如果否,進(jìn)入步驟 614 ;步驟609 當(dāng)判定循環(huán)隊(duì)列可讀時(shí),判斷開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)加上共享內(nèi)存的容量再減去1后是否大于終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù),如果是,進(jìn)入步驟612,如果否,進(jìn)入步驟 613 ;步驟610 判斷終止標(biāo)識(shí)標(biāo)記的序號(hào)數(shù)加上共享內(nèi)存的容量再減去1后的值是否大于開始標(biāo)識(shí)標(biāo)記的序號(hào)數(shù),如果是,進(jìn)入步驟611,如果否,進(jìn)入步驟612;步驟611 判定循環(huán)隊(duì)列既可讀又可讀,進(jìn)入步驟615 ;步驟612 判定循環(huán)隊(duì)列只可寫不可讀,進(jìn)入步驟615 ;
步驟613,判定循環(huán)隊(duì)列不可讀不可寫,進(jìn)入步驟615 ;步驟614,判定循環(huán)隊(duì)列只可讀不可寫,進(jìn)入步驟615 ;步驟615,返回判定結(jié)果,即分別對(duì)應(yīng)返回步驟611 614中的判定結(jié)果,結(jié)束流程。需要說明的是,上述步驟606和步驟610,以及步驟608和步驟609的判定內(nèi)容均分別相同,為清楚表述可讀性和可寫性進(jìn)行判斷的步驟才將其分開描述,本申請(qǐng)實(shí)施例中也可將其合并。通過執(zhí)行上述過程,epoll接口函數(shù)向應(yīng)用進(jìn)程返回循環(huán)隊(duì)列是否可寫的判定結(jié)果,或者,向數(shù)據(jù)分發(fā)進(jìn)程返回循環(huán)隊(duì)列是否可讀的判定結(jié)果。應(yīng)用進(jìn)程根據(jù)循環(huán)隊(duì)列是否可寫執(zhí)行對(duì)應(yīng)的數(shù)據(jù)寫入操作。數(shù)據(jù)分發(fā)進(jìn)程根據(jù)循環(huán)隊(duì)列是否可讀執(zhí)行對(duì)應(yīng)的數(shù)據(jù)獲取操作。步驟503 當(dāng)應(yīng)用進(jìn)程A從印oil接口函數(shù)返回的結(jié)果獲知共享內(nèi)存a可寫后,將數(shù)據(jù)拷貝到共享內(nèi)存a中;步驟504 前端服務(wù)器的數(shù)據(jù)分發(fā)進(jìn)程將文件1的文件句柄作為參數(shù)傳給印oil 接口函數(shù),由印oil接口函數(shù)判斷共享內(nèi)存a是否可讀;其中,印oil接口函數(shù)判斷共享內(nèi)存a是否可讀已經(jīng)包括在附圖6所示流程中,故此處不再贅述。的判斷結(jié)果。步驟505:當(dāng)數(shù)據(jù)分發(fā)進(jìn)程從epoll接口函數(shù)返回的結(jié)果獲知共享內(nèi)存a可讀后, 從共享內(nèi)存a中獲取應(yīng)用進(jìn)程A的數(shù)據(jù);步驟506 數(shù)據(jù)分發(fā)進(jìn)程利用sendfile機(jī)制將獲取的數(shù)據(jù)發(fā)送給后端服務(wù)器。在實(shí)施例一中,已經(jīng)對(duì)數(shù)據(jù)分發(fā)進(jìn)程利用sendfile機(jī)制發(fā)送數(shù)據(jù)的過程已經(jīng)進(jìn)行了詳細(xì)地描述,故此處不再贅述。當(dāng)應(yīng)用進(jìn)程退出時(shí),由每個(gè)應(yīng)用進(jìn)程創(chuàng)建的共享內(nèi)存也會(huì)隨之被釋放,節(jié)省了系統(tǒng)資源。由上述實(shí)施例可以看出,由各個(gè)應(yīng)用進(jìn)程開始運(yùn)行時(shí),根據(jù)各自對(duì)內(nèi)存空間的實(shí)際需求創(chuàng)建各自的文件,并將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存。當(dāng)應(yīng)用進(jìn)程檢測(cè)到自身創(chuàng)建的共享內(nèi)存有剩余空間存儲(chǔ)數(shù)據(jù)時(shí),即將數(shù)據(jù)拷貝到各自的共享內(nèi)存中,而當(dāng)數(shù)據(jù)分發(fā)進(jìn)程檢測(cè)到應(yīng)用進(jìn)程的數(shù)據(jù)到達(dá)共享內(nèi)存后,從共享內(nèi)存中獲取應(yīng)用進(jìn)程的數(shù)據(jù),最后通過senfile機(jī)制將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。在數(shù)據(jù)傳輸過程中,由于共享內(nèi)存是根據(jù)應(yīng)用進(jìn)程的使用需求設(shè)置的,因此在保證應(yīng)用進(jìn)程正常工作的同時(shí),節(jié)省了系統(tǒng)資源,提高了數(shù)據(jù)傳輸?shù)男屎头?wù)器的性能。另外,本申請(qǐng)實(shí)施例采用sendfile機(jī)制將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器,與現(xiàn)有的send 機(jī)制發(fā)送數(shù)據(jù)相比,可以節(jié)省一次數(shù)據(jù)拷貝過程。進(jìn)一步節(jié)省了數(shù)據(jù)傳輸?shù)臅r(shí)間和CPU資源。如下表所示,將本申請(qǐng)的數(shù)據(jù)傳輸方法所產(chǎn)生的傳輸性能與本申請(qǐng)背景技術(shù)中的第二個(gè)數(shù)據(jù)傳輸方法所產(chǎn)生的傳輸性能進(jìn)行對(duì)比發(fā)現(xiàn),本申請(qǐng)的傳輸性能優(yōu)于本申請(qǐng)背景技術(shù)中的第二個(gè)數(shù)據(jù)傳輸方法的性能。并且,可看出,對(duì)于大的數(shù)據(jù),本申請(qǐng)能夠顯著提高每秒查詢率(Queries-per-seconcbQPQ。QPS是對(duì)一個(gè)特定的查詢服務(wù)器在規(guī)定時(shí)間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn),在因特網(wǎng)上,作為服務(wù)器的機(jī)器的性能經(jīng)常用每秒查詢率來衡量。
權(quán)利要求
1.一種服務(wù)器之間的數(shù)據(jù)傳輸方法,其特征在于,包括應(yīng)用進(jìn)程根據(jù)各自對(duì)內(nèi)存空間的需求創(chuàng)建各自的文件,將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存,并將創(chuàng)建的文件句柄發(fā)送給服務(wù)器中的數(shù)據(jù)分發(fā)進(jìn)程,所述文件句柄攜帶共享內(nèi)存 信息;應(yīng)用進(jìn)程根據(jù)各自創(chuàng)建的文件的文件句柄攜帶的共享內(nèi)存信息檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中;數(shù)據(jù)分發(fā)進(jìn)程根據(jù)接收的文件句柄檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù);數(shù)據(jù)分發(fā)進(jìn)程將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。
2.根據(jù)權(quán)利要求1所述的服務(wù)器之間的數(shù)據(jù)傳輸方法,其特征在于,所述應(yīng)用進(jìn)程根據(jù)各自創(chuàng)建的文件的文件句柄攜帶的共享內(nèi)存信息檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存包括應(yīng)用進(jìn)程將各自創(chuàng)建的文件的文件句柄作為參數(shù)傳給接口函數(shù),所述文件句柄攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,所述開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的前一位序號(hào),所述終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào),接口函數(shù)將接收的文件句柄指示的共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,并根據(jù)所述開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷所述循環(huán)隊(duì)列是否可寫,如果可寫,向應(yīng)用進(jìn)程返回共享內(nèi)存有剩余空間的結(jié)果;應(yīng)用進(jìn)程在接收到所述結(jié)果后,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中,更新所述文件句柄中的開始標(biāo)識(shí)或終止標(biāo)識(shí)。
3.根據(jù)權(quán)利要求1所述的服務(wù)器之間的數(shù)據(jù)傳輸方法,其特征在于,所述數(shù)據(jù)分發(fā)進(jìn)程根據(jù)接收的文件句柄檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)包括數(shù)據(jù)分發(fā)進(jìn)程將接收的文件句柄作為參數(shù)傳給接口函數(shù),所述文件句柄攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,所述開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的前一位序號(hào), 所述終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào),接口函數(shù)將接收的文件句柄指示的共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,并根據(jù)所述開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷所述循環(huán)隊(duì)列是否可讀,如果可讀,向應(yīng)用進(jìn)程返回有數(shù)據(jù)到達(dá)所述共享內(nèi)存的結(jié)果;數(shù)據(jù)分發(fā)進(jìn)程在接收到所述結(jié)果后,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù),并更新所述文件句柄中攜帶的終止標(biāo)識(shí)或開始標(biāo)識(shí)。
4.根據(jù)權(quán)利要求1所述的服務(wù)器之間的數(shù)據(jù)傳輸方法,其特征在于,所述數(shù)據(jù)分發(fā)進(jìn)程將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器包括數(shù)據(jù)分發(fā)進(jìn)程調(diào)用一個(gè)數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)獲取的數(shù)據(jù),且與所述共享內(nèi)存相映射;數(shù)據(jù)分發(fā)進(jìn)程將所述數(shù)據(jù)結(jié)構(gòu)發(fā)送給網(wǎng)卡進(jìn)行驅(qū)動(dòng)。
5.根據(jù)權(quán)利要求1-4任意一項(xiàng)所述的服務(wù)器之間的數(shù)據(jù)傳輸方法,其特征在于,還包括當(dāng)應(yīng)用進(jìn)程退出時(shí),釋放退出的應(yīng)用進(jìn)程創(chuàng)建的共享內(nèi)存。
6.一種服務(wù)器,其特征在于,包括共享內(nèi)存創(chuàng)建模塊,用于根據(jù)各個(gè)應(yīng)用進(jìn)程各自對(duì)內(nèi)存空間的需求分別為各個(gè)應(yīng)用進(jìn)程創(chuàng)建各自的文件,將創(chuàng)建的文件映射為一個(gè)共享內(nèi)存,并將創(chuàng)建的文件的文件句柄發(fā)送給剩余空間檢測(cè)模塊和數(shù)據(jù)到達(dá)檢測(cè)模塊,所述文件句柄攜帶共享內(nèi)存信息;剩余空間檢測(cè)模塊,用于根據(jù)接收的文件句柄中攜帶的共享內(nèi)存信息檢測(cè)所述共享內(nèi)存創(chuàng)建模塊創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中;數(shù)據(jù)到達(dá)檢測(cè)模塊,用于根據(jù)接收的文件句柄中攜帶的共享內(nèi)存信息檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù);數(shù)據(jù)傳輸模塊,用于將所述數(shù)據(jù)到達(dá)檢測(cè)模塊獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。
7.根據(jù)權(quán)利要求6所述的服務(wù)器,其特征在于,所述剩余空間檢測(cè)模塊包括第一接口模塊,用于接收所述共享內(nèi)存創(chuàng)建模塊發(fā)送的文件句柄,將接收的文件句柄指示的共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,并根據(jù)所述開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷所述循環(huán)隊(duì)列是否可寫,如果可寫,向數(shù)據(jù)拷貝模塊返回共享內(nèi)存有剩余空間的結(jié)果,所述文件句柄攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,所述開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一個(gè)數(shù)據(jù)的第一位序號(hào),所述終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào);數(shù)據(jù)拷貝模塊,用于在接收到所述結(jié)果后,將應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中,并更新接收的文件句柄中攜帶的開始標(biāo)識(shí)或終止標(biāo)識(shí)。
8.根據(jù)權(quán)利要求6所述的服務(wù)器,其特征在于,所述數(shù)據(jù)到達(dá)檢測(cè)模塊包括第二接口模塊,用于接收所述共享內(nèi)存創(chuàng)建模塊發(fā)送的文件句柄,將接收的文件句柄指示的共享內(nèi)存作為一個(gè)循環(huán)隊(duì)列,并根據(jù)所述開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量判斷所述循環(huán)隊(duì)列是否可讀,如果可讀,向數(shù)據(jù)獲取模塊返回有數(shù)據(jù)到達(dá)所述共享內(nèi)存的結(jié)果,所述文件句柄攜帶有開始標(biāo)識(shí)、終止標(biāo)識(shí)和共享內(nèi)存的容量,所述開始標(biāo)識(shí)標(biāo)記共享內(nèi)存中第一數(shù)據(jù)的第一位序號(hào),所述終止標(biāo)識(shí)標(biāo)記共享內(nèi)存中最后一個(gè)數(shù)據(jù)的序號(hào);數(shù)據(jù)獲取模塊,用于在接收到所述結(jié)果后,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù),并更新所述文件句柄中攜帶的開始標(biāo)識(shí)或終止標(biāo)識(shí)。
9.根據(jù)權(quán)利要求6所述的服務(wù)器,其特征在于,所述數(shù)據(jù)傳輸模塊包括數(shù)據(jù)結(jié)構(gòu)創(chuàng)建模塊,用于創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)獲取的數(shù)據(jù),且與所述共享內(nèi)存相映射;數(shù)據(jù)發(fā)送模塊,用于將所述數(shù)據(jù)結(jié)構(gòu)發(fā)送給網(wǎng)卡進(jìn)行驅(qū)動(dòng)。
10.根據(jù)權(quán)利要求6-9任意一項(xiàng)所述的服務(wù)器,其特征在于,還包括 釋放模塊,用于當(dāng)應(yīng)用進(jìn)程退出時(shí),釋放退出的應(yīng)用進(jìn)程創(chuàng)建的共享內(nèi)存。
全文摘要
本申請(qǐng)實(shí)施例公開了一種服務(wù)器之間的數(shù)據(jù)傳輸方法和服務(wù)器。方法包括應(yīng)用進(jìn)程根據(jù)各自對(duì)內(nèi)存空間的需求創(chuàng)建各自的文件,將文件映射為共享內(nèi)存,并將創(chuàng)建的文件句柄發(fā)送給數(shù)據(jù)分發(fā)進(jìn)程;應(yīng)用進(jìn)程檢測(cè)各自創(chuàng)建的共享內(nèi)存是否有剩余空間存儲(chǔ)各自待處理的數(shù)據(jù),如果有,將各自待處理的數(shù)據(jù)拷貝到各自的共享內(nèi)存中;數(shù)據(jù)分發(fā)進(jìn)程檢測(cè)是否有應(yīng)用進(jìn)程各自待處理的數(shù)據(jù)到達(dá)各自的共享內(nèi)存,如果有,從應(yīng)用進(jìn)程各自的共享內(nèi)存中獲取應(yīng)用進(jìn)程各自待處理的數(shù)據(jù);數(shù)據(jù)分發(fā)進(jìn)程將獲取的數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。根據(jù)本申請(qǐng)實(shí)施例,在保證應(yīng)用進(jìn)程正常工作的同時(shí),節(jié)省了系統(tǒng)資源,提高了數(shù)據(jù)傳輸?shù)男屎头?wù)器的性能。
文檔編號(hào)H04L29/06GK102340489SQ20101023492
公開日2012年2月1日 申請(qǐng)日期2010年7月20日 優(yōu)先權(quán)日2010年7月20日
發(fā)明者董昊 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司