本申請(qǐng)要求2015年7月17日申請(qǐng)的題目為“NETWORK TRANSFER OF LARGE FILES IN UNSTABLE NETWORK ENVIRONMENTS”的美國臨時(shí)專利申請(qǐng)No.62/194,104的優(yōu)先權(quán),其公開通過全部引用包含與此。
背景技術(shù):
在計(jì)算機(jī)之間傳輸大文件可以引起各種問題。例如,中斷的通信可以干擾文件傳輸,并且可以導(dǎo)致進(jìn)程的丟失。這個(gè)可能要求文件傳輸?shù)闹貑⒑椭匦掳l(fā)送之前已經(jīng)發(fā)送的文件。這可以是資源和時(shí)間的無效使用。
本發(fā)明的各實(shí)施例分別地并共同地解決這個(gè)及其他問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例涉及在可能不穩(wěn)定(例如,連接可能丟失)的網(wǎng)絡(luò)中能夠進(jìn)行大文件(例如,被分成數(shù)據(jù)包)的文件傳輸?shù)姆椒?、系統(tǒng)和裝置。文件的傳送可以使用HTTP來執(zhí)行。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,服務(wù)器計(jì)算機(jī)可以接收來自客戶計(jì)算機(jī)的建立第一HTTP連接的第一請(qǐng)求。服務(wù)器計(jì)算機(jī)可以在第一HTTP連接上接收作為第一請(qǐng)求的一部分的文件的元數(shù)據(jù)(metadata)。元數(shù)據(jù)可以至少包括文件名、客戶ID和文件尺寸。
在基于接收到的文件名確定至少文件的一部分沒有被存儲(chǔ)在服務(wù)器計(jì)算機(jī)處后,該服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接將要由客戶計(jì)算機(jī)發(fā)送到服務(wù)器計(jì)算機(jī)的至少文件的一部分的指示發(fā)送到客戶計(jì)算機(jī)。然后,服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接發(fā)送建議的塊尺寸,當(dāng)將至少文件的一部分發(fā)送到服務(wù)器計(jì)算機(jī)時(shí)該建議的塊尺寸將被客戶計(jì)算機(jī)利用。接著,服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接接收來自客戶計(jì)算機(jī)的文件的一個(gè)或多個(gè)塊。每個(gè)塊可以為小于或等于該塊尺寸的尺寸,并且每個(gè)塊可以指定該塊的開始索引和結(jié)束索引。服務(wù)器計(jì)算機(jī)可以存儲(chǔ)指示已經(jīng)被接收的文件的部分的信息。
在某些情況中,服務(wù)器計(jì)算機(jī)和客戶計(jì)算機(jī)之間的第一HTTP連接可能丟失。作為響應(yīng),服務(wù)器計(jì)算機(jī)可以從客戶計(jì)算機(jī)接收第二個(gè)請(qǐng)求來建立第二HTTP連接。服務(wù)器計(jì)算機(jī)可以通過第二HTTP連接接收作為第二請(qǐng)求的一部分的文件的元數(shù)據(jù)。服務(wù)器計(jì)算機(jī)可以確定文件還沒有被完全地收到,并且可以將對(duì)應(yīng)于文件的缺失部分的缺失開始索引和缺失結(jié)束索引發(fā)送到客戶計(jì)算機(jī)。然后,服務(wù)器計(jì)算機(jī)可以從客戶計(jì)算機(jī)接收文件的缺失的部分,并且將發(fā)送文件已經(jīng)被完整存儲(chǔ)的確認(rèn)發(fā)送到客戶計(jì)算機(jī)。
發(fā)明的實(shí)施例進(jìn)一步涉及包括處理器和存儲(chǔ)器元件的計(jì)算機(jī)。存儲(chǔ)器元件可以包括可以被處理器執(zhí)行的代碼,用來實(shí)施本文描述的任何方法。
下面更詳細(xì)地描述了本發(fā)明的這些及其他實(shí)施例。
附圖說明
圖1示出了根據(jù)本發(fā)明實(shí)施例的示例性系統(tǒng)。
圖2示出了根據(jù)本發(fā)明實(shí)施例的文件傳輸協(xié)議庫的示例性框圖。
圖3示出了根據(jù)本發(fā)明實(shí)施例的發(fā)射器客戶模塊的示例性框圖。
圖4示出了根據(jù)本發(fā)明實(shí)施例的服務(wù)器處理器模塊的示例性框圖。
圖5示出了根據(jù)本發(fā)明實(shí)施例的文件傳輸?shù)氖纠粤鞒虉D。
圖6示出了根據(jù)本發(fā)明實(shí)施例的文件傳輸?shù)氖纠粤鞒虉D。
圖7示出根據(jù)本發(fā)明實(shí)施例的示例性客戶側(cè)的流程圖。
圖8示出根據(jù)本發(fā)明實(shí)施例的示例性服務(wù)器側(cè)的流程圖。
圖9示出計(jì)算機(jī)裝置的框圖。
具體實(shí)施方式
本發(fā)明的實(shí)施例提供了客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間傳輸文件的協(xié)議。數(shù)據(jù)可以通過HTTP連接在計(jì)算機(jī)之間發(fā)送。服務(wù)器計(jì)算機(jī)可以接收來自客戶計(jì)算機(jī)的第一請(qǐng)求來建立第一HTTP連接。服務(wù)器計(jì)算機(jī)可以接收元數(shù)據(jù),至少包括用于文件的文件名、客戶ID和文件尺寸,作為第一請(qǐng)求一部分。元數(shù)據(jù)可以被利用來使文件從客戶計(jì)算機(jī)傳輸?shù)椒?wù)器計(jì)算機(jī)。服務(wù)器計(jì)算機(jī)可以基于文件名,確定至少文件的部分沒有存儲(chǔ)在服務(wù)器計(jì)算機(jī)處。在各種實(shí)施例中,客戶計(jì)算機(jī)可以將文件以塊發(fā)送到服務(wù)器計(jì)算機(jī),其中塊的尺寸可以小于或等于服務(wù)器計(jì)算機(jī)建議的塊的尺寸。服務(wù)器計(jì)算機(jī)可以將信息存儲(chǔ)在服務(wù)器計(jì)算機(jī)處的元數(shù)據(jù)文件中,該信息指示已經(jīng)被接收的文件的部分。
在某些情況中,服務(wù)器計(jì)算機(jī)和客戶計(jì)算機(jī)之間的連接可能丟失。然而,服務(wù)器計(jì)算機(jī)可能已經(jīng)存儲(chǔ)必要的信息來基于文件的文件傳輸。服務(wù)器計(jì)算機(jī)可以發(fā)送第二請(qǐng)求來建立客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間的第二HTTP連接。服務(wù)器計(jì)算機(jī)可以接收文件的元數(shù)據(jù)作為第二請(qǐng)求的一部分。在與客戶計(jì)算機(jī)建立第二HTTP連接之后,服務(wù)器計(jì)算機(jī)可以基于元數(shù)據(jù)中的信息確定沒有收到的文件的部分,并且可以將對(duì)應(yīng)于文件的缺失部分的缺失開始索引和缺失結(jié)束索引發(fā)送到客戶計(jì)算機(jī)。服務(wù)器計(jì)算機(jī)可以接收來自客戶計(jì)算機(jī)的文件缺失的部分。在存儲(chǔ)整個(gè)文件之后,服務(wù)器計(jì)算機(jī)可以發(fā)出文件已經(jīng)被完全存儲(chǔ)到客戶計(jì)算機(jī)的確認(rèn)。
I.系統(tǒng)
描述用于實(shí)現(xiàn)文件傳輸協(xié)議的包括客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)的示例性系統(tǒng)。
A.示例架構(gòu)
圖1示出了根據(jù)本發(fā)明實(shí)施例的示例性系統(tǒng)100。圖1包括客戶計(jì)算機(jī)102、無線路由器104、防火墻106、通信網(wǎng)絡(luò)108、和服務(wù)器計(jì)算機(jī)110。圖1同時(shí)示出客戶側(cè)流程120和服務(wù)器側(cè)流程130的高級(jí)別描述。
客戶計(jì)算機(jī)102可以將消息傳達(dá)給服務(wù)器計(jì)算機(jī)110。消息可以為任何適合的形式。例如,客戶計(jì)算機(jī)102可以使用TCP/IP數(shù)據(jù)包、HTTP或以任何其他適合的格式和它們的結(jié)合發(fā)送請(qǐng)求消息??蛻粲?jì)算機(jī)102可以包括用于與服務(wù)器計(jì)算機(jī)110通信的任何硬件、軟件、其他邏輯或前者的結(jié)合??蛻粲?jì)算機(jī)102可以包括一個(gè)或多個(gè)計(jì)算裝置,并且可以使用任何種類的計(jì)算結(jié)構(gòu)、排列和編譯。在某些情況中,客戶計(jì)算機(jī)102可以運(yùn)行安裝的程序(即,應(yīng)用)。計(jì)算機(jī)可以包括擁有多個(gè)單獨(dú)計(jì)算設(shè)備的系統(tǒng)。
無線路由器104可以實(shí)現(xiàn)一個(gè)或多個(gè)設(shè)備之間的無線通信。無線路由器104可以能夠轉(zhuǎn)發(fā)諸如通信網(wǎng)絡(luò)108的計(jì)算機(jī)網(wǎng)絡(luò)之間的數(shù)據(jù),并且可以實(shí)現(xiàn)客戶計(jì)算機(jī)102和服務(wù)器計(jì)算機(jī)110之間的無線通信。在某些實(shí)施例中,無線路由器104可能沒有網(wǎng)絡(luò)地址轉(zhuǎn)換能力。
防火墻106可以調(diào)整多個(gè)實(shí)體之間的通信。例如,防火墻106可以防止到達(dá)或來自實(shí)體的無限制的訪問。在某些情況中,防火墻106可以防止客戶計(jì)算機(jī)102和服務(wù)器計(jì)算機(jī)110之間的雙向通信。
相應(yīng)地,發(fā)明實(shí)施例可以實(shí)現(xiàn)文件傳輸協(xié)議,該文件傳輸協(xié)議甚至可以伴隨著客戶計(jì)算機(jī)102和服務(wù)器計(jì)算機(jī)110之間的防火墻106的出現(xiàn),且沒有來自無線路由器104的網(wǎng)絡(luò)地址轉(zhuǎn)換能力而實(shí)施。這是可能的,因?yàn)槲募鬏斂梢耘c單路通信兼容,其中客戶計(jì)算機(jī)102將請(qǐng)求(即,HTTP POST請(qǐng)求)發(fā)送到服務(wù)器計(jì)算機(jī)110,并且服務(wù)器計(jì)算機(jī)110可以響應(yīng)所接收的請(qǐng)求,但可能沒有發(fā)起與客戶計(jì)算機(jī)102的通信。
通信網(wǎng)絡(luò)108可以包括多個(gè)用于實(shí)體之間數(shù)據(jù)和信息的安全通信的網(wǎng)絡(luò)。在某些實(shí)施例中,通信網(wǎng)絡(luò)108可以跟隨適合的通信協(xié)議來產(chǎn)生一個(gè)或多個(gè)安全通信信道。任何合適的通信協(xié)議可用于生成通信信道。在一些實(shí)例中,通信信道可以包括“安全通信信道”,該安全通信信道能以任何已知的方式來建立,該已知的方式包括相互認(rèn)證和會(huì)話密鑰的使用以及SSL會(huì)話的的建立。然而,可以使用創(chuàng)建安全信道的任何方法。
服務(wù)器計(jì)算機(jī)110可以與客戶計(jì)算機(jī)102通信來將文件數(shù)據(jù)存儲(chǔ)到服務(wù)器計(jì)算機(jī)110。服務(wù)器計(jì)算機(jī)110可以是大型機(jī)、微型計(jì)算機(jī)集群或充當(dāng)一個(gè)單元的服務(wù)器組。在一個(gè)示例中,服務(wù)器計(jì)算機(jī)110可以耦合到一個(gè)或多個(gè)文件服務(wù)器。服務(wù)器計(jì)算機(jī)110可以包括用于服務(wù)來自一個(gè)或多個(gè)諸如客戶計(jì)算機(jī)102的客戶計(jì)算機(jī)的請(qǐng)求的任何硬件、軟件、其他邏輯或前者的結(jié)合。服務(wù)器計(jì)算機(jī)110可以包括一個(gè)或多個(gè)計(jì)算裝置,并且可以使用任何種類的計(jì)算結(jié)構(gòu)、排列和編譯。在實(shí)施例中,如果有客戶計(jì)算機(jī)102將請(qǐng)求發(fā)送到服務(wù)器計(jì)算機(jī)110的單路通信,服務(wù)器計(jì)算機(jī)110可能不是與客戶計(jì)算機(jī)102直接連接。
客戶側(cè)流程120示出了可以由客戶計(jì)算機(jī)102實(shí)施的高級(jí)別流程的動(dòng)作??蛻魝?cè)流程120可以包括壓縮用于傳輸?shù)奈募?,根?jù)文件傳輸協(xié)議將文件打包成數(shù)據(jù)包,和在將文件傳輸?shù)椒?wù)器計(jì)算機(jī)110之前將打包數(shù)據(jù)轉(zhuǎn)換成文件流。在某些實(shí)施例中,可以有實(shí)施客戶計(jì)算機(jī)102的功能的多個(gè)客戶計(jì)算機(jī)。客戶側(cè)流程120的一個(gè)實(shí)施例在圖7的示例性客戶側(cè)的流程圖700中被描述。
服務(wù)器側(cè)流程130示出了可以由服務(wù)器計(jì)算機(jī)110實(shí)施的高級(jí)別流程的動(dòng)作。服務(wù)器側(cè)流程130可以包括將從客戶計(jì)算機(jī)102接收的文件流轉(zhuǎn)換成打包數(shù)據(jù),根據(jù)文件傳輸協(xié)議將數(shù)據(jù)包解包,和將已經(jīng)傳輸?shù)奈募鈮?。在某些?shí)施例中,可以有實(shí)施服務(wù)器計(jì)算機(jī)110的功能的多個(gè)服務(wù)器計(jì)算機(jī)。服務(wù)器側(cè)流程130的一個(gè)實(shí)施例在圖8的示例性服務(wù)器側(cè)的流程圖800中被描述。
在示例性的使用情況中,客戶計(jì)算機(jī)102可以將文件傳輸?shù)椒?wù)器計(jì)算機(jī)110來監(jiān)測(cè)實(shí)驗(yàn)室儀器系統(tǒng)。例如,實(shí)驗(yàn)室儀器可以連接到客戶計(jì)算機(jī)102,該客戶計(jì)算機(jī)可以激活指令、收集由儀器記錄的定期日志,并且根據(jù)文件傳輸協(xié)議將日志發(fā)送到服務(wù)器計(jì)算機(jī)110。用戶可以利用服務(wù)器計(jì)算機(jī)110來部署用戶界面(即,網(wǎng)站的)中的信息,查驗(yàn)日志,并且取回關(guān)于儀器的額外信息。服務(wù)器110可以有解析日志和提供分析(例如,給支持用戶的錯(cuò)誤通知,來自儀器的數(shù)據(jù)統(tǒng)計(jì)報(bào)告等)的機(jī)制。然后,本文描述的系統(tǒng)、方法和裝置可以被利用于任何適合的數(shù)據(jù)傳輸。
B.文件傳輸協(xié)議庫
圖2示出了根據(jù)本發(fā)明實(shí)施例的文件傳輸協(xié)議庫200的示例性框圖。圖2包括數(shù)據(jù)包模塊202、靜態(tài)工具模塊(static utilities module)204、元數(shù)據(jù)模塊206、完整性管理模塊208、和邏輯管理模塊210。
文件傳輸協(xié)議庫200可以在傳送期間管理文件的處理。例如,文件傳輸協(xié)議庫200可以讓文件以塊發(fā)送,該塊可以打包成數(shù)據(jù)包,該數(shù)據(jù)包可以包含文件內(nèi)容、文件信息、塊信息和其他元數(shù)據(jù)的部分(塊)。塊可以對(duì)應(yīng)于文件的部分的內(nèi)容。
根據(jù)發(fā)明實(shí)施例,數(shù)據(jù)包可以持有與傳輸文件塊相關(guān)的任何適合的數(shù)據(jù)。數(shù)據(jù)包充當(dāng)網(wǎng)絡(luò)上的文件建立塊(file building block),并且可以被利用來在客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間發(fā)送任何信息。在不同實(shí)施例中,數(shù)據(jù)包可以包括如下特性:
·塊尺寸——塊的純文件數(shù)據(jù)的尺寸(即,字節(jié)數(shù))
·塊內(nèi)容——要傳輸?shù)膲K的純文件數(shù)據(jù)(即,原始數(shù)據(jù))
·文件路徑——文件的源位置
·文件名——文件的完整唯一的文件名
·文件完整的目的地——在文件服務(wù)器上用于保存文件的目的地(即,用來支持多個(gè)文件服務(wù)器的可擴(kuò)展性)
·范圍索引——開始索引,塊內(nèi)容在文件內(nèi)部開始的索引,和結(jié)束索引,塊內(nèi)容在文件內(nèi)部結(jié)束的索引
·文件尺寸——實(shí)際完整的文件尺寸
·最后塊——指示當(dāng)前塊是否為文件流中的最后塊的布爾值
·Enum:{請(qǐng)求/響應(yīng)}——表示數(shù)據(jù)包是否為響應(yīng)或請(qǐng)求
根據(jù)發(fā)明實(shí)施例,數(shù)據(jù)包模塊202可以包含關(guān)于數(shù)據(jù)包的任何信息。例如,數(shù)據(jù)包模塊202可以持有文件的塊的原始數(shù)據(jù),以及與塊相關(guān)的索引(即,開始索引和結(jié)束索引)。
靜態(tài)工具模塊204可以包含與處理數(shù)據(jù)包相關(guān)的信息。該信息可以包括允許二進(jìn)制序列化和反序列化,以及將文件讀取和寫入到本地文件系統(tǒng)的工具。該信息也可以包括實(shí)現(xiàn)分、切和將原始數(shù)據(jù)轉(zhuǎn)換成塊,并且進(jìn)一步轉(zhuǎn)換和結(jié)合進(jìn)入進(jìn)來的文件的工具。
元數(shù)據(jù)模塊206可以持有文件相關(guān)的任何信息。元數(shù)據(jù)模塊206可以包含包括文件名、客戶ID和文件尺寸的元數(shù)據(jù)。元數(shù)據(jù)模塊206也可以持有元數(shù)據(jù)的完整性信息,以及管理正在被傳輸?shù)奈募娜笔Р糠值乃饕秶?/p>
完整性管理模塊208可以持有實(shí)現(xiàn)文件的數(shù)據(jù)的有效性的驗(yàn)證的信息。信息可以包括驗(yàn)證接收到的數(shù)據(jù)的完整性的函數(shù)和對(duì)象。例如,完整性管理模塊208可以確定文件的文件尺寸已經(jīng)改變,并且可以觸發(fā)與文件相關(guān)的元數(shù)據(jù)的重置。在某些情況中,這個(gè)可以指示在文件傳輸期間文件被覆蓋。
邏輯管理模塊210可以管理文件傳輸協(xié)議庫200的工作流程。例如,邏輯管理模塊210可以管理進(jìn)入和出去的數(shù)據(jù)包,并且可以確定用來在某時(shí)間利用的恰當(dāng)?shù)哪K。邏輯管理模塊210可以為第一和和最后一個(gè)運(yùn)行的模塊,直到文件傳送結(jié)束。
C.發(fā)射器客戶模塊
圖3示出了根據(jù)本發(fā)明實(shí)施例的發(fā)射器客戶模塊300的示例性框圖。發(fā)射器客戶模塊300可以在諸如圖1的客戶計(jì)算機(jī)102的客戶計(jì)算機(jī)上運(yùn)行,并且可以使客戶計(jì)算機(jī)將文件傳輸?shù)椒?wù)器計(jì)算機(jī)110。在某些實(shí)施例中,發(fā)射器客戶模塊300可以與可以在客戶計(jì)算機(jī)上運(yùn)行的控制臺(tái)應(yīng)用和用戶接口應(yīng)用通信。
圖3包括文件傳輸協(xié)議庫302、資源檢查器模塊304、發(fā)射器配置模塊306、連接管理器模塊308和邏輯管理器模塊310。發(fā)射器模塊300可以與一個(gè)或多個(gè)庫通信,諸如,配置庫312、日志庫314、加密/解密庫316、和壓縮/解壓庫318。
文件傳輸協(xié)議庫302可以在傳送期間管理文件的處理(例如,分塊和打包)。文件傳輸協(xié)議庫302對(duì)于圖2中描述的文件傳輸協(xié)議庫200的那些可以有類似的特征。
資源檢查器模塊304可以檢測(cè)在文件傳輸期間沖突的進(jìn)程。沖突的進(jìn)程可以包括作為客戶試圖利用相同源的進(jìn)程。元檢查器模塊304可以在使用期間鎖定源,以便不讓其他進(jìn)程同時(shí)將其利用。例如,資源檢查器模塊304可以在傳輸期間的進(jìn)程的中間鎖定文件,以防止其他進(jìn)程利用相同文件。
發(fā)射器配置模塊306可以包括與發(fā)射器客戶相關(guān)的任何配置信息。在相同情況中,配置數(shù)據(jù)可以包括用于元數(shù)據(jù)文件的后綴和最大塊尺寸。最大塊尺寸可以為在網(wǎng)絡(luò)組件可能沒有返回有效輸入的情況中可以被利用的默認(rèn)值。在某些情況中,最大塊尺寸值可以被利用于流程控制或作為計(jì)算建議或適合塊尺寸的算法的輸入。配置信息也可以包括安全設(shè)置(例如,用戶名、密碼、認(rèn)證信息等)、日志設(shè)置(例如,日志文件名、日志文件尺寸等)、目錄設(shè)置(例如,目錄名、文件路徑、文件夾大小等)、傳輸設(shè)置(例如,超時(shí)長度、失敗之前最大重試次數(shù)、端口值、主機(jī)信息等)、代理設(shè)置(例如,代理值、連接選項(xiàng)等),以及其他一般設(shè)置(例如,對(duì)于沖突進(jìn)程的睡眠時(shí)間等)。
連接管理器模塊308可以管理通信(例如,向外和向內(nèi)的網(wǎng)絡(luò)調(diào)用、代理等)。連接管理器模塊308也可以管理連接的穩(wěn)定性。例如,如果請(qǐng)求已經(jīng)超時(shí),連接管理器模塊308可以通知邏輯管理器310來減少用于文件傳輸?shù)淖畲髩K尺寸(例如,降低到最后塊尺寸的一半)。基于每個(gè)連續(xù)傳送的數(shù)據(jù)包,如果連接穩(wěn)定,連接管理器模塊308可以通知邏輯管理器模塊310來增加最大塊尺寸(例如,將最后的塊尺寸增加1)。
邏輯管理器模塊310可以管理發(fā)射器客戶模塊300的工作流程。邏輯管理器模塊310實(shí)現(xiàn)的示例性工作流可以包括從文件載入配置信息、從資源檢查器模塊304得到運(yùn)行許可、將文件雅座并移動(dòng)到恰當(dāng)?shù)奈募A、調(diào)用文件傳輸協(xié)議庫302來產(chǎn)生數(shù)據(jù)包,并且調(diào)用連接管理器模塊308來發(fā)送文件、接收響應(yīng)并刪除已經(jīng)完全傳輸?shù)奈募?/p>
發(fā)射器客戶模塊300可以與一個(gè)或多個(gè)庫通信。配置庫312可以包括實(shí)現(xiàn)將配置保存和載入到文件(例如,XML)。日志庫314可以包括實(shí)現(xiàn)關(guān)鍵事件和跟蹤(例如,差錯(cuò)、超時(shí)等)的日志。加密/解密庫316可以包括實(shí)現(xiàn)XML或其他數(shù)據(jù)(例如,塊、元數(shù)據(jù)等)加密和解密的模塊。壓縮/解壓庫318可以包括實(shí)現(xiàn)文件的壓縮和解壓的模塊。在某些實(shí)施例中,壓縮/解壓庫318可以提供多線程能力。
D.服務(wù)器發(fā)射器模塊
圖4示出了根據(jù)本發(fā)明實(shí)施例的服務(wù)器處理器模塊400的示例性框圖。服務(wù)器處理器模塊400可以在諸如圖1的服務(wù)器計(jì)算機(jī)110的服務(wù)器計(jì)算機(jī)上運(yùn)行,并且可以使服務(wù)器計(jì)算機(jī)接收和響應(yīng)來自客戶計(jì)算機(jī)的傳輸文件的請(qǐng)求。圖4包括文件傳輸協(xié)議庫402、HTTP處理器模塊404、連接管理器模塊406和邏輯管理器模塊408。服務(wù)器處理器模塊400可以與一個(gè)或多個(gè)庫通信,諸如日志庫410、壓縮/解壓庫412和文件部署庫414。
文件傳輸協(xié)議庫402可以在傳送期間管理文件的處理(例如,分塊和打包)。文件傳輸協(xié)議庫402對(duì)于圖2中描述的文件傳輸協(xié)議庫200的那些可以有類似的特征。
HTTP處理器模塊404可以為激活邏輯管理器模塊408的進(jìn)入點(diǎn)。HTTP處理器模塊404可以實(shí)現(xiàn)由服務(wù)器處理器模塊400接收的向內(nèi)和向外的請(qǐng)求的檢查,并且確定基于請(qǐng)求采取的一個(gè)或多個(gè)動(dòng)作。HTTP處理器模塊404可以通信到邏輯管理器模塊408來發(fā)起一個(gè)或多個(gè)動(dòng)作。
連接管理器模塊406可以管理通信(例如,向外和向內(nèi)的網(wǎng)絡(luò)調(diào)用、代理、無效返回碼等)。在某些實(shí)施例中,連接管理器模塊406可以檢查哪個(gè)文件服務(wù)器被利用來存儲(chǔ)文件數(shù)據(jù)。
邏輯管理器模塊408可以管理服務(wù)器處理器模塊400的工作流程。由邏輯管理器模塊408實(shí)現(xiàn)的示例性流程可以包括從文件載入配置文件,調(diào)用文件傳輸協(xié)議庫402來將進(jìn)來的數(shù)據(jù)包解包,調(diào)用連接管理器模塊406來發(fā)出元數(shù)據(jù)文件、接收響應(yīng)和刪除完全被傳輸?shù)脑獢?shù)據(jù)文件,將文件壓縮到恰當(dāng)?shù)牟渴鹞募A,并且然后調(diào)用文件部署庫414。
服務(wù)器處理器模塊400可以與一個(gè)或多個(gè)庫通信。日志庫410可以包括實(shí)現(xiàn)關(guān)鍵事件和跟蹤(例如,差錯(cuò)、超時(shí)等)的日志。壓縮/解壓庫412可以包括實(shí)現(xiàn)文件的壓縮和解壓的模塊。在某些實(shí)施例中,壓縮/解壓庫412可以提供多線程能力。文件部署庫414可以包括使文件對(duì)于使用可用的模塊。
II.文件的傳輸
根據(jù)發(fā)明的實(shí)施例的文件傳輸協(xié)議在下文中描述。文件傳輸協(xié)議可以實(shí)現(xiàn)在文件傳輸期間請(qǐng)求和發(fā)送的具有動(dòng)態(tài)尺寸的文件塊。另外,文件傳輸協(xié)議可以使客戶放棄需要,來在連接中的丟失之后重新發(fā)送完整文件。
A.方法
圖5示出了根據(jù)本發(fā)明實(shí)施例的在客戶計(jì)算機(jī)520和服務(wù)器計(jì)算機(jī)530之間的文件傳輸?shù)氖纠粤鞒虉D。在某些實(shí)施例中,客戶計(jì)算機(jī)520可以為圖1的客戶計(jì)算機(jī)102,服務(wù)器計(jì)算機(jī)530可以為圖1的服務(wù)器計(jì)算機(jī)110。當(dāng)流程圖500描述用于傳輸一個(gè)文件的過程的同時(shí),該過程可以對(duì)于被要求從客戶計(jì)算機(jī)520傳輸?shù)椒?wù)器計(jì)算機(jī)530的多個(gè)文件而重復(fù)。在某些實(shí)施例中,客戶計(jì)算機(jī)520和服務(wù)器計(jì)算機(jī)530可以支持停止和恢復(fù)選擇。
客戶計(jì)算機(jī)520可以通過適當(dāng)?shù)耐ㄐ艆f(xié)議(例如,HTTP等)將請(qǐng)求發(fā)送到服務(wù)器計(jì)算機(jī)530。文件傳輸可以包括被以打包進(jìn)數(shù)據(jù)包中的塊發(fā)出的文件的部分。每個(gè)數(shù)據(jù)包可以包括圍繞正在被傳輸?shù)膲K的信息、圍繞該塊所屬于的文件的信息、和原始?jí)K數(shù)據(jù)。在某些實(shí)施例中,在客戶計(jì)算機(jī)520處數(shù)據(jù)塊可以被轉(zhuǎn)換為文件流,客戶計(jì)算機(jī)520可以傳送文件流到服務(wù)器計(jì)算機(jī)530,并且在服務(wù)器計(jì)算機(jī)530處文件流可以被轉(zhuǎn)換為數(shù)據(jù)包。文件流可以包括對(duì)應(yīng)于文件的字節(jié)序列和關(guān)于文件的附加信息。例如,附加信息可以包括創(chuàng)建該文件的實(shí)體的識(shí)別符。
在步驟501處,客戶計(jì)算機(jī)520可以創(chuàng)建在本地文件夾處擁有唯一文件名的要傳輸?shù)奈募膲嚎s文件(例如,zip文件)。文件名結(jié)構(gòu)可以取決于客戶計(jì)算機(jī)520的配置,并且可以包括某些文件擴(kuò)展、時(shí)間戳、和用于確保文件名唯一的任何適合的元素。在某些情況中,對(duì)于不完整的文件,客戶計(jì)算機(jī)520可以在本地文件夾中存儲(chǔ)要傳輸?shù)奈募?/p>
在步驟502處,客戶計(jì)算機(jī)520可以發(fā)送包括要傳輸?shù)椒?wù)器計(jì)算機(jī)530的文件的唯一文件名的文件數(shù)據(jù)。文件數(shù)據(jù)可以為包括文件名、客戶ID、和完整文件尺寸的元數(shù)據(jù)。在某些實(shí)施例中,元數(shù)據(jù)可以被包括在可以被轉(zhuǎn)換成文件流的數(shù)據(jù)包中。在此從客戶計(jì)算機(jī)520發(fā)送到服務(wù)器計(jì)算機(jī)530的初始請(qǐng)求中,數(shù)據(jù)包可能不包含任何與塊相關(guān)的信息(例如,與塊相關(guān)的值被臨時(shí)以零代替)。
在步驟503處,服務(wù)器計(jì)算機(jī)530可以檢查擁有唯一文件名的文件是否被存儲(chǔ)在服務(wù)器計(jì)算機(jī)530。如果文件存在,服務(wù)器計(jì)算機(jī)530可以取回存儲(chǔ)在服務(wù)器計(jì)算機(jī)530上的對(duì)應(yīng)于該文件的元數(shù)據(jù)文件。該元數(shù)據(jù)文件可以包括關(guān)于服務(wù)器計(jì)算機(jī)530已結(jié)被接收的文件的部分的信息,該信息被文件的索引(例如,對(duì)應(yīng)的字節(jié))所指示。在某些情況中,元數(shù)據(jù)文件可以指示文件的某些部分可能沒有存儲(chǔ)在服務(wù)器計(jì)算機(jī)530上。
在步驟504處,如果文件或部分文件在服務(wù)器計(jì)算機(jī)530上存在,服務(wù)器計(jì)算機(jī)530可以將在要被傳輸?shù)奈募髦形恢?例如,索引)和建議的塊尺寸發(fā)送到客戶計(jì)算機(jī)520。在某些實(shí)施例中,通過將該信息包含在數(shù)據(jù)包并且將該數(shù)據(jù)包返回給客戶計(jì)算機(jī)520,信息可以被發(fā)送。如果文件或部分文件在服務(wù)器計(jì)算機(jī)530上不存在,發(fā)送的位置可以對(duì)應(yīng)于索引零。
在步驟505處,客戶計(jì)算機(jī)520可以從所接收自服務(wù)器計(jì)算機(jī)530的位置開始,以小于或等于建議的塊尺寸的尺寸發(fā)送塊。例如,客戶計(jì)算機(jī)520可以選擇將對(duì)應(yīng)于索引1到30的尺寸的塊30發(fā)送到服務(wù)器計(jì)算機(jī)530。此塊尺寸可以小于從服務(wù)器計(jì)算機(jī)530接收的當(dāng)前建議的50的塊尺寸。塊可以以數(shù)據(jù)塊發(fā)送,該數(shù)據(jù)塊包括對(duì)應(yīng)于文件的索引1到30的范圍的原始?jí)K數(shù)據(jù)和其他元數(shù)據(jù)。
當(dāng)接收到傳輸請(qǐng)求時(shí),建議的塊尺寸可以由服務(wù)器計(jì)算機(jī)530基于服務(wù)器計(jì)算機(jī)530的條件(例如,處理器負(fù)載、系統(tǒng)活躍性、存儲(chǔ)器使用、網(wǎng)絡(luò)使用、資源利用等)動(dòng)態(tài)地被確定,與此同時(shí),客戶計(jì)算機(jī)520也可以動(dòng)態(tài)地確定,當(dāng)實(shí)際發(fā)送塊到服務(wù)器計(jì)算機(jī)530時(shí),是否利用建議的塊尺寸。例如,基于接收建議的塊尺寸,客戶計(jì)算機(jī)520可以基于客戶計(jì)算機(jī)520的條件(例如,處理器負(fù)載、系統(tǒng)活躍性、存儲(chǔ)器使用、網(wǎng)絡(luò)使用、資源利用等)動(dòng)態(tài)地確定恰當(dāng)?shù)膲K尺寸。在某些情況中,恰當(dāng)?shù)膲K尺寸可以有對(duì)應(yīng)于建議的塊尺寸的最大尺寸。
由服務(wù)器計(jì)算機(jī)530確定的建議的塊尺寸和由客戶計(jì)算機(jī)520確定的恰當(dāng)?shù)膲K尺寸可以由任何適合的算法動(dòng)態(tài)地被計(jì)算。利用動(dòng)態(tài)的塊尺寸可以提高文件傳輸?shù)姆€(wěn)定性,因?yàn)榭蛻粲?jì)算機(jī)520和服務(wù)器計(jì)算機(jī)530可以以更靈活而不讓其系統(tǒng)過載的方式通信數(shù)據(jù)。
在步驟506處,服務(wù)器計(jì)算機(jī)530可以將來自客戶計(jì)算機(jī)520的塊加入到存儲(chǔ)在服務(wù)器計(jì)算機(jī)530處的文件,并且更新與該文件相關(guān)的元數(shù)據(jù)文件。服務(wù)器計(jì)算機(jī)530可以從接收的數(shù)據(jù)包取回原始?jí)K數(shù)據(jù),并且將該塊存儲(chǔ)于本地。服務(wù)器計(jì)算機(jī)530也可以更新元數(shù)據(jù)文件來包括關(guān)于剛被存儲(chǔ)的文件的塊的信息。該信息可以包括對(duì)應(yīng)于存儲(chǔ)的塊的文件內(nèi)容的范圍的開始索引和結(jié)束索引。例如,服務(wù)器計(jì)算機(jī)530可以在元數(shù)據(jù)文件中記錄對(duì)應(yīng)于來自客戶計(jì)算機(jī)520的文件的開始索引1到結(jié)束索引30范圍的文件數(shù)據(jù)被接收和存儲(chǔ)。這些索引可以被服務(wù)器計(jì)算機(jī)530在之后讀取來幫助確定文件是否被完全地接收。
在步驟507處,服務(wù)器計(jì)算機(jī)530可以發(fā)送對(duì)應(yīng)于下一個(gè)塊的索引范圍,服務(wù)器計(jì)算機(jī)依據(jù)給客戶計(jì)算機(jī)520建議的塊尺寸請(qǐng)求接收該塊。建議的塊尺寸可以與之間建議的塊尺寸相同或不同。索引范圍可以包括對(duì)應(yīng)于服務(wù)器計(jì)算機(jī)530要求從客戶計(jì)算機(jī)520發(fā)送的下一個(gè)塊的下一個(gè)開始索引和下一個(gè)結(jié)束索引。在某些情況中,此下一個(gè)開始索引可以跟隨從客戶計(jì)算機(jī)520接收的上一個(gè)塊位置的結(jié)束位置。例如,服務(wù)器計(jì)算機(jī)530可以發(fā)送31到70范圍和建議的40的塊尺寸的請(qǐng)求,這里開始索引31跟隨接收到的上一個(gè)塊的結(jié)束索引30。
在步驟508處,客戶計(jì)算機(jī)520可以更新對(duì)應(yīng)于要被發(fā)送的下一個(gè)塊的索引,并且從文件讀取下一個(gè)塊??蛻粲?jì)算機(jī)520可以動(dòng)態(tài)地確定恰當(dāng)?shù)膲K尺寸,其等于或小于在步驟507中接收的來被下一個(gè)塊所利用的建議的塊尺寸??蛻粲?jì)算機(jī)520然后可以從文件讀取下一個(gè)塊,其中下一個(gè)塊有動(dòng)態(tài)確定的塊尺寸。在動(dòng)態(tài)地確定20的塊尺寸為恰當(dāng)?shù)闹?,客戶?jì)算機(jī)520可以將下一個(gè)塊的索引更新到開始索引31和結(jié)束索引50。客戶計(jì)算機(jī)520然后可以從存儲(chǔ)在客戶計(jì)算機(jī)520處的文件,以索引31到50的范圍讀取文件內(nèi)容。
步驟505到508可以重復(fù)直到到達(dá)文件的結(jié)束。在某些實(shí)施例中,當(dāng)客戶計(jì)算機(jī)520識(shí)別其已經(jīng)發(fā)送傳輸文件的所有部分的請(qǐng)求到服務(wù)器計(jì)算機(jī)530,這個(gè)可以發(fā)生。
在步驟509處,客戶計(jì)算機(jī)520可以請(qǐng)求文件是否已經(jīng)完全地被服務(wù)器計(jì)算機(jī)530完全地接收。
在某些實(shí)施例中,這個(gè)可以發(fā)起客戶計(jì)算機(jī)520和服務(wù)器計(jì)算機(jī)530之間的三次握手。
在步驟510處,服務(wù)器計(jì)算機(jī)530可以確定文件的所有部分是否已經(jīng)被傳輸。服務(wù)器計(jì)算機(jī)530可以訪問和讀取與文件相關(guān)的元數(shù)據(jù)文件,并且確定文件的全部范圍是否在元數(shù)據(jù)文件中被指示出來。如果文件的全部索引范圍在元數(shù)據(jù)文件中被指示,這個(gè)可以指示文件的所有部分已經(jīng)被傳輸。
在步驟511處,如果服務(wù)器計(jì)算機(jī)530確定文件的所有部分已經(jīng)被接收,服務(wù)器計(jì)算機(jī)530可以將文件的所有部分已經(jīng)被傳輸?shù)拇_認(rèn)發(fā)送到客戶計(jì)算機(jī)520。在某些實(shí)施例中,服務(wù)器計(jì)算機(jī)530可以確定文件還沒有完全地被接收,并且可能不發(fā)出確認(rèn)。如之前描述的,如果由于中斷的通信或其他各種原因數(shù)據(jù)包丟失,這個(gè)可以發(fā)生。圖6描述了示例性實(shí)施例,在其中缺失的塊可以由服務(wù)器計(jì)算機(jī)確定和接收。
在步驟512處,客戶計(jì)算機(jī)520可以發(fā)送關(guān)于確認(rèn)是否被接收的確收。這個(gè)可以完成三次握手,并且可以指示文件的傳輸結(jié)束。
在步驟513處,如果文件的傳輸結(jié)束,客戶計(jì)算機(jī)520可以從本地文件夾移除該文件,并且檢測(cè)要傳輸?shù)南乱粋€(gè)文件。如果要傳輸?shù)南乱粋€(gè)文件存在,之前描述的步驟可以對(duì)于下一個(gè)文件從步驟502開始被重復(fù)。在某些實(shí)施例中,對(duì)于在本地文件夾中的所有文件步驟可以被重復(fù)。
B.伴隨著連接丟失的文件傳輸
在某些實(shí)施例中,連接的丟失可能在文件傳輸期間發(fā)生。中斷通信的某些示例性原因可能包括超時(shí)、來自服務(wù)器計(jì)算機(jī)響應(yīng)的延遲、和丟失響應(yīng)。在另一個(gè)情況中,有跳數(shù)限制,其中存在用于數(shù)據(jù)的數(shù)據(jù)包可以通過網(wǎng)絡(luò)被傳輸?shù)拇螖?shù)的極限。如果超出跳數(shù)限制,數(shù)據(jù)包可能丟失。如下面圖6中所描述的,發(fā)明實(shí)施例實(shí)現(xiàn)了確定文件的具體丟失部分的位置,來代替重新發(fā)送整個(gè)文件。
圖6示出了根據(jù)本發(fā)明實(shí)施例的文件傳輸?shù)氖纠粤鞒虉D600。圖6描述了客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間的示例性文件傳輸,其中在文件傳輸期間發(fā)生連接的丟失。在某些實(shí)施例中,圖6中所引用的客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)可以與在本文描述的其他示圖所包括的客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)有類似的屬性。
在步驟601處,服務(wù)器計(jì)算機(jī)可以從客戶計(jì)算機(jī)接收第一個(gè)請(qǐng)求來建立第一HTTP連接。在某些實(shí)施例中,客戶計(jì)算機(jī)可以向服務(wù)器計(jì)算機(jī)以單向通信發(fā)送請(qǐng)求,其中服務(wù)器計(jì)算機(jī)可能無法發(fā)起與客戶計(jì)算機(jī)的通信。取而代之的是服務(wù)器計(jì)算機(jī)可以響應(yīng)于從客戶計(jì)算機(jī)接收的請(qǐng)求。
在步驟602處,服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接接收作為第一請(qǐng)求部分的文件的元數(shù)據(jù)。元數(shù)據(jù)以數(shù)據(jù)包發(fā)出,其可以包括文件名、客戶ID和文件尺寸。文件名可以為唯一文件名。在此初始請(qǐng)求中,數(shù)據(jù)包可能不包括其他信息(例如,塊元數(shù)據(jù)、塊原始數(shù)據(jù)等)。在某些情況中,其他信息可以用諸如零值的過濾器信息代替。
在步驟603處,服務(wù)器計(jì)算機(jī)可以基于接收的文件名,確定至少文件的部分沒有存儲(chǔ)在服務(wù)器計(jì)算機(jī)處。服務(wù)器計(jì)算機(jī)可以通過檢查擁有唯一文件名的文件是否存儲(chǔ)于本地來做出此確定。再某些情況中,整個(gè)文件可能沒有存儲(chǔ)在服務(wù)器計(jì)算機(jī)處,文件的一個(gè)或多個(gè)部分可能在服務(wù)器計(jì)算機(jī)處丟失。文件的一個(gè)或多個(gè)部分可能由于中斷通信或其他原因丟失。
在步驟604處,服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接,發(fā)送將要由客戶計(jì)算機(jī)發(fā)送到服務(wù)器計(jì)算機(jī)的至少文件的部分的指示。在某些實(shí)施例中,該指示可以包括對(duì)應(yīng)于將要發(fā)送的文件的部分(例如,塊)。
在步驟605處,服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接,發(fā)送建議的塊尺寸,當(dāng)將文件的至少部分發(fā)送到服務(wù)器計(jì)算機(jī)時(shí),該塊尺寸將被客戶計(jì)算機(jī)利用。該建議的塊尺寸可以由服務(wù)器計(jì)算機(jī)通過基于服務(wù)器計(jì)算機(jī)的當(dāng)前條件(例如,處理器負(fù)載、系統(tǒng)活躍性、存儲(chǔ)器使用、網(wǎng)絡(luò)使用、資源利用等)的任何適合的算法來動(dòng)態(tài)地確定。
在步驟606處,服務(wù)器計(jì)算機(jī)可以通過第一HTTP連接接收來自客戶計(jì)算機(jī)的文件的一個(gè)或多個(gè)塊。每個(gè)塊可以為小于或等于來自服務(wù)器計(jì)算機(jī)的建議的塊尺寸的尺寸,并且每個(gè)塊可以指定塊的開始索引和結(jié)束索引。客戶計(jì)算機(jī)可以,基于客戶計(jì)算機(jī)的當(dāng)前條件(例如,處理器負(fù)載、系統(tǒng)活躍性、存儲(chǔ)器使用、網(wǎng)絡(luò)使用、資源利用等)的任何適合的算法,動(dòng)態(tài)地確定要發(fā)送的每個(gè)塊的恰當(dāng)?shù)某叽纭?/p>
在步驟607處,服務(wù)器計(jì)算機(jī)可以存儲(chǔ)指示已經(jīng)被接收的文件的部分的信息。該信息可以作為與存儲(chǔ)在服務(wù)器計(jì)算機(jī)處的文件相關(guān)的元數(shù)據(jù)存儲(chǔ)。例如,該信息可以存儲(chǔ)在服務(wù)器計(jì)算機(jī)所存儲(chǔ)的元數(shù)據(jù)文件中。存儲(chǔ)在元數(shù)據(jù)文件中的信息可以包括對(duì)于從客戶計(jì)算機(jī)接收的每個(gè)塊的開始索引和結(jié)束索引。這可以使服務(wù)器計(jì)算機(jī)之后訪問該信息來幫助確定還沒有從客戶計(jì)算機(jī)成功地接收的文件的具體范圍。
在步驟608處,服務(wù)器計(jì)算機(jī)可以丟失服務(wù)器計(jì)算機(jī)和客戶計(jì)算機(jī)之間的第一HTTP連接。連接流逝的某些示例原因包括請(qǐng)求超時(shí),其中客戶計(jì)算機(jī)在有效時(shí)間段內(nèi)沒有從服務(wù)器計(jì)算機(jī)接收響應(yīng),和導(dǎo)致服務(wù)器計(jì)算機(jī)以錯(cuò)誤代碼響應(yīng)客戶計(jì)算機(jī)的不穩(wěn)定的網(wǎng)絡(luò)。在某些情況中,連接的丟失破壞一個(gè)或多個(gè)塊,使其不能成功地傳輸?shù)椒?wù)器計(jì)算機(jī)。
在步驟609處,服務(wù)器計(jì)算機(jī)可以從客戶計(jì)算機(jī)接收第二個(gè)請(qǐng)求來建立第二HTTP連接。在某些實(shí)施例中,服務(wù)器計(jì)算機(jī)可能無法發(fā)起與客戶計(jì)算機(jī)的第二HTTP連接的建立。取而代之的是服務(wù)器計(jì)算機(jī)能夠接收和響應(yīng)來自客戶計(jì)算機(jī)的請(qǐng)求,以便建立第二HTTP連接。
在步驟610處,服務(wù)器計(jì)算機(jī)可以通過第二HTTP連接,接收作為第二請(qǐng)求的一部分的文件的元數(shù)據(jù)。該元數(shù)據(jù)可以包括文件名、客戶ID和文件尺寸,該元數(shù)據(jù)可以為在步驟602的第一請(qǐng)求中發(fā)出的相同的元數(shù)據(jù)。
在步驟611處,服務(wù)器計(jì)算機(jī)可以確定文件還沒有完全地被接收。服務(wù)器計(jì)算機(jī)可以首先利用文件名來確定文件是否在服務(wù)器計(jì)算機(jī)處存在。如果該文件存在,服務(wù)器計(jì)算機(jī)可以取回與該文件相關(guān)的元數(shù)據(jù)文件,其中該元數(shù)據(jù)文件包含指示已經(jīng)被接收的文件的具體部分的信息(例如,索引)。如果該文件的任何范圍沒有在元數(shù)據(jù)文件中被指示,服務(wù)器計(jì)算機(jī)可以確定該文件還沒有被完全地接收。
在步驟612處,服務(wù)器計(jì)算機(jī)可以向客戶計(jì)算機(jī)發(fā)送對(duì)應(yīng)于文件的缺失部分的缺失開始索引和缺失結(jié)束索引。例如,元數(shù)據(jù)文件可以指示文件有1000的文件尺寸,并且服務(wù)器計(jì)算機(jī)已經(jīng)存儲(chǔ)具有該文件名的文件的索引1到30和71到1000。這可以向服務(wù)器計(jì)算機(jī)指示對(duì)應(yīng)于索引31到70的文件的部分缺失。然后,服務(wù)器計(jì)算機(jī)可以向客戶計(jì)算機(jī)發(fā)送對(duì)應(yīng)于文件的缺失部分的開始索引31和結(jié)束索引70。這可以指示向客戶計(jì)算機(jī)的請(qǐng)求來向服務(wù)器計(jì)算機(jī)發(fā)送對(duì)應(yīng)于索引31到70的缺失部分(例如,以塊)。
在步驟613處,服務(wù)器計(jì)算機(jī)可以接收來自客戶計(jì)算機(jī)的文件缺失的部分。例如,客戶計(jì)算機(jī)可以向服務(wù)器計(jì)算機(jī)發(fā)送具有對(duì)應(yīng)于文件的31到70的索引的塊內(nèi)容的塊。服務(wù)器計(jì)算機(jī)可以存儲(chǔ)塊內(nèi)容,并且更新元數(shù)據(jù)文件來指示對(duì)應(yīng)于索引31到70的范圍被存儲(chǔ)。之后,元數(shù)據(jù)文件可能指示整個(gè)文件已經(jīng)成功地被存儲(chǔ)。服務(wù)器計(jì)算機(jī)可以以恰當(dāng)?shù)姆椒▉砗喜⑽募拇鎯?chǔ)的塊來產(chǎn)生完整的文件。
在上述實(shí)施例描述文件的缺失部分被以單個(gè)塊發(fā)送的同時(shí),實(shí)施例并不被限制于此。例如,客戶計(jì)算機(jī)可以基于動(dòng)態(tài)確定的塊尺寸,選擇將文件的缺失部分以多個(gè)塊發(fā)送。每個(gè)塊可以打包成包括元數(shù)據(jù)的包,并根據(jù)本文描述的實(shí)施例傳送。
在步驟614處,服務(wù)器計(jì)算機(jī)可以發(fā)送確認(rèn)到客戶計(jì)算機(jī),指示文件被完全存儲(chǔ)。這可以向客戶計(jì)算機(jī)指示文件的傳輸已經(jīng)完成,并且沒有文件的部分在服務(wù)器計(jì)算機(jī)處缺失。
本發(fā)明的各實(shí)施例具有多個(gè)優(yōu)點(diǎn)。例如,實(shí)施例使服務(wù)器計(jì)算機(jī)保持對(duì)已經(jīng)被存儲(chǔ)的文件的具體部分的跟蹤。這是有益的,因?yàn)槠湓试S諸如圖6中描述的連接的丟失的中斷,而不要求文件傳輸重啟。通常地,如此重啟可能要求客戶計(jì)算機(jī)重新發(fā)送整個(gè)文件,包括之前發(fā)送的文件的部分。與之對(duì)比,在發(fā)明實(shí)施例中,由于服務(wù)器計(jì)算機(jī)可以識(shí)別還沒有被存儲(chǔ)的文件的具體部分,僅那些識(shí)別的部分可以在通信丟失之后由客戶計(jì)算機(jī)發(fā)送。進(jìn)一步,客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)可以基于每次傳送的實(shí)時(shí)條件動(dòng)態(tài)地確定恰當(dāng)?shù)膲K尺寸。這些特征,由于有效的資源使用(例如,避免過載),可以改善文件傳輸?shù)乃俣群头€(wěn)定性。
C.示例性客戶側(cè)流程
圖7示出根據(jù)本發(fā)明實(shí)施例的示例性客戶側(cè)的流程圖700。圖7可以描述客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間文件傳輸?shù)膶?shí)施例。在某些實(shí)施例中,圖7的客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)可以與在本文描述的其他示圖所包括的客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)有類似的屬性??梢詤⒖紙D3的部件描述圖7。
在S701處,客戶計(jì)算機(jī)可以初始化發(fā)射器配置。該配置可以基于可以由客戶計(jì)算機(jī)載入的配置信息。在某些實(shí)施例中,配置信息可以類似于發(fā)射器配置模塊306所描述的配置信息。
在S702處,客戶計(jì)算機(jī)可以確定數(shù)據(jù)收集器組件是否仍在運(yùn)行。數(shù)據(jù)收集器組件可以收集要從客戶計(jì)算機(jī)傳輸?shù)奈募?。?dāng)數(shù)據(jù)收集器組件在運(yùn)行中,由于文件被鎖定,其他進(jìn)程可能無法利用該文件。在某些實(shí)施例中,資源檢查器模塊304可以,在運(yùn)行可能試圖利用相同資源的任何沖突進(jìn)程前,檢查數(shù)據(jù)收集器組件是否運(yùn)行。
在S703處,如果數(shù)據(jù)收集器仍在運(yùn)行,發(fā)射器可以關(guān)閉。在某些情況中,直到數(shù)據(jù)收集器停止運(yùn)行文件傳輸材開始。
在S704處,如果數(shù)據(jù)收集器不在運(yùn)行,文件傳輸可以被發(fā)起??蛻粲?jì)算機(jī)可以壓縮(例如,zip)要被傳輸?shù)奈募云谕捻樞驅(qū)ξ募判?例如,通過創(chuàng)建日期等),并且以唯一文件名將每個(gè)要傳輸?shù)奈募苿?dòng)到本地文件夾(例如,“未完成文件”文件夾等)。文件名可以包括可以使文件名唯一的任何適合的元素(例如,以時(shí)間戳前綴等)。
在S705處,客戶計(jì)算機(jī)可以將文件保存到在客戶計(jì)算機(jī)上的本地盤720,并且從本地盤720取回用于傳輸?shù)娜魏蜗嚓P(guān)文件。
在S706處,對(duì)于在本地文件夾中的每個(gè)文件可以被重復(fù)的步驟,可以發(fā)起循環(huán)。在示例性情況中,本地文件夾可以為“未完成文件”的文件夾,并且文件可以按創(chuàng)建日期排序。
在S707處,數(shù)據(jù)包可以包括當(dāng)前值來被產(chǎn)生。在某些實(shí)施例中,客戶計(jì)算機(jī)可以利用文件傳輸協(xié)議庫302的特征來管理數(shù)據(jù)的打包和分塊。如果這為發(fā)起的對(duì)于文件的傳輸請(qǐng)求,數(shù)據(jù)包可以包括實(shí)際文件尺寸、實(shí)際文件名、和對(duì)于其他諸如塊尺寸、開始索引和結(jié)束索引的元數(shù)據(jù)的零值。該零值隨著進(jìn)一步文件的傳輸可以被實(shí)際值替換。如果這不是發(fā)起的對(duì)于文件的傳輸請(qǐng)求,數(shù)據(jù)包可以包括實(shí)際文件尺寸、實(shí)際文件名、和對(duì)于諸如塊尺寸、開始索引和結(jié)束索引的元數(shù)據(jù)的實(shí)際值??蛻粲?jì)算機(jī)可以基于從服務(wù)器計(jì)算機(jī)接收的信息和其他動(dòng)態(tài)確定的值(例如,塊尺寸)來更新任何元數(shù)據(jù)值。
例如,客戶計(jì)算機(jī)可以更新塊尺寸來反映對(duì)應(yīng)于要被發(fā)送的塊的恰當(dāng)?shù)膲K尺寸。在某些實(shí)施例中,被客戶計(jì)算機(jī)認(rèn)為恰當(dāng)?shù)膲K尺寸可以為來自服務(wù)器計(jì)算機(jī)的建議的塊尺寸或網(wǎng)絡(luò)窗口長度中的最小。因此,客戶計(jì)算機(jī)可以監(jiān)測(cè)當(dāng)前網(wǎng)絡(luò)條件來確定恰當(dāng)?shù)膲K尺寸。在其他實(shí)施例中,由客戶計(jì)算機(jī)確定的塊尺寸可以基于任何適合的信息和方法被計(jì)算。
在S708處,客戶計(jì)算機(jī)可以確定是否讀取文件字節(jié)來取回要發(fā)送到服務(wù)器計(jì)算機(jī)的塊內(nèi)容(例如,原始數(shù)據(jù))。如果客戶計(jì)算機(jī)確定讀取文件數(shù)據(jù),客戶計(jì)算機(jī)可以訪問本地盤720。在S709處,客戶計(jì)算機(jī)然后可以按客戶計(jì)算機(jī)認(rèn)為恰當(dāng)?shù)某叽?在S707處)的塊,在從服務(wù)器計(jì)算機(jī)接收的開始索引處開始,讀取文件字節(jié)。
在某些情況中,客戶計(jì)算機(jī)可以確定在這點(diǎn)上不讀取文件數(shù)據(jù)。例如,在S710和S711處,客戶計(jì)算機(jī)可以在繼續(xù)文件傳輸之前,首先與服務(wù)器計(jì)算機(jī)認(rèn)證。如果認(rèn)證失敗,沒有文件的部分可以被傳輸。認(rèn)證可以使用任何適合的過程來被建立。
在S712處,客戶計(jì)算機(jī)可以將數(shù)據(jù)包與任何相關(guān)信息打包,并且根據(jù)發(fā)明的實(shí)施例將數(shù)據(jù)包發(fā)送到服務(wù)器計(jì)算機(jī)。數(shù)據(jù)包可以包括對(duì)應(yīng)于由在S709處由客戶計(jì)算機(jī)讀取的文件字節(jié)的塊原始數(shù)據(jù)和其他元數(shù)據(jù)。
在某些情況中,在客戶計(jì)算機(jī)處可能發(fā)生超時(shí)。在某些實(shí)施例中,這個(gè)可以觸發(fā)連接管理器模塊308來通知邏輯管理器模塊310超時(shí)已經(jīng)發(fā)生。如果在S713處沒有達(dá)到超時(shí)閾值(預(yù)先確定的時(shí)間段),客戶計(jì)算機(jī)可以重新向服務(wù)器計(jì)算機(jī)發(fā)送在S712處傳送的文件包。在某些實(shí)施例中,客戶計(jì)算機(jī)可以按周期性的間隔以動(dòng)態(tài)確定的塊尺寸重新發(fā)送數(shù)據(jù)包,直到成功的傳送或達(dá)到超時(shí)閾值。在某些實(shí)施例中,在數(shù)據(jù)包不能成功發(fā)出的時(shí)段期間,客戶計(jì)算機(jī)可以在每個(gè)相繼的傳送嘗試時(shí)選擇利用更小的塊尺寸。
如果在S713處已經(jīng)達(dá)到超時(shí)閾值,在S714處客戶計(jì)算機(jī)可以記錄關(guān)于超時(shí)處理的信息,并且然后重復(fù)在S706處開始的步驟。例如,如在S707中,客戶計(jì)算機(jī)可以產(chǎn)生另一個(gè)要在新的文件傳輸請(qǐng)求中發(fā)送的數(shù)據(jù)包,包括元數(shù)據(jù)(例如,文件名、文件尺寸、客戶ID等)。不管連接中的中斷,只要服務(wù)器計(jì)算機(jī)接收對(duì)應(yīng)于來自客戶計(jì)算機(jī)的文件的此類元數(shù)據(jù),服務(wù)器計(jì)算機(jī)可以確定文件的確定缺失部分,并且基于對(duì)應(yīng)于存儲(chǔ)在服務(wù)器計(jì)算機(jī)處的元數(shù)據(jù)文件中的信息,僅僅請(qǐng)求那些部分。
在S715處,客戶計(jì)算機(jī)可以接收來自服務(wù)器計(jì)算機(jī)的返回?cái)?shù)據(jù)包,包括由服務(wù)器計(jì)算機(jī)更新的元數(shù)據(jù)。該元數(shù)據(jù)可以包括缺失開始索引、缺失結(jié)束索引和建議的塊尺寸。
在S716處,客戶計(jì)算機(jī)可以檢查包含在接收的數(shù)據(jù)包中的索引。在示例性情況中,如果接收的數(shù)據(jù)包包括小于結(jié)束索引的開始索引,這個(gè)可以向客戶計(jì)算機(jī)指示對(duì)于文件的文件傳輸還沒有完成。在S717處,客戶計(jì)算機(jī)可以更新任何值(例如,塊尺寸)和索引,來包含進(jìn)將要被發(fā)回到服務(wù)器計(jì)算機(jī)的數(shù)據(jù)包。在某些情況中,客戶計(jì)算機(jī)可以更新基于客戶計(jì)算機(jī)的當(dāng)前條件動(dòng)態(tài)地確定的塊尺寸。塊尺寸可以小于或等于從服務(wù)器計(jì)算機(jī)接收的建議的塊尺寸。在該值已經(jīng)有客戶計(jì)算機(jī)更新后,可以產(chǎn)生包含這些值的新的數(shù)據(jù)包,并且然后以上面描述的在S707處開始的類似的過程傳送到服務(wù)器計(jì)算機(jī)。
在S718處,如果文件已經(jīng)被完全地傳送,客戶計(jì)算機(jī)可以刪除存儲(chǔ)于本地的文件,并且迭代到下一個(gè)要被傳輸?shù)奈募T谑纠郧闆r中,如果接收的數(shù)據(jù)包沒有小于結(jié)束索引的開始索引,這個(gè)可以向客戶計(jì)算機(jī)指示對(duì)于文件的傳輸已經(jīng)完成。下一個(gè)文件可以按上面描述的類似的過程傳輸。如果在本地文件夾中的所有文件已經(jīng)被傳輸,在S703處,發(fā)射器可以被關(guān)閉。
D.示例性服務(wù)器側(cè)流程
圖8示出根據(jù)本發(fā)明實(shí)施例的示例性服務(wù)器側(cè)的流程圖800。圖8可以描述客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間文件傳輸?shù)膶?shí)施例。在某些實(shí)施例中,圖8的客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)可以與在本文描述的其他示圖所包括的客戶計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)有類似的屬性??梢詤⒖紙D4的部件描述圖8。
在S801處,服務(wù)器計(jì)算機(jī)可以從客戶計(jì)算機(jī)接收用于數(shù)據(jù)包的進(jìn)入的傳送。數(shù)據(jù)包可以作為由客戶計(jì)算機(jī)轉(zhuǎn)換的文件流被接收,并且該數(shù)據(jù)包可能包括元數(shù)據(jù)。在S802處,服務(wù)器計(jì)算機(jī)可以將文件流轉(zhuǎn)換成數(shù)據(jù)包。在S803處,服務(wù)器計(jì)算機(jī)可以通過任何適合的方法確定該數(shù)據(jù)包是否有效。在某些實(shí)施例中,服務(wù)器計(jì)算機(jī)可以利用校驗(yàn)和計(jì)算,其可以核實(shí)在數(shù)據(jù)包中接收的數(shù)據(jù)是有效和完整的。如果數(shù)據(jù)包無效,服務(wù)器計(jì)算機(jī)可以在S804處可以返回錯(cuò)誤。因?yàn)檫@個(gè)可以防止文件的傳輸完成,這個(gè)可以引起客戶計(jì)算機(jī)向服務(wù)器計(jì)算機(jī)重新發(fā)送包括元數(shù)據(jù)(例如,文件名、文件尺寸、客戶ID等)的請(qǐng)求。
在S805處,如果數(shù)據(jù)包為有效,服務(wù)器計(jì)算機(jī)可以確定被請(qǐng)求傳輸?shù)奈募欠裨诜?wù)器計(jì)算機(jī)本地存在。服務(wù)器計(jì)算機(jī)可以檢查至少文件的部分是否存在,利用與在來自客戶計(jì)算機(jī)的元數(shù)據(jù)中接收的文件名相同名稱。如果具有該文件名的文件本地不存在,服務(wù)器計(jì)算機(jī)可以在S807處以該文件名產(chǎn)生新的文件,并且將該新文件存儲(chǔ)在本地盤820。在某些實(shí)施例中,本地盤820可以位于服務(wù)器計(jì)算機(jī)的文件服務(wù)器。
如果擁有唯一文件名的文件的至少部分本地存在,在S806處服務(wù)器計(jì)算機(jī)可以確定與存儲(chǔ)在服務(wù)器計(jì)算機(jī)處的文件相關(guān)的文件長度是否等于接收的數(shù)據(jù)包的元數(shù)據(jù)中指示的文件尺寸。如果文件長度和文件尺寸不匹配,這可以向服務(wù)器計(jì)算機(jī)指示該文件可能被損壞。因此這可以讓服務(wù)器計(jì)算機(jī)在S807處覆蓋該文件。
覆蓋該文件可以包括檢測(cè)本地文件和在服務(wù)器計(jì)算機(jī)處存儲(chǔ)的對(duì)應(yīng)的元數(shù)據(jù)文件,并且將接收的文件包當(dāng)作對(duì)該文件所接收的第一文件包。新文件可以在服務(wù)器計(jì)算機(jī)處以文件名產(chǎn)生。然而,如果文件長度和文件尺寸匹配,在S808處,服務(wù)器計(jì)算機(jī)可以取回存儲(chǔ)在本地盤820的具有相同文件名的文件,并且用包含在所接收的數(shù)據(jù)包中包含的塊更新該文件的內(nèi)容。
在S809處,服務(wù)器計(jì)算機(jī)可以將來自接收的數(shù)據(jù)包的索引的范圍加到對(duì)應(yīng)于文件的元數(shù)據(jù)文件。如果元數(shù)據(jù)文件已經(jīng)存在,在S810中,服務(wù)器計(jì)算機(jī)可以用該索引的范圍更新元數(shù)據(jù)文件。如果在S807處該文件正在被覆蓋并且元數(shù)據(jù)文件被刪除,在S810處可以產(chǎn)生新元數(shù)據(jù)文件,并且服務(wù)器計(jì)算機(jī)可以將索引的范圍加到新產(chǎn)生的元數(shù)據(jù)文件。元數(shù)據(jù)文件可以存儲(chǔ)在本地盤820上。索引的范圍可以對(duì)應(yīng)剛在服務(wù)器計(jì)算機(jī)處存儲(chǔ)的塊,并且可以由開始索引和結(jié)束索引所指示。此信息可以在將來指示服務(wù)器計(jì)算機(jī)對(duì)應(yīng)于該索引的范圍的文件數(shù)據(jù)已經(jīng)被成功地存儲(chǔ)。
在S811處,服務(wù)器計(jì)算機(jī)可以確定要從客戶計(jì)算機(jī)請(qǐng)求的文件的新的索引范圍。在S812處,服務(wù)器計(jì)算機(jī)可以載入對(duì)應(yīng)的元數(shù)據(jù)文件來檢查由開始和結(jié)束索引指示的哪些范圍的文件已經(jīng)被接收。在S813處,基于在對(duì)應(yīng)的元數(shù)據(jù)文件中的信息,服務(wù)器計(jì)算機(jī)可以確定是否有來自文件的缺失的范圍。在元數(shù)據(jù)文件中沒有被指示的任何范圍可能對(duì)應(yīng)缺失的范圍。
在S813處,如果確定有缺失范圍,在S814處服務(wù)器計(jì)算機(jī)可以將該缺失范圍打包成數(shù)據(jù)包。例如,服務(wù)器計(jì)算機(jī)可以將對(duì)應(yīng)于缺失范圍的缺失開始索引和缺失結(jié)束索引包含在數(shù)據(jù)包中。該缺失開始索引和缺失結(jié)束索引可以傳達(dá)給客戶計(jì)算機(jī)還沒有存儲(chǔ)在服務(wù)器計(jì)算機(jī)處的文件的文件字節(jié)的范圍。
在S815處和S816處,服務(wù)器計(jì)算機(jī)可以將數(shù)據(jù)包轉(zhuǎn)換成文件流,并且將該文件流返回到客戶計(jì)算機(jī)。數(shù)據(jù)包可以通過任何適合的通信協(xié)議(例如,HTTP等)發(fā)送。
如果在S813處元數(shù)據(jù)文件指示沒有缺失范圍,服務(wù)器計(jì)算機(jī)可以在S817處打開新的線程。在某些實(shí)施例中,服務(wù)器計(jì)算機(jī)可以繼續(xù)執(zhí)行部署流程,其包括在S818處將壓縮的文件打開(例如,upzip)到工作站文件夾中的專用的文件夾,在S819處刪除壓縮的(例如,zip)文件,和在S820處開始部署。此部署過程可以制作可訪問的文件內(nèi)容和由服務(wù)器計(jì)算機(jī)存儲(chǔ)的其他信息。例如,存儲(chǔ)的文件內(nèi)容和信息,已經(jīng)基于該文件內(nèi)容和信息的分析,可以在接口中顯示。
III.計(jì)算機(jī)系統(tǒng)
本文描述的任何計(jì)算機(jī)系統(tǒng)可以利用任何適合數(shù)目的子系統(tǒng)。這些子系統(tǒng)的示例在圖9的計(jì)算機(jī)裝置10中示出。在某些實(shí)施例中,計(jì)算機(jī)系統(tǒng)包括單一計(jì)算機(jī)裝置,其中子系統(tǒng)可以為計(jì)算機(jī)裝置的組件。在其他實(shí)施例中,計(jì)算機(jī)系統(tǒng)可以包括多個(gè)計(jì)算機(jī)裝置,這些計(jì)算機(jī)裝置的每一個(gè)為一具有內(nèi)部組件的子系統(tǒng)。計(jì)算機(jī)系統(tǒng)可以包括臺(tái)式機(jī)和筆記本電腦、平板電腦、移動(dòng)電話和其他移動(dòng)設(shè)備。
圖9中示出的子系統(tǒng)通過系統(tǒng)總線75互連。示出了附加子系統(tǒng),諸如打印機(jī)74、鍵盤78、存儲(chǔ)設(shè)備79、耦合到顯示裝置82的監(jiān)視器76及其它。耦合到I/O控制器71的外圍設(shè)備和輸入/輸出(I/O)設(shè)備可以通過文獻(xiàn)中已知的任意數(shù)量的裝置連接到計(jì)算機(jī)系統(tǒng),諸如輸入/輸出(I/O)端口77(例如,USB,)。例如,I/O端口77或外部接口81(例如,以太網(wǎng),Wi-Fi等)可被用來將計(jì)算機(jī)裝置10連接到諸如互聯(lián)網(wǎng)之類的網(wǎng)絡(luò)、鼠標(biāo)輸入設(shè)備、或掃描儀。通過系統(tǒng)總線75的互連允許中央處理器73與每個(gè)子系統(tǒng)通信,并控制來自系統(tǒng)存儲(chǔ)器72或存儲(chǔ)設(shè)備79(例如,諸如硬盤或光盤的固定盤)的指令的執(zhí)行,以及子系統(tǒng)之間的信息交換。系統(tǒng)存儲(chǔ)器72和/或存儲(chǔ)設(shè)備79可以包含計(jì)算機(jī)可讀介質(zhì)。另一子系統(tǒng)是數(shù)據(jù)收集設(shè)備85,諸如攝像頭、麥克風(fēng)、加速計(jì)等。本文提及的任何數(shù)據(jù)可從一個(gè)組件輸出到另一個(gè)組件,并且可被輸出到用戶。
計(jì)算機(jī)系統(tǒng)可以包括多個(gè)相同組件或子系統(tǒng),例如,通過外部接口81或內(nèi)部接口連接到一起。在某些實(shí)施例中,計(jì)算機(jī)系統(tǒng)、子系統(tǒng)、或裝置可以通過網(wǎng)絡(luò)通信。在此情況中,可以認(rèn)為一臺(tái)計(jì)算機(jī)是客戶,并且另一臺(tái)計(jì)算機(jī)是服務(wù)器,其中每個(gè)可以是相同計(jì)算機(jī)系統(tǒng)的部分??蛻艉头?wù)器的每個(gè)可以包括多個(gè)系統(tǒng)、子系統(tǒng)或組件。
應(yīng)當(dāng)理解是本發(fā)明的任何實(shí)施例能以控制邏輯的形式實(shí)現(xiàn),該控制邏輯以模塊化或集成的方式使用硬件(例如,專用集成電路或現(xiàn)場可編程門陣列)和/或使用具有通常地可編程處理器的計(jì)算機(jī)軟件。如本文所使用的,處理器包括在相同集成芯片上的單核處理器、多核處理器,或在單一電路板或聯(lián)網(wǎng)的多個(gè)處理單元。基于本文中所提供的公開和教導(dǎo),本領(lǐng)域普通技術(shù)人員將知道并理解使用硬件以及硬件和軟件的組合來實(shí)現(xiàn)本發(fā)明的實(shí)施例的其它方式和/或方法。
本申請(qǐng)中所描述的軟件組件或功能中的任何一個(gè)都可以通過由處理器執(zhí)行的軟件代碼來實(shí)現(xiàn),該處理器使用任何適合的計(jì)算機(jī)語言,諸如例如,Java、C、C++、C#、Objective—C、Swift,或腳本語言,諸如例如,使用傳統(tǒng)或面向?qū)ο蠹夹g(shù)的Perl或Python。軟件代碼可以作為一些列指令或命令存儲(chǔ)在用于存儲(chǔ)和/或傳送的計(jì)算機(jī)可讀介質(zhì)上。適合的非短暫性計(jì)算機(jī)可讀介質(zhì)可以包括隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、諸如硬盤驅(qū)動(dòng)器或軟盤的磁介質(zhì)、或諸如壓縮盤(CD)或DVD(數(shù)字多功能盤)的光介質(zhì)的、閃存存儲(chǔ)器等。該計(jì)算機(jī)可讀介質(zhì)可以為此類存儲(chǔ)或傳送設(shè)備的任意組合。
此類程序也可利用適于通過由符合包括互聯(lián)網(wǎng)的各種協(xié)議的有線、光學(xué)和/或無線網(wǎng)絡(luò)進(jìn)行傳輸?shù)妮d波信號(hào)來編碼和傳輸。由此,根據(jù)本發(fā)明實(shí)施例的計(jì)算機(jī)可讀介質(zhì)可以使用由此程序編碼的數(shù)據(jù)產(chǎn)生。利用程序代碼編碼的計(jì)算機(jī)可讀介質(zhì)可與兼容設(shè)備封裝在一起,或與其它設(shè)備分開地提供(例如,通過互聯(lián)網(wǎng)下載)。任何此類計(jì)算機(jī)可讀介質(zhì)可以位于單個(gè)計(jì)算機(jī)產(chǎn)品(例如,硬盤、CD或整個(gè)計(jì)算機(jī)系統(tǒng))上或內(nèi)部,或可以在系統(tǒng)或網(wǎng)絡(luò)的內(nèi)部的不同計(jì)算機(jī)產(chǎn)品上或內(nèi)部出現(xiàn)。計(jì)算機(jī)系統(tǒng)可以包括監(jiān)視器、打印機(jī)、或用于向用戶提供本文提及的任何結(jié)果的其他適合的顯示。
本文描述的任何方法可以全部地或部分地與可以配置為執(zhí)行步驟的包括一個(gè)或多個(gè)處理器的計(jì)算機(jī)系統(tǒng)執(zhí)行。因此,實(shí)施例可以涉及配置為執(zhí)行本文描述的任何方法的步驟的計(jì)算機(jī)系統(tǒng),其潛在擁有執(zhí)行相應(yīng)步驟和相應(yīng)組的步驟的不同組件。雖然表示為編號(hào)的步驟,本文方法的步驟可以同時(shí)或以不同順序執(zhí)行。另外,這些步驟的部分可以與其他方法的其他步驟的部分使用。同時(shí),全部或部分的步驟可以為選擇性的。此外,任何方法的任何步驟可以與模塊、單元、電路、或用于執(zhí)行這些步驟的其他裝置執(zhí)行。
在不偏離本發(fā)明的各實(shí)施例的精神和范圍的情況下,可以以任何合適的方式組合特定實(shí)施例的具體細(xì)節(jié)。然而,發(fā)明的其他實(shí)施例可以涉及與每個(gè)單獨(dú)方面或這些單獨(dú)方面的特定結(jié)合相關(guān)的特定實(shí)施例。
出于說明和描述的目的,已給出本發(fā)明的示例實(shí)施例的上述描述。不旨在窮舉或?qū)⒈景l(fā)明限制于所描述的精確形式,而且鑒于以上教導(dǎo),許多修改和變化是可能的。
對(duì)“一”或“所述”的引用,除非特別指示為相反的情況,旨在表示“一個(gè)或多個(gè)”?!盎颉钡氖褂弥荚诒硎尽鞍缘幕颉?,而不是“排斥性的或”,除非特別指示為相反的情況。
本文提及的所有專利、專利申請(qǐng)、出版物、和描述出于所有目的通過引用整體納入于此。沒有任何內(nèi)容被承認(rèn)為是現(xiàn)有技術(shù)。