專(zhuān)利名稱:數(shù)據(jù)同步協(xié)議的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及用于數(shù)據(jù)同步的協(xié)議。
背景技術(shù):
可以使用諸如開(kāi)放移動(dòng)聯(lián)盟——數(shù)據(jù)同步協(xié)議OMADS/SyncML(以前稱為 SyncML協(xié)議)之類(lèi)的同步協(xié)議來(lái)執(zhí)行客戶端與服務(wù)器之間的數(shù)據(jù)同步。OMS DA/ SyncML是使數(shù)據(jù)類(lèi)(dataclass)能夠串行同步并且針對(duì)每個(gè)數(shù)據(jù)類(lèi)可能需要5個(gè)或者更多 個(gè)往返行程(roundtrip)的同步協(xié)議。
發(fā)明內(nèi)容
公開(kāi)了用于同步客戶端設(shè)備與服務(wù)器之間的數(shù)據(jù)的技術(shù)和系統(tǒng)等。在一個(gè)方面,同步數(shù)據(jù)包括接收用于發(fā)起同步會(huì)話的請(qǐng)求。該請(qǐng)求包括針對(duì)一 個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多 個(gè)改變。一個(gè)或多個(gè)狀況碼被生成,以指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否被 接受?;谒傻臓顩r碼,針對(duì)各個(gè)數(shù)據(jù)類(lèi)使用所接受的同步模式來(lái)選擇性地更新與 對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變相關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。經(jīng)更新的一個(gè) 或多個(gè)數(shù)據(jù)項(xiàng)在服務(wù)器處被選擇性地交付(commit)。實(shí)現(xiàn)方式可以可選地包括如下特征中的一項(xiàng)或多項(xiàng)。生成所述一個(gè)或多個(gè)狀況 碼可以包括訪問(wèn)從先前的同步會(huì)話保存的信息以判斷是否使用所述所提議同步模式來(lái)同 步所述一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。接收所述請(qǐng)求可以包括并行地接收針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi) 的所提議同步模式。此外,接收所述請(qǐng)求可以包括接收包含快速同步模式、慢速同步模 式或復(fù)位同步模式的所提議同步模式。此外,接收所述請(qǐng)求可以包括接收快速同步模 式,所述快速同步模式允許僅交換要更新的數(shù)據(jù)項(xiàng)。同步會(huì)話可在包含兩個(gè)消息的一個(gè) 往返行程中完成。當(dāng)所述同步會(huì)話中斷時(shí),所述快速同步模式可被再次接受??稍趤?lái)自 客戶端設(shè)備的單個(gè)消息中接收所述所提議同步模式和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的所述一 個(gè)或多個(gè)改變。當(dāng)客戶端設(shè)備發(fā)送用以交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)的命令時(shí),可在 所述服務(wù)器處選擇性地交付所述經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。另外,可拒絕所述所提議 同步模式;并且可利用不同的同步模式對(duì)所接收的請(qǐng)求作出響應(yīng)。在另一個(gè)方面,一種包含在計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使 數(shù)據(jù)處理裝置執(zhí)行各種操作。該計(jì)算機(jī)程序產(chǎn)品可操主來(lái)致使數(shù)據(jù)處理裝置接收用于發(fā) 起同步會(huì)話的請(qǐng)求。該請(qǐng)求包括針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式, 和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變。計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使數(shù)據(jù)處理 裝置生成狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否被接受。計(jì) 算機(jī)程序產(chǎn)品可操作來(lái)致使數(shù)據(jù)處理裝置基于所生成的狀況碼,使用針對(duì)各個(gè)數(shù)據(jù)類(lèi)的 所接受同步模式來(lái)選擇性地更新與對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變相關(guān)聯(lián)的 一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。另外,計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使數(shù)據(jù)處理裝置在服務(wù)器處選擇性地交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。實(shí)現(xiàn)方式可以可選地包括如下特征中的一項(xiàng)或多項(xiàng)。該計(jì)算機(jī)程序產(chǎn)品可致使 數(shù)據(jù)處理裝置基于從先前的同步會(huì)話保存的信息來(lái)生成所述一個(gè)或多個(gè)狀況碼。該計(jì) 算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置并行地接收針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模 式。該計(jì)算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置接收包含快速同步模式、慢速同步模式或復(fù) 位同步模式的所提議同步模式。該計(jì)算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置接收快速同步模 式,所述快速同步模式允許僅交換要更新的數(shù)據(jù)項(xiàng)。對(duì)數(shù)據(jù)項(xiàng)的更新操作可以(1)創(chuàng)建 新項(xiàng)(添加),(2)修改現(xiàn)有項(xiàng)的特性(修改)或者(3)刪除現(xiàn)有項(xiàng)(刪除)。該計(jì)算機(jī) 程序產(chǎn)品可致使數(shù)據(jù)處理裝置在包含兩個(gè)消息的一個(gè)往返行程中完成所述同步會(huì)話。該 計(jì)算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置在所述同步會(huì)話中斷時(shí)再次接受快速同步模式。該 計(jì)算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置在單個(gè)消息中接收所述所提議同步模式和對(duì)所述一 個(gè)或多個(gè)數(shù)據(jù)類(lèi)的所述一個(gè)或多個(gè)改變。該計(jì)算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置當(dāng)客戶 端設(shè)備發(fā)送用以交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)的命令時(shí),在服務(wù)器處選擇性地交付所 述經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。另外,該計(jì)算機(jī)程序產(chǎn)品可致使數(shù)據(jù)處理裝置拒絕所述 所提議同步模式并利用不同的同步模式對(duì)所接收的請(qǐng)求作出響應(yīng)。在另一個(gè)方面,一種用于同步數(shù)據(jù)的服務(wù)器包括處理器,被配置來(lái)操作傳送 協(xié)議,該傳送協(xié)議使得能夠開(kāi)放到一個(gè)或多個(gè)客戶端設(shè)備的一個(gè)或多個(gè)連接。處理器還 被配置來(lái)操作同步協(xié)議,該同步協(xié)議使得能夠經(jīng)由所開(kāi)放的一個(gè)或多個(gè)連接而在所述服 務(wù)器和所述一個(gè)或多個(gè)客戶端設(shè)備之間進(jìn)行數(shù)據(jù)同步。同步協(xié)議使得服務(wù)器能夠接收用 于發(fā)起同步會(huì)話的請(qǐng)求。該請(qǐng)求包括針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模 式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變。同步服務(wù)器還使得服務(wù)器能夠生成 一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否被接受。 同步協(xié)議還使得服務(wù)器能夠基于所生成的狀況碼,使用針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所接受同步模 式來(lái)選擇性地更新與對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變相關(guān)聯(lián)的一個(gè)或多個(gè)數(shù) 據(jù)項(xiàng)。同步協(xié)議還使得能夠在服務(wù)器處選擇性地交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。實(shí)現(xiàn)方式可以可選地包括如下特征中的一項(xiàng)或多項(xiàng)。處理器可被配置來(lái)訪問(wèn)數(shù) 據(jù)倉(cāng)庫(kù)以基于所接收的一個(gè)或多個(gè)改變來(lái)更新一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。處理器可被配置來(lái)操 作所述同步協(xié)議以基于從先前的同步會(huì)話保存的信息來(lái)接受或拒絕針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所 提議同步模式。處理器可被配置來(lái)操作所述同步協(xié)議以并行地接收針對(duì)兩個(gè)或更多個(gè)數(shù) 據(jù)類(lèi)的所提議同步模式。此外,處理器可被配置來(lái)操作所述同步協(xié)議以接收包含快速同 步模式、慢速同步模式或復(fù)位同步模式的所提議同步模式。處理器可被配置來(lái)操作所述 同步協(xié)議以接收包含快速同步模式的所提議同步模式,所述快速同步模式允許所述一個(gè) 或多個(gè)客戶端設(shè)備僅發(fā)送要更新的數(shù)據(jù)項(xiàng)。處理器可被配置來(lái)操作所述同步協(xié)議以在所 述同步會(huì)話中斷時(shí)接收用于再次發(fā)起快速同步的請(qǐng)求。處理器可被配置來(lái)操作所述同步 協(xié)議以在包含兩個(gè)消息的一個(gè)往返行程中完成所述同步會(huì)話。處理器可被配置來(lái)操作所 述同步協(xié)議以在來(lái)自所述一個(gè)或多個(gè)客戶端設(shè)備中的至少一個(gè)客戶端設(shè)備的單個(gè)消息中 接收所述所提議同步模式和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的所述一個(gè)或多個(gè)改變。處理器可 被配置來(lái)操作所述同步協(xié)議以在所述一個(gè)或多個(gè)客戶端設(shè)備中的一個(gè)客戶端設(shè)備發(fā)送用 以交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)的命令時(shí),在所述服務(wù)器處選擇性地交付所述經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。此外,處理器可被配置來(lái)操作所述同步協(xié)議以拒絕所述所提議同 步模式并利用不同的同步模式對(duì)所述請(qǐng)求作出響應(yīng)。在另一個(gè)方面,同步數(shù)據(jù)包括向服務(wù)器發(fā)送用于發(fā)起同步會(huì)話的請(qǐng)求。該請(qǐng)求 包括針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi) 的一個(gè)或多個(gè)改變。一個(gè)或多個(gè)狀況碼被接收用以指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步 模式是否已被所述服務(wù)器接受?;谒邮盏臓顩r碼,針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所接受同步模 式被用來(lái)從所述服務(wù)器接收對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的附加改變。此外,在客戶端設(shè)備 處交付從所述服務(wù)器接收的所述附加改變。實(shí)現(xiàn)方式可以可選地包括如下特征中的一項(xiàng)或多項(xiàng)。一個(gè)或多個(gè)狀況碼可以指 示出針對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的至少一個(gè)數(shù)據(jù)類(lèi)的所提議同步模式已被所述服務(wù)器 拒絕。包含與被拒絕的同步模式不同的同步模式的另一請(qǐng)求可被發(fā)送到服務(wù)器。此外, 可在單個(gè)消息中向所述服務(wù)器發(fā)送所述所提議同步模式和所述一個(gè)或多個(gè)改變??刹⑿?地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。另外,可針對(duì)所述兩個(gè)或更多個(gè)數(shù) 據(jù)類(lèi)中的每一個(gè)數(shù)據(jù)類(lèi)并行地發(fā)送不同的所提議同步模式。例如,可針對(duì)這些數(shù)據(jù)類(lèi)中 的一個(gè)數(shù)據(jù)類(lèi)發(fā)送所提議快速同步模式,并且針對(duì)這些數(shù)據(jù)類(lèi)中的另一數(shù)據(jù)類(lèi)發(fā)送所提 議慢速同步模式。在所述同步會(huì)話中斷之后,可使用被接受的同步協(xié)議來(lái)再次發(fā)起同步 會(huì)話。在另一方面,包含在計(jì)算機(jī)可讀介質(zhì)中的一種計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使數(shù) 據(jù)處理裝置執(zhí)行一個(gè)或多個(gè)操作。該計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使數(shù)據(jù)處理裝置向服務(wù) 器發(fā)送用于發(fā)起同步會(huì)話的請(qǐng)求。該請(qǐng)求包括針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提 議同步模式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變。該計(jì)算機(jī)程序產(chǎn)品可操作 來(lái)致使數(shù)據(jù)處理裝置接收一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提 議同步模式是否已被所述服務(wù)器接受?;谒邮盏臓顩r碼,該計(jì)算機(jī)程序產(chǎn)品可操作 來(lái)使用所接受的同步模式來(lái)從所述服務(wù)器接收對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的附加改變,并 在客戶端設(shè)備處交付從所述服務(wù)器接收的所述附加改變。實(shí)現(xiàn)方式可以可選地包括如下特征中的一項(xiàng)或多項(xiàng)。該計(jì)算機(jī)程序產(chǎn)品可操作 來(lái)致使數(shù)據(jù)處理裝置執(zhí)行包括如下處理的操作接收指示出針對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi) 中的至少一個(gè)數(shù)據(jù)類(lèi)的所提議同步模式已被所述服務(wù)器拒絕的一個(gè)或多個(gè)狀況碼;以及 發(fā)送另一請(qǐng)求,該另一請(qǐng)求包含與被拒絕的同步模式不同的同步模式。該計(jì)算機(jī)程序產(chǎn) 品可操作來(lái)致使數(shù)據(jù)處理裝置在單個(gè)消息中向所述服務(wù)器發(fā)送所述所提議同步模式和所 述一個(gè)或多個(gè)改變。該計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使數(shù)據(jù)處理裝置并行地發(fā)送針對(duì)兩個(gè) 或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。該計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使所述數(shù)據(jù)處理裝置 針對(duì)所述兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)數(shù)據(jù)類(lèi)并行地發(fā)送不同的所提議同步模式。該 計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使所述數(shù)據(jù)處理裝置針對(duì)所述數(shù)據(jù)類(lèi)中的一個(gè)數(shù)據(jù)類(lèi)發(fā)送所 提議的快速同步模式,并針對(duì)所述數(shù)據(jù)類(lèi)中的另一數(shù)據(jù)類(lèi)發(fā)送所提議的慢速同步模式。 該計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致使所述數(shù)據(jù)處理裝置在所述同步會(huì)話中斷之后使用所接受 的同步協(xié)議來(lái)再次發(fā)起同步會(huì)話。在另一方面,一種客戶端設(shè)備包括處理器,該處理器被配置來(lái)操作傳送協(xié)議 和同步協(xié)議,傳送協(xié)議使得能夠開(kāi)放到服務(wù)器的一個(gè)或多個(gè)連接,同步協(xié)議使得能夠經(jīng)由所開(kāi)放的一個(gè)或多個(gè)連接而在所述客戶端設(shè)備和所述服務(wù)器之間進(jìn)行數(shù)據(jù)同步。同步 協(xié)議使得所述客戶端設(shè)備能夠向服務(wù)器發(fā)送用于發(fā)起同步會(huì)話的請(qǐng)求。該請(qǐng)求包括針對(duì) 一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或 多個(gè)改變。同步協(xié)議還使得客戶端設(shè)備能夠接收一個(gè)或多個(gè)狀況碼,所述狀況碼指示出 針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否已被所述服務(wù)器接受?;谒邮盏臓顩r碼,同 步協(xié)議使得客戶端設(shè)備能夠使用所接受的同步模式來(lái)從所述服務(wù)器接收對(duì)所述一個(gè)或多 個(gè)數(shù)據(jù)類(lèi)的附加改變。此外,同步協(xié)議使得客戶端設(shè)備能夠在客戶端設(shè)備處交付從所述 服務(wù)器接收的所述附加改變。實(shí)現(xiàn)方式可以可選地包括如下特征中的一項(xiàng)或多項(xiàng)。處理器可被配置來(lái)操作所 述同步協(xié)議以接收指示出針對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的至少一個(gè)數(shù)據(jù)類(lèi)的所提議同步 模式已被所述服務(wù)器拒絕的一個(gè)或多個(gè)狀況碼;以及發(fā)送另一請(qǐng)求,該另一請(qǐng)求包含與 被拒絕的同步模式不同的同步模式。處理器可被配置來(lái)操作所述同步協(xié)議以在單個(gè)消息 中向所述服務(wù)器發(fā)送所述所提議同步模式和所述一個(gè)或多個(gè)改變。處理器可被配置來(lái)操 作所述同步協(xié)議以并行地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。處理器可被 配置來(lái)操作所述同步協(xié)議以并行地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式包括 針對(duì)所述兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)數(shù)據(jù)類(lèi)并行地發(fā)送不同的所提議同步模式。處 理器可被配置來(lái)操作所述同步協(xié)議以針對(duì)所述數(shù)據(jù)類(lèi)中的一個(gè)數(shù)據(jù)類(lèi)發(fā)送所提議的快速 同步模式,并針對(duì)所述數(shù)據(jù)類(lèi)中的另一數(shù)據(jù)類(lèi)發(fā)送所提議的慢速同步模式。處理器可被 配置來(lái)操作所述同步協(xié)議以在所述同步會(huì)話中斷之后使用所接受的同步協(xié)議來(lái)再次發(fā)起 同步會(huì)話。根據(jù)本說(shuō)明書(shū)的技術(shù)和系統(tǒng)可被實(shí)現(xiàn)來(lái)潛在地提供各種優(yōu)點(diǎn)。如本說(shuō)明書(shū)中所 述的同步協(xié)議可以減少完成同步會(huì)話的往返行程的數(shù)目(來(lái)回交換消息的次數(shù))。如本說(shuō) 明書(shū)所述的同步協(xié)議可以在例如一個(gè)往返行程中完成同步會(huì)話。如本說(shuō)明書(shū)所述的同步 協(xié)議使得可以并行地針對(duì)多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)進(jìn)行同步模式協(xié)商。因此,可在一個(gè)消 息中針對(duì)多個(gè)數(shù)據(jù)類(lèi)發(fā)送對(duì)同步模式協(xié)商的請(qǐng)求。此外,本說(shuō)明書(shū)中所述的同步協(xié)議使 能了額字段級(jí)差異化和記錄級(jí)差異化。本說(shuō)明書(shū)中所述的同步協(xié)議比諸如SyncML之類(lèi)的傳統(tǒng)協(xié)議簡(jiǎn)單。可用于該同 步協(xié)議的命令集簡(jiǎn)單而且還可擴(kuò)展。與SyncML不同,本說(shuō)明書(shū)所述的同步協(xié)議將每一 個(gè)消息表示為文本或二進(jìn)制特性列表文件(plist)。另外,本說(shuō)明書(shū)所述的同步協(xié)議高效 且魯棒。例如,在服務(wù)器上提供了復(fù)雜的錨邏輯。此外,該同步協(xié)議能夠容忍不可靠的 網(wǎng)絡(luò)。即使在網(wǎng)絡(luò)連接中斷時(shí),錨邏輯也確保一旦再次連接就進(jìn)行高效同步。此外,該 同步協(xié)議可維持相對(duì)較小的消息大小。本說(shuō)明書(shū)所述的同步協(xié)議是富產(chǎn)的(rich)。例如,該同步協(xié)議使能了客戶端設(shè) 備與服務(wù)器之間的設(shè)備信息交換。此外,該同步協(xié)議提供了便利且豐富的數(shù)據(jù)表示。
圖1A是示出用于使能客戶端設(shè)備與服務(wù)器之間的數(shù)據(jù)同步的系統(tǒng)的框圖。圖1B示出了服務(wù)器的示例組件。圖1C示出了客戶端設(shè)備的示例組件。
圖2是示出消息的頭部元素的示例元素的表格。圖3示出了示例特性列表文件(plist)。圖4是示出命令請(qǐng)求元素的示例元素的表格。圖5是示出命令響應(yīng)元素的示例元素的表格。圖6是示出get命令的示例參數(shù)的表格。圖7是示出get命令響應(yīng)的示例參數(shù)的表格。圖8是示出put命令的示例參數(shù)的表格。圖9是示出put命令響應(yīng)的示例參數(shù)的表格。圖10是示出delete命令的示例參數(shù)的表格。圖11是示出delete命令響應(yīng)的示例參數(shù)的表格。圖12是示出sync-start命令的示例參數(shù)的表格。圖13是示出sync-start命令響應(yīng)的示例參數(shù)的表格。圖14是示出sync-changes命令的示例參數(shù)的表格。圖15是示出sync-changes命令響應(yīng)的示例參數(shù)的表格。圖16是示出sync-commit命令的示例參數(shù)的表格。圖17是示出sync-commit命令響應(yīng)的示例參數(shù)的表格。圖18是示出sync-cancel命令的示例參數(shù)的表格。圖19是示出sync-omcel命令響應(yīng)的示例參數(shù)的表格。圖20是示出示例狀況元素的表格。圖21是示出可包括在消息頭部、命令和命令響應(yīng)中的狀況的示例狀況碼的表格。圖22是描述接收到命令的給定狀況對(duì)會(huì)話或者消息中的其它命令的效果的表格。圖23是示出anchors元素的示例鍵的表格。圖24示出了同步會(huì)話的示例。圖25示出了客戶端設(shè)備與服務(wù)器之間的最佳快速或復(fù)位同步的示例。圖26示出了快速或復(fù)位數(shù)據(jù)同步的替代示例。圖27示出了另一示例數(shù)據(jù)同步會(huì)話,其中,idmap被從會(huì)話1推遲到會(huì)話2的 開(kāi)始。圖28圖示了慢速同步的示例。圖29示出了并行地同步多個(gè)數(shù)據(jù)類(lèi)的示例。圖30示出了使用檢查點(diǎn)錨的示例同步會(huì)話。圖31是示出示例檢查點(diǎn)錨的表格。圖32示出了對(duì)Devicelnfo元素的示例鍵-值對(duì)進(jìn)行定義的表格。圖33是示出過(guò)濾器設(shè)定的示例鍵_值對(duì)的表格。圖34是協(xié)議句法的增廣型巴科斯諾爾范式(ABNF)描述。圖35示出了示例同步會(huì)話。圖36示出了用于復(fù)位同步會(huì)話的四種示例消息的概要。圖37a和37b示出了從客戶端設(shè)備發(fā)送到服務(wù)器的示例消息。
圖38a、38b、38c和38d示出了從服務(wù)器發(fā)送到客戶端設(shè)備的示例消息。圖39a、39b和39c示出了從客戶端設(shè)備發(fā)送的示例消息。圖40a和40b示出了從服務(wù)器發(fā)送的示例消息。圖41示出了用于快速同步的兩種示例消息的概要。圖42a和42b示出了從客戶端設(shè)備發(fā)送的用于快速同步的示例消息。圖43a、43b和43c示出了響應(yīng)于客戶端設(shè)備所發(fā)送的消息而從服務(wù)器發(fā)送的示 例消息。圖44a和44b示出了用于同步客戶端設(shè)備和服務(wù)器的示例處理。各幅圖中的相似參考符號(hào)和指定指示相似元素。
具體實(shí)施例方式公開(kāi)了用于使客戶端設(shè)備能夠與服務(wù)器之間的空中(OTA,over-the-air)同步的 技術(shù)和系統(tǒng)。特別地,無(wú)線結(jié)構(gòu)的數(shù)據(jù)同步協(xié)議可以使得客戶端設(shè)備能夠與服務(wù)器進(jìn)行 接口連接(interface)以對(duì)各種數(shù)據(jù)進(jìn)行同步。這種協(xié)議可用來(lái)例如同步諸如iPhone 之類(lèi)的手持設(shè)備和諸如.Mac 服務(wù)器之類(lèi)的服務(wù)器之間的Mac 操作系統(tǒng)x(OS X) SyncServices 數(shù)據(jù)。此說(shuō)明書(shū)中描述的OTA同步協(xié)議依賴于底層網(wǎng)絡(luò)傳送、例如使用傳送層安全措 施(TLS)來(lái)執(zhí)行認(rèn)證和/或授權(quán)以及消息安全/加密。同步協(xié)議可以使用超文本傳送協(xié) 議(HTTP)傳送協(xié)議或者其它類(lèi)似的能夠在設(shè)備和服務(wù)器之間交換同步協(xié)議消息的傳送 協(xié)議來(lái)使能(enable)這些數(shù)據(jù)傳送。同步協(xié)議可以經(jīng)由諸如HTTP傳送之類(lèi)的傳送來(lái)使能協(xié)議消息的交換。經(jīng)由傳 送交換的各個(gè)消息包括頭部元素和主體元素。主體元素可以包括一系列的命令和/或命 令響應(yīng)元素。同步協(xié)議向各個(gè)消息、命令和命令響應(yīng)指派唯一標(biāo)簽(label)以確保適當(dāng)排 序和丟失檢測(cè)。例如,標(biāo)簽可以包括用于對(duì)消息、命令和命令響應(yīng)進(jìn)行排序的一系列數(shù) 字。通過(guò)使用標(biāo)簽,由同步協(xié)議而不是傳送(例如HTTP)確保了適當(dāng)排序和丟失檢測(cè), 即使在網(wǎng)絡(luò)協(xié)議不強(qiáng)制實(shí)施消息排序的情況下也是如此。該同步協(xié)議比諸如同步標(biāo)記語(yǔ)言(SyncML)之類(lèi)的傳統(tǒng)協(xié)議更簡(jiǎn)單??捎糜谠?同步協(xié)議的命令集簡(jiǎn)單且可擴(kuò)展。例如,三種靈活的基原(primitive)命令可用于操縱資 源。另外,四種“sync”族命令(family command)可用于數(shù)據(jù)同步。此外,可以跨消 息邊界對(duì)命令進(jìn)行分割。與SyncML不同,在此說(shuō)明書(shū)中描述的同步協(xié)議將每個(gè)消息表 示為文本或二進(jìn)制特性列表文件(plist)。在Mac OS X Cocoa、NeXTSTEP和GNUstep 編程架構(gòu)中,plist是存儲(chǔ)序列化對(duì)象的文件。Plist通常被用來(lái)存儲(chǔ)用戶設(shè)定,這類(lèi)似于 Microsoft Windows 上的Windows注冊(cè)表的功能。特性列表文件還被用來(lái)存儲(chǔ)有關(guān)軟 件包(bundle)和應(yīng)用的信息。很容易使用諸如NSPropertyListSerialization類(lèi)之類(lèi)的標(biāo)準(zhǔn) 操作系統(tǒng)(OS)特征來(lái)生成和解析Plist。此外,此說(shuō)明書(shū)中描述的同步協(xié)議使用簡(jiǎn)單的 同步狀態(tài)機(jī)。此說(shuō)明書(shū)中描述的同步協(xié)議是高效且魯棒的。例如,在服務(wù)器上提供了復(fù)雜的 錨邏輯(anchorlogic)。錨是用來(lái)跟蹤同步狀態(tài)的標(biāo)記符(tag)或標(biāo)簽。此外,該同步協(xié) 議可并行地對(duì)多個(gè)數(shù)據(jù)類(lèi)進(jìn)行同步。該同步協(xié)議能夠容忍不可靠的網(wǎng)絡(luò)。即使在網(wǎng)絡(luò)連接被中斷時(shí),錨邏輯也確保一旦再次連接就利用最少的數(shù)據(jù)重傳來(lái)進(jìn)行高效同步。此 外,該同步協(xié)議能夠維持相對(duì)較小的消息大小。此說(shuō)明書(shū)中描述的同步協(xié)議是豐富的。例如,該同步協(xié)議使能了客戶端設(shè)備與 服務(wù)器之間的設(shè)備信息交換。此外,該同步協(xié)議提供了便利且豐富的數(shù)據(jù)表示。圖Ia是用于使能客戶端設(shè)備與服務(wù)器之間的數(shù)據(jù)同步的系統(tǒng)100的框圖。系 統(tǒng)100包括經(jīng)由網(wǎng)絡(luò)150而與一個(gè)或多個(gè)服務(wù)器120接口連接的一個(gè)或多個(gè)客戶端設(shè)備 110??蛻舳嗽O(shè)備110可以包括移動(dòng)設(shè)備,例如移動(dòng)電話112、個(gè)人數(shù)字助理(PDA) 114、 手持?jǐn)?shù)據(jù)處理設(shè)備116等。移動(dòng)電話112包括諸如iPhone 之類(lèi)的智能電話和集成移動(dòng) 設(shè)備。手持?jǐn)?shù)據(jù)處理設(shè)備可以包括諸如MP3播放器和iPod 設(shè)備之類(lèi)的音頻播放設(shè)備??蛻舳嗽O(shè)備110使用諸如HTTP傳送協(xié)議之類(lèi)的傳送協(xié)議來(lái)與服務(wù)器120進(jìn)行接 口連接以完成安全數(shù)據(jù)連接。通過(guò)傳送協(xié)議,同步協(xié)議140使能了經(jīng)連接的客戶端設(shè)備 110與服務(wù)器之間的數(shù)據(jù)同步。所同步的數(shù)據(jù)包括諸如聯(lián)系人(contact)(例如,地址和電 話號(hào)碼)、日歷(calendar)等的各種數(shù)據(jù)類(lèi)??山?jīng)由網(wǎng)絡(luò)150執(zhí)行數(shù)據(jù)同步,網(wǎng)絡(luò)150包 括諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、以太網(wǎng)、因特網(wǎng)等的有線和無(wú)線網(wǎng)絡(luò)。圖Ib示出了服務(wù)器120的示例組件。服務(wù)器120可以包括處理器160和存儲(chǔ)器 170,以及除此之外的其它組件。處理器160可以包括中央處理單元(CPU)或者能夠執(zhí)行 計(jì)算機(jī)程序的其它類(lèi)別的邏輯機(jī)器。存儲(chǔ)器可以包括非易失性存儲(chǔ)設(shè)備,例如固定硬盤(pán) 驅(qū)動(dòng)器或者可移除存儲(chǔ)設(shè)備??梢瞥鎯?chǔ)設(shè)備可以包括致密閃存單元、USB存儲(chǔ)棒等。 存儲(chǔ)器170還可包括易失性存儲(chǔ)器,例如各種形式的隨機(jī)存取存儲(chǔ)器。處理器160可以操作傳送協(xié)議130以開(kāi)放到一個(gè)或多個(gè)客戶端設(shè)備110的傳送連 接。處理器160可以經(jīng)由所開(kāi)放的傳送連接來(lái)操作同步協(xié)議140以使能服務(wù)器120與客 戶端設(shè)備110之間的數(shù)據(jù)同步。傳送協(xié)議130和同步協(xié)議140可被加載并在存儲(chǔ)器170 上運(yùn)行以由處理器160來(lái)執(zhí)行或操作。例如,如下面參考圖2-44b所述,處理器160可 以操作同步協(xié)議140來(lái)接收來(lái)自客戶端設(shè)備110的請(qǐng)求以發(fā)起同步會(huì)話。圖Ic示出了客戶端設(shè)備110的示例組件??蛻舳嗽O(shè)備110也可包括處理器180 和存儲(chǔ)器190,以及除此之外的其它組件。處理器180可以包括中央處理單元(CPU)或 者能夠執(zhí)行計(jì)算機(jī)程序的其它類(lèi)別的邏輯機(jī)器。存儲(chǔ)器可以包括非易失性存儲(chǔ)設(shè)備,例 如固定硬盤(pán)驅(qū)動(dòng)器或者可移除存儲(chǔ)設(shè)備??梢瞥鎯?chǔ)設(shè)備可以包括致密閃存單元、USB 存儲(chǔ)棒等。存儲(chǔ)器190還可包括易失性存儲(chǔ)器,例如各種形式的隨機(jī)存取存儲(chǔ)器。處理器180可操作傳送協(xié)議130以開(kāi)放到一個(gè)或多個(gè)服務(wù)器120的傳送連接。處 理器180可以經(jīng)由所開(kāi)放的傳送連接來(lái)操作同步協(xié)議140以使能客戶端設(shè)備110與服務(wù)器 120之間的數(shù)據(jù)同步。傳送協(xié)議130和同步協(xié)議140可被加載并在存儲(chǔ)器190上運(yùn)行以由 處理器180執(zhí)行或操作。例如,如下面參考圖2-44b所述,處理器180可以操作同步協(xié) 議140來(lái)向服務(wù)器120發(fā)送請(qǐng)求以發(fā)起同步會(huì)話。同步是通過(guò)周期性地比較從上次知道兩個(gè)不同數(shù)據(jù)存儲(chǔ)庫(kù)相一致起各個(gè)數(shù)據(jù)存 儲(chǔ)庫(kù)所發(fā)生的改變來(lái)維持這兩個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)之間的一致性的處理。數(shù)據(jù)存儲(chǔ)庫(kù)可以包括 在一側(cè)的客戶端設(shè)備110和在另一側(cè)的服務(wù)器120。為了彼此同步,數(shù)據(jù)存儲(chǔ)庫(kù)配置有 各種能力。例如,每個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)被配置為在被請(qǐng)求時(shí)供應(yīng)所有數(shù)據(jù)。另外,每個(gè)數(shù)據(jù) 存儲(chǔ)庫(kù)被配置為識(shí)別并供應(yīng)從上次同步起的改變。每個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)被配置為對(duì)要保持同步的格局(schema)達(dá)成一致。每個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)被配置為對(duì)所支持的數(shù)據(jù)表示達(dá)成一致。 每個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)被配置為對(duì)同步基原(即,添加、更新、刪除)的語(yǔ)義(semantic)達(dá)成一 致。此外,每個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)被配置為如果在同步期間發(fā)生問(wèn)題就回滾(rollback)到前一狀 態(tài),以避免破壞這些數(shù)據(jù)存儲(chǔ)庫(kù)。所同步的數(shù)據(jù)遵循關(guān)系模型(E-R),并被劃分成“格局”或“數(shù)據(jù)類(lèi)”,這些 “格局”或“數(shù)據(jù)類(lèi)”對(duì)結(jié)構(gòu)化數(shù)據(jù)類(lèi)型(“實(shí)體”)的定義進(jìn)行了分組。給定數(shù)據(jù)類(lèi) 中的實(shí)體可以通過(guò)“關(guān)系”來(lái)相互引用。分立數(shù)據(jù)類(lèi)中的實(shí)體之間的關(guān)系被禁用,因此 每個(gè)數(shù)據(jù)類(lèi)完全獨(dú)立于其他數(shù)據(jù)類(lèi)。從用戶的角度來(lái)看,數(shù)據(jù)類(lèi)可以看起來(lái)由分開(kāi)的專(zhuān) 門(mén)應(yīng)用來(lái)管理。例如,“聯(lián)系人”數(shù)據(jù)類(lèi)可以主要由地址簿應(yīng)用來(lái)管理,而“日歷”數(shù) 據(jù)類(lèi)可以由日歷應(yīng)用來(lái)管理。同步服務(wù)器140使能各種同步模式,包括慢速、復(fù)位和快速??蛻舳嗽O(shè)備和服 務(wù)器首次同步時(shí),針對(duì)一數(shù)據(jù)類(lèi)的全部數(shù)據(jù)被交換,以使被認(rèn)為相同的現(xiàn)有數(shù)據(jù)項(xiàng)“匹 配”。為了針對(duì)隨后的同步操作優(yōu)化同步和網(wǎng)絡(luò)帶寬利用率,客戶端設(shè)備和服務(wù)器應(yīng)當(dāng) 僅交換自從二者上次同步以來(lái)改變過(guò)的數(shù)據(jù)。這樣,每一實(shí)體(即客戶端設(shè)備或服務(wù)器) 應(yīng)當(dāng)能夠確定哪些本地改變應(yīng)當(dāng)被發(fā)送到另一實(shí)體。另外,每一實(shí)體應(yīng)當(dāng)能夠檢測(cè)是否 發(fā)生了下述情形所述情形要求在“快速”同步能夠恢復(fù)之前交換更多數(shù)據(jù)。當(dāng)客戶端設(shè)備110和服務(wù)器120首次同步以建立共同基準(zhǔn)線用于隨后的僅差異數(shù) 據(jù)交換時(shí),可以要求慢速同步模式。在慢速同步期間,客戶端設(shè)備110把針對(duì)一數(shù)據(jù)類(lèi) 的全部數(shù)據(jù)發(fā)送到服務(wù)器120。服務(wù)器試圖將這些數(shù)據(jù)項(xiàng)與服務(wù)器120已知的那些項(xiàng)匹 配。未能執(zhí)行正確的“身份匹配”可能產(chǎn)生復(fù)制的數(shù)據(jù)。服務(wù)器120于是用客戶端設(shè) 備110處缺失的數(shù)據(jù)項(xiàng)來(lái)作出響應(yīng)。復(fù)位同步模式被用來(lái)用服務(wù)器的數(shù)據(jù)把客戶端設(shè)備上的數(shù)據(jù)類(lèi)的全部數(shù)據(jù)復(fù) 位。當(dāng)數(shù)據(jù)結(jié)構(gòu)已被推送到設(shè)備Iio時(shí),或者在服務(wù)器120或設(shè)備110確定該設(shè)備的本 地?cái)?shù)據(jù)受到破壞的情況下,可能發(fā)生這種情況。設(shè)備110不發(fā)送數(shù)據(jù),并且服務(wù)器用該 數(shù)據(jù)類(lèi)的完整數(shù)據(jù)結(jié)構(gòu)來(lái)作出響應(yīng)??焖偻侥J绞亲罡咝У哪J?,尤其是在使用有限帶寬的連接的時(shí)候??蛻舳?設(shè)備Iio僅發(fā)送自從與服務(wù)器120上次同步以來(lái)改變過(guò)的那些數(shù)據(jù)。服務(wù)器120僅用客 戶端設(shè)備110外部的已改變的那些數(shù)據(jù)來(lái)作出響應(yīng)。同步會(huì)話可以遵循獨(dú)特的一組階段,包括協(xié)商、拉取、混合(mingle)、推送和 交付。術(shù)語(yǔ)“拉取”和“推送”可以相對(duì)于服務(wù)器處理進(jìn)行定義??蛻舳嗽O(shè)備110在 拉取階段將其本地改變發(fā)送到服務(wù)器120,并在服務(wù)器的推送階段接收更新。在協(xié)商階段,雙方(客戶端設(shè)備110和服務(wù)器120)可以交換來(lái)自前一同步會(huì)話 的信息以確定它們針對(duì)當(dāng)前會(huì)話同意使用哪種同步模式。為了幫助識(shí)別并組織同步會(huì) 話,向每一同步會(huì)話指派“同步錨”。如果客戶端設(shè)備Iio此前已與服務(wù)器120同步, 則客戶端設(shè)備110很可能期待特定的同步模式??蛻舳嗽O(shè)備110可能相信其能夠與服務(wù) 器120快速同步,但是服務(wù)器120可能希望復(fù)位該設(shè)備。當(dāng)所請(qǐng)求的同步模式被雙方接 受時(shí),同步可繼續(xù)進(jìn)行到拉取階段。在拉取階段,客戶端設(shè)備110將其經(jīng)改變的記錄(或者在同步模式為“慢速”同 步模式的情況下,所有記錄)發(fā)送給服務(wù)器120。服務(wù)器120可以拒絕無(wú)效的改變。
一旦已經(jīng)接收到所有改變,服務(wù)器120就進(jìn)入混合階段并將其數(shù)據(jù)庫(kù)中的任何 待決更新與來(lái)自客戶端設(shè)備110的改變合并。混合的結(jié)果是應(yīng)當(dāng)被推送給客戶端設(shè)備110 的一組沖突改變和一組更新。服務(wù)器120可使用啟發(fā)式算法來(lái)自動(dòng)解決所有沖突。在一 些實(shí)現(xiàn)方式中,可能希望客戶端設(shè)備110解決某些沖突。同步協(xié)議140可被設(shè)計(jì)為允許 對(duì)沖突進(jìn)行表示并將這些沖突從服務(wù)器120發(fā)送到客戶端設(shè)備110。同步協(xié)議140可被設(shè) 計(jì)為使得要由用戶在客戶端設(shè)備上解決的沖突能夠被發(fā)送到同步服務(wù)器120。在推送階段,來(lái)自服務(wù)器120的更新被發(fā)送到客戶端設(shè)備110。當(dāng)客戶端設(shè)備 110已接收到所有更新時(shí),進(jìn)入交付階段。雙方(客戶端設(shè)備110和服務(wù)器120)可以一 致認(rèn)定同步是成功的,堅(jiān)持它們當(dāng)前的同步錨,并將所交換的數(shù)據(jù)交付給它們各自的數(shù) 據(jù)存儲(chǔ)庫(kù)。在同步期間的任何時(shí)間點(diǎn),任一方可以決定取消同步并將任何改變回滾到本地 數(shù)據(jù)存儲(chǔ)庫(kù)。可以響應(yīng)于如下事件中的一個(gè)或多個(gè)事件而明確地發(fā)生取消當(dāng)預(yù)期以 外的或者無(wú)效的數(shù)據(jù)被發(fā)送時(shí);當(dāng)同步狀態(tài)機(jī)中的預(yù)期跳轉(zhuǎn)未被跟隨時(shí);當(dāng)客戶端設(shè)備 110與服務(wù)器120之間的通信被中斷時(shí);或者當(dāng)發(fā)生某些其它問(wèn)題時(shí)??稍诟鞣N粒度(granularity)下對(duì)數(shù)據(jù)差異進(jìn)行同步。在交換同步數(shù)據(jù)時(shí),對(duì)于 記錄級(jí)的差異化(RLD),客戶端設(shè)備110和服務(wù)器120可以針對(duì)每個(gè)經(jīng)改變的記錄發(fā)送 完整數(shù)據(jù)??商娲?,對(duì)于字段級(jí)差異(FLD),可以僅發(fā)送每一經(jīng)改變的記錄的改變字 段。FLD相對(duì)于RLD更加優(yōu)選,特別是當(dāng)數(shù)據(jù)記錄包括許多字段或者包含大量數(shù)據(jù)(例 如,聯(lián)系人數(shù)據(jù)類(lèi)中的圖像)時(shí)。服務(wù)器120可動(dòng)態(tài)地支持從客戶端設(shè)備110接收的數(shù)據(jù)的RLD和FLD兩種表 示。改變的數(shù)據(jù)表示指示出客戶端設(shè)備110對(duì)于給定數(shù)據(jù)類(lèi)使用的是RLD還是FLD。 這在用以支持FLD的元信息的維持復(fù)雜度不合理時(shí),向客戶端設(shè)備的數(shù)據(jù)存儲(chǔ)庫(kù)實(shí)現(xiàn)方 式提供了最大限度的靈活性。當(dāng)接收到RLD改變時(shí),為了處理、存儲(chǔ)和通信效率,服務(wù)器120內(nèi)部地將改變 轉(zhuǎn)換為FLD。服務(wù)器120期待RLD客戶端設(shè)備110發(fā)送完整記錄。受客戶端設(shè)備110 支持并且從客戶端設(shè)備的數(shù)據(jù)記錄缺失的數(shù)據(jù)字段被假設(shè)為已由客戶端設(shè)備110清除/刪 除。但是,可以提供機(jī)制來(lái)使得客戶端設(shè)備110在沒(méi)有發(fā)送數(shù)據(jù)字段值的情況下指示出 某些數(shù)據(jù)字段異常值未經(jīng)改變。標(biāo)識(shí)(ID)映射是另一基本同步概念。每一經(jīng)同步的數(shù)據(jù)具有通用唯一記錄ID 即UUID。為了效率,服務(wù)器120可以使用Mac OS X上的SyncService的UUID。可替 代地,客戶端設(shè)備110上的應(yīng)用可以使用其用于數(shù)據(jù)的本地唯一 ID(LUID)以例如提升本 地?cái)?shù)據(jù)存儲(chǔ)庫(kù)效率。服務(wù)器120使得客戶端設(shè)備110數(shù)據(jù)存儲(chǔ)庫(kù)能夠按需使用它們自身的LUID來(lái)參 考數(shù)據(jù)項(xiàng)。在此情況中,服務(wù)器120維護(hù)LUID到UUID的映射以使得客戶端設(shè)備110能 夠通過(guò)使用其自身的本地ID來(lái)透明地參考全局記錄。當(dāng)針對(duì)數(shù)據(jù)類(lèi)接受了 “慢速”或
“復(fù)位”同步模式時(shí),服務(wù)器120重新建立新映射。同步協(xié)議140包括使用諸如HTTP之類(lèi)的傳送協(xié)議130在服務(wù)器120和設(shè)備110 之間交換的一系列消息。同步協(xié)議140包括在傳送協(xié)議130上交換的消息??蛻舳嗽O(shè)備 110和服務(wù)器120在同步協(xié)議中的角色與它們?cè)谕ㄐ?傳送協(xié)議中的角色不同。例如,對(duì)于HTTP傳送130,設(shè)備110對(duì)于傳送130總是為客戶端,因而設(shè)備110僅作出請(qǐng)求。 但是,在同步協(xié)議140的消息協(xié)議中,客戶端設(shè)備110和服務(wù)器120兩者都可以向彼此發(fā) 出消息命令。傳送傳送協(xié)議130對(duì)服務(wù)器120與客戶端設(shè)備110之間的消息交換進(jìn)行管理。傳 送協(xié)議130可以包括HTTP傳送或其它合適的傳送,例如,可擴(kuò)展消息傳遞和存在協(xié)議 (XMPP)。傳送協(xié)議130層對(duì)認(rèn)證進(jìn)行處置(handle),因而同步協(xié)議140無(wú)需處置安全/ 認(rèn)證處理。這使得同步協(xié)議140能夠更高效地工作并要求少量的往返行程。例如,如果 需要,可以使用傳送層安全(TLS)來(lái)確保所發(fā)送數(shù)據(jù)的安全性。此外,傳送協(xié)議130還 可執(zhí)行消息成塊化(message chunking)。傳送協(xié)議130無(wú)需保證遞送或消息排序,因?yàn)橥?步協(xié)議140具有用于進(jìn)行遞送或消息排序以及檢測(cè)消息丟失的必要信息。HTTP定義了八種方法或“verb(動(dòng)詞)”,這些方法或“verb”指示出要對(duì) 資源執(zhí)行的動(dòng)作。HTTP 方法包括 HEAD、GET、POST、PUT、DELETE、TRACE、 OPTIONS禾口 CONNECT。當(dāng)使用HTTP作為傳送協(xié)議130時(shí),將使用POST方法。POST 方法將待處理的數(shù)據(jù)(例如,來(lái)自HTML表格的數(shù)據(jù))提交給所識(shí)別的資源。數(shù)據(jù)包括 在請(qǐng)求的主體中。POST方法的結(jié)果可能導(dǎo)致新資源的創(chuàng)建或者現(xiàn)有資源的更新,或者兩 者都有。例如,服務(wù)器120可以提供在諸如“http://sync.mac.com/ota”之類(lèi)的URL上的 OTA同步服務(wù)。當(dāng)使用文本plist表示時(shí),“Content-Type(內(nèi)容-類(lèi)型)”頭部應(yīng)當(dāng)是
"text/xml"。當(dāng)使用二進(jìn)制plist表示時(shí),“Content-Type”頭部必須存在并且必須是 “application/octet-stream”。 “Content-Length (內(nèi)容-長(zhǎng)度)”頭部必須指示出消息的 大小。User-Agent(用戶-代理)字符串被用來(lái)標(biāo)識(shí)客戶端協(xié)議實(shí)現(xiàn)方式。User-Agent 字符串應(yīng)當(dāng)具有如下形式“Mobile/1A543”??商娲?,可使用DeviceInfo方法來(lái)確 定設(shè)備實(shí)現(xiàn)方式版本。OTA協(xié)議結(jié)構(gòu)會(huì)話由客戶端設(shè)備110與服務(wù)器120之間的多個(gè)協(xié)議消息的交換組成。HTTP傳 送實(shí)現(xiàn)方式可以使用cookies來(lái)維持與服務(wù)器120的會(huì)話。客戶端設(shè)備110與服務(wù)器120 中的任一者可以通過(guò)在消息頭部中設(shè)定標(biāo)志(flag)來(lái)指示出會(huì)話完成。每一消息包含可 由接收者處理的一系列命令??蛻舳嗽O(shè)備110可被指定為發(fā)起到服務(wù)器120的連接的那方。使用同步協(xié)議140交換的消息被表示為經(jīng)UTF-8編碼的OS X特性列表(即,字 典,dictionary)。這種表示輔助在客戶端設(shè)備110和服務(wù)器120兩者上的創(chuàng)建、序列化和 解析。同步協(xié)議140可以支持plist的可擴(kuò)展標(biāo)記語(yǔ)言(XML)和二進(jìn)制兩種表示。二進(jìn) 制plist可以比XML plist更緊湊60%到80%。當(dāng)使用XML plist表示時(shí),所發(fā)送的任何二 進(jìn)制數(shù)據(jù)都被序列化為64基(base-64)編碼的NSData對(duì)象,并且文本數(shù)據(jù)根據(jù)RFC3076 而被XML轉(zhuǎn)義(XML-escaped)。每一協(xié)議消息包括兩個(gè)根元素頭部和主體。圖2是圖示出示例頭部元素210的表格。消息頭部元素210可以包括service、 deviceid、version、userid、sequence、msisdn、final、result 等。與每一頭部兀素 210 相對(duì) 應(yīng)地,還示出了頭部元素的類(lèi)型220。圖2還示出了各個(gè)頭部元素210是否必需(230)。此外,在圖2中提供了每一頭部元素的簡(jiǎn)短描述240。頭部元素210可以標(biāo)識(shí)發(fā)送消息的實(shí)體(例如,客戶端設(shè)備110或服務(wù)器 120),并且可以包含某些會(huì)話控制信息。頭部元素210是消息的必需元素,并且頭部 元素的值是字典。頭部中的元素210例如可以指示出源實(shí)體(“deviceid”)和目標(biāo)服 務(wù)("service")、目標(biāo)賬戶(“userid” )和消息序列號(hào)("sequence")。此外,
"version"元素可以指示出正在使用的同步協(xié)議版本。例如,圖2在描述240欄中示出 當(dāng)前版本是“1.0”。這些元素210應(yīng)當(dāng)全部出現(xiàn)在消息中。圖 2 還示出頭部元素 210 中的 service、deviceid、version、userid、sequence 禾口 msisdn的值被設(shè)定為字符串。例如,sequence元素的值對(duì)于給定會(huì)話是從“1”起單調(diào) 增加的整數(shù)值。Sequence元素被用來(lái)指示出會(huì)話的消息排序。Service元素的值是標(biāo)識(shí)諸如同步服務(wù)器之類(lèi)的目標(biāo)服務(wù)的名稱的字符串。 Userid元素的值是指示出消息的目標(biāo)賬戶的字符串。Userid元素可以標(biāo)識(shí)在傳送協(xié)議130 上向服務(wù)器120認(rèn)證了的主要用戶(principal)??蛻舳嗽O(shè)備110的deviceid是唯一地標(biāo)識(shí) 設(shè)備硬件的字符串。對(duì)于iPhone 和iPod 觸摸設(shè)備,deviceid元素可以是集成電路卡 (ICCID)值。具有GSM無(wú)線電的客戶端設(shè)備110也可發(fā)送msisdn元素以指示出當(dāng)前安 裝的/活動(dòng)的安全信息管理(SIM)卡的電話號(hào)碼。Msisdn值可以隨會(huì)話改變(例如,當(dāng) 用戶替換SIM卡時(shí))而改變,而不會(huì)影響同步行為。Final元素在發(fā)送者(例如客戶端設(shè)備110)認(rèn)為它那側(cè)的會(huì)話將完成時(shí)出現(xiàn)在頭 部中。final元素是具有TRUE值的布爾類(lèi)型(Boolean)。當(dāng)final元素標(biāo)志存在時(shí),認(rèn) 為會(huì)話完成。發(fā)送者隨后可以釋放任何與會(huì)話相關(guān)的資源,并且不需要接收者發(fā)送另一 消息。接收者可以發(fā)送另一消息來(lái)返回未完成的命令響應(yīng)。但是,接收者不應(yīng)發(fā)送任 何進(jìn)一步的命令請(qǐng)求。Userid和service元素的值對(duì)于給定會(huì)話中的所有消息應(yīng)當(dāng)恒定。 Deviceid元素的值對(duì)于發(fā)送實(shí)體而言應(yīng)當(dāng)保持恒定。換言之,雖然服務(wù)器120和客戶端 設(shè)備110可以具有不同的值,但是這些值可以不變。Result元素可以存在于消息頭部中用以指示消息的總體狀況。為了協(xié)議簡(jiǎn)短起 見(jiàn),對(duì)于沒(méi)有頭部狀況的任何消息暗示S_OK狀況。當(dāng)檢測(cè)到消息不被接受時(shí),result元 素出現(xiàn)在頭部中。當(dāng)數(shù)據(jù)殘缺時(shí)或者當(dāng)接收者遭遇會(huì)話致命狀況時(shí),消息可不被接受。 Non-OK狀況值指示出在前的消息主體未被處理,該消息的所有命令都未被執(zhí)行,并且 會(huì)話應(yīng)當(dāng)被終止。例如,E_BadReqUeSt(703)的頭部狀況值指示出前一消息是殘缺的。E_ LimitExceeded(611)的頭部狀況值指示出前一消息的大小超過(guò)了接收者的能力。此外, E_ServiceBusy(700)、E_ServiceUnavailable (701)禾Π E_RetryLater (704)的頭部狀況值指示 出服務(wù)器120在處理請(qǐng)求方面正在經(jīng)歷困難。圖3示出了示例plist300。示例plist 300包括頭部310和主體320。頭部310包 括各種示例頭部元素312、314、316、318和319。例如,示出了具有字符串值"fl234567 a0745a890a86b5556d9e020202bRX8“的示例 deviceid元素 312。此外,示出 了具有字符串 值“14155338207”的示例msisdn元素。另外,還示出了具有值“1”的示例sequence 元素。Plist 300還包括具有sync字符串值的示例service元素。Plist 300還包括具有字符 串值“1.0”的示例version元素。消息的主體包括要由接收者處理的一系列命令請(qǐng)求和/或命令響應(yīng)。主體元素是消息的必需元素,并且主體的值被表示為一系列的命令或命令響應(yīng)字典。當(dāng)發(fā)送者沒(méi) 有命令要發(fā)送時(shí),主體元素可以為空。按命令序列順序來(lái)處理主體中的命令。設(shè)備110和服務(wù)器120兩者都可以在同一消息中發(fā)送命令請(qǐng)求和響應(yīng)。這可以 取決于當(dāng)前會(huì)話的狀態(tài)。同步協(xié)議中的命令可以分成兩個(gè)一般種類(lèi)(1)影響發(fā)送者、接收者和對(duì)消息 或會(huì)話中的其它命令的處理的狀態(tài)的命令;和(2)不影響前述狀態(tài)的命令。給定的無(wú) 狀態(tài)命令是否成功執(zhí)行可能不會(huì)隱式地影響消息中的其它命令。有狀態(tài)命令以“命令 族”前綴(例如,用于所有的數(shù)據(jù)同步命令的“sync-”)開(kāi)始。命令族前綴還提供一 種有用的命令名稱空間機(jī)制,該機(jī)制允許服務(wù)器120支持針對(duì)不同客戶端設(shè)備110的任 意一組服務(wù)。在給定消息中,連續(xù)地對(duì)給定“命令族”中的命令進(jìn)行處理,并且如果 任意命令返回不成功狀況,則可能根本不對(duì)該族中的后續(xù)命令進(jìn)行處理。例如,在此情 況中可以返回具有如下?tīng)顩r碼的命令響應(yīng)該狀況碼指示出命令尚未被處理(例如,E_ CommandNotProcessed)。非最后消息的接收者在會(huì)話的下一個(gè)消息中包括針對(duì)每個(gè)命令的一個(gè)或多個(gè)命 令響應(yīng)。最后消息的接收者在最后消息是在傳送層請(qǐng)求上發(fā)送的(即,傳送響應(yīng)是可預(yù) 期的)情況下,包括針對(duì)每個(gè)命令的一個(gè)或多個(gè)命令響應(yīng)。最后消息的接收者在最后消 息是在傳送層響應(yīng)上發(fā)送的情況下,包括針對(duì)每個(gè)命令的一個(gè)或多個(gè)命令響應(yīng)。三個(gè)無(wú)狀態(tài)基原命令可被定義為“get”、“put”和“delete”。這些無(wú)狀態(tài) 命令可用于在同步協(xié)議140內(nèi)實(shí)現(xiàn)任意對(duì)象交換或代表性狀態(tài)轉(zhuǎn)遞(RESTful)語(yǔ)義。這例 如可用于執(zhí)行管理動(dòng)作、轉(zhuǎn)遞設(shè)備設(shè)定或能力、或者參考二進(jìn)制大對(duì)象或其它元數(shù)據(jù), 而無(wú)需服務(wù)器120執(zhí)行數(shù)據(jù)同步操作。當(dāng)先驗(yàn)地檢測(cè)到給定命令或命令響應(yīng)的數(shù)據(jù)太大時(shí),發(fā)送者可以將它們分割成 在連續(xù)消息中發(fā)送的多個(gè)片段。給定命令可由于各種原因和/或約束(包括存儲(chǔ)器約束、 傳送約束等)而被分割。圖4是示出包括在命令請(qǐng)求中的示例命令元素的表格。每個(gè)命令請(qǐng)求或命令響 應(yīng)由字典表示。對(duì)于命令請(qǐng)求,可以提供各種命令元素410。示例命令元素可以包括
“name”元素、“sequence”元素和“params”元素。這些命令元素410對(duì)于所有命 令都應(yīng)當(dāng)存在。“name”和“sequence”元素的值420是字符串。“params”元素的
值應(yīng)當(dāng)是字典。字典是鍵(key)/值配對(duì)的映射表。鍵是字符串,值是取決于特定命令 的其它類(lèi)型。另外,對(duì)于每個(gè)命令元素,值的類(lèi)型420被示出在表格的第二欄。第三欄 430指示該命令元素是否是必需的。此外,在最后一欄示出了每個(gè)命令元素的簡(jiǎn)短描述 440。類(lèi)似于消息,命令可以向sequence元素指派對(duì)于每個(gè)會(huì)話單調(diào)增加的整數(shù)值。 例如,整數(shù)值可以開(kāi)始于“1”并且針對(duì)每個(gè)會(huì)話單調(diào)增加?;趕equence元素的檢測(cè) 值,接收者按序列號(hào)順序來(lái)處理命令。Name元素是必需元素,其指示出命令的名稱。Name元素的值是字符串。命令請(qǐng)求使用params元素來(lái)將命令的參數(shù)傳遞給接收者。Params元素是必需元 素,其具有包括字典在內(nèi)的值。具體的參數(shù)元素和值可取決于具體的命令而變化,如圖 4所示。
當(dāng)發(fā)送者需要指示出命令被分割成多個(gè)片段時(shí),命令需要more元素。每個(gè) 片段重復(fù)使用原始命令的“sequence”值。當(dāng)存在時(shí),more元素的值是Boolean值
"TRUE,,ο圖5是示出示例命令響應(yīng)元素的表格。命令響應(yīng)元素包括“name”、 “sequence”、 “params”、 “more”、 "result,,禾口 “response”。針對(duì)每個(gè)命令響應(yīng)
元素,提供了值的類(lèi)型520。Name和sequence元素的值例如是字符串。Params元素的 值是字典。More和response元素的值是Boolean值“TRUE”,result元素的值是數(shù)組。表格第三欄530示出了各個(gè)命令響應(yīng)元素是否是必需的。另外,針對(duì)每個(gè)命令 響應(yīng),在表格第四欄中呈現(xiàn)了簡(jiǎn)短描述540。例如,name元素描述命令的名稱,例如 “get”。此外,與命令請(qǐng)求相對(duì)應(yīng)的命令響應(yīng)的sequence元素應(yīng)當(dāng)與母命令請(qǐng)求具有相 同的sequence值。類(lèi)似于命令,params元素被命令響應(yīng)用來(lái)向接收者傳遞命令響應(yīng)的參 數(shù)。Params元素是必需元素,其具有包括字典在內(nèi)的值。具體的參數(shù)元素和值可以取決 于具體的命令響應(yīng)而變化,如圖5所示。另外,命令響應(yīng)使用與其所關(guān)聯(lián)的命令請(qǐng)求相 同的參數(shù)值。Response元素指示出消息主體項(xiàng)是命令響應(yīng)。沒(méi)有response元素則指示出主體 是命令請(qǐng)求。Response元素的值是值為“TRUE”的Boolean。命令響應(yīng)使用被指派了整數(shù)值的sequence元素。如上所述,被指派給sequence 元素的值對(duì)應(yīng)于此前由接收者發(fā)送的命令sequence。接收者基于sequence值按序列順序 來(lái)處理命令響應(yīng)。正常而言,發(fā)送者嚴(yán)格地每在給定消息中接收到一個(gè)命令就發(fā)送一個(gè) 命令響應(yīng)。但是,如果命令響應(yīng)的狀況是S_NotCompleted(指示出對(duì)命令的處理尚未完 成),則發(fā)送者可以在后續(xù)消息中發(fā)送針對(duì)該命令的另一命令響應(yīng)。可替代地,如果命令 被分割成多個(gè)片段,則可針對(duì)每一命令片段發(fā)送一個(gè)命令響應(yīng)。Result元素是包括在命令響應(yīng)中的必需元素。Result元素的值是指示出命令請(qǐng)求 的結(jié)果的一個(gè)或多個(gè)狀況項(xiàng)的數(shù)組。當(dāng)不能以及時(shí)的方式(例如在客戶端的傳送請(qǐng)求超 時(shí)之前)完成命令時(shí),接收者可以返回諸如S_NOtCOmpleted(602)之類(lèi)的狀況來(lái)指示出命 令未完成。這個(gè)狀況并不是指示命令成功與否,而是向命令發(fā)送者通知結(jié)果將稍后在會(huì) 話中可得。當(dāng)在接收到最后狀況之前會(huì)話終止時(shí),假定失敗狀況,例如E_Failed狀況。 未知命令請(qǐng)求產(chǎn)生未知狀況值,例如EJJnknownCommand(608)。此外,對(duì)于有狀態(tài)命 令的預(yù)期以外命令產(chǎn)生狀態(tài)差錯(cuò)值,例如E_StateError(610)。在接收者在處理有狀態(tài)命令時(shí)遭遇差錯(cuò)的情況下,針對(duì)消息中的同一命令 族的后續(xù)有狀態(tài)命令可能根本就不被處理。在此情況中,針對(duì)這些命令返回諸如£_ CommandNotProcessed (609)之類(lèi)的狀況以指示出命令未被處理。取決于情形,發(fā)送者可 以再次嘗試這些命令。命令定義圖 6、7、8、9、10、11、12、13、14、15、16、17、18 和 19 是示出命令和命令
定義的示例的表格。同步協(xié)議140定義了在同步會(huì)話期間可發(fā)送的這些命令。命令的此 列表并不是包含所有命令的列表??梢蕴砑悠渌顏?lái)擴(kuò)展并延伸同步協(xié)議以提供其它 服務(wù)?;?br>
圖6、7、8、9、10和11所列出的命令是可以修改接收者上的任意資源的無(wú)狀 態(tài)命令??捎玫臒o(wú)狀態(tài)命令包括“get”、“put”和“delete”。這些無(wú)狀態(tài)命令能 夠?qū)崿F(xiàn)同步協(xié)議140內(nèi)的對(duì)象交換或RESTfol語(yǔ)義。每個(gè)命令可以包括一個(gè)或多個(gè)參 數(shù),例如 “uri”、 "value"、 “item-type,,、 “items,,、 “idmap,,、 "userid"、
“authtype”、“auth”、“version”、“anchors” 等等。這些參數(shù)中的一些是必需的, 而其它是可選的。例如,“uri”參數(shù)是被指派了字符串值的必需參數(shù)?!皍ri”參數(shù)可以指定要 訪問(wèn)的所希望資源。同步協(xié)議140沒(méi)有指定“uri”參數(shù)是表示客戶端設(shè)備110或服務(wù) 器120上的實(shí)際資源(例如,文件系統(tǒng)路徑)還是虛擬資源?!皏alue”參數(shù)的類(lèi)型由客 戶端設(shè)備110和服務(wù)器120來(lái)確定。另外,“value”參數(shù)的類(lèi)型并不由同步協(xié)議140指 定。“value”參數(shù)的邏輯類(lèi)型可以使用“item-type”參數(shù)來(lái)顯式地指定。無(wú)論如何,
"value"參數(shù)的表示必須是有效的特性列表類(lèi)型。出于限制對(duì)所指示URI的訪問(wèn)的目的,接收者可以使用消息的“userid”作為 經(jīng)授權(quán)的主要用戶。如果會(huì)話授權(quán)不夠充分,則命令中可以可選地包括“userid”、
“authtype” 禾口 “auth” 元素。圖6是示出get命令及其關(guān)聯(lián)參數(shù)610的表格,關(guān)聯(lián)參數(shù)610包括“uri”、 “userid”、“authtype”和“auth”。這些參數(shù)中的每一個(gè)被指派了字符串值620。表
格還示出了這些參數(shù)中的任一個(gè)是否是必需的630。雖然uri參數(shù)是必需的(由核選標(biāo)記 (checkmark)指示),但是其余參數(shù)可以可選地包括在get命令中。此外,還提供了參數(shù) 的描述640。Uri參數(shù)的值描述要取得的數(shù)據(jù)對(duì)象的URI??蛇xuserid參數(shù)的值描述是否 可選地覆蓋(override)消息的userid。可選authtype參數(shù)的值可以描述可選的認(rèn)證類(lèi)型。 可選auth字符串值的值可以描述可選的認(rèn)證證書(shū)。圖7是示出get命令響應(yīng)的示例參數(shù)710的表格。這些示例參數(shù)包括“uri”、 “value”和“item-type”。關(guān)聯(lián)的參數(shù)值720對(duì)于這些參數(shù)而言是字符串。第四欄730
示出uri和value參數(shù)是必需的而item-type是可選的。還示出了參數(shù)的描述740。類(lèi)似 于get命令,get命令響應(yīng)的uri參數(shù)描述get命令所請(qǐng)求的數(shù)據(jù)對(duì)象的URI。Value參數(shù) 描述URI的值。例如,get命令使得發(fā)送者能夠從接收者請(qǐng)求希望的數(shù)據(jù)對(duì)象或值。作 為響應(yīng),接收者向get命令的發(fā)送者發(fā)送get命令響應(yīng)。Get命令響應(yīng)包括value參數(shù),用 以針對(duì)get命令所指示的URI返回結(jié)果值。此外,get命令響應(yīng)的可選item-type參數(shù)描 述值的類(lèi)型。圖8是示出put命令的示例參數(shù)的表格。Put命令使得發(fā)送者能夠?qū)⑷我鈹?shù)據(jù)對(duì) 象轉(zhuǎn)遞給接收者。示例參數(shù)810包括“uri”、“value”、“item-type”、“userid”、
"authtype"和“auth”。該表格示出這些參數(shù)810中的每一個(gè)被指派了字符串參數(shù)值 820。此外,表格還示出參數(shù)是否是必需的830。例如,uri和value參數(shù)是必需的而其 余參數(shù)是可選的。最后一欄示出各個(gè)參數(shù)810的描述840。Uri參數(shù)的值表示要替換的 數(shù)據(jù)對(duì)象的URI。Value參數(shù)指定要放入到接收者的值。Item-type參數(shù)描述值的邏輯類(lèi) 型??蛇x的userid參數(shù)的值描述是否可選地覆蓋消息的userid??蛇xauthtype參數(shù)的值 可以描述可選的認(rèn)證類(lèi)型??蛇xauth字符串值的值可以描述可選的認(rèn)證證書(shū)。圖9是示出put命令響應(yīng)的示例參數(shù)910的表格。作為對(duì)put命令的響應(yīng),接收者發(fā)送包括uri參數(shù)的put命令響應(yīng)。如第四欄930中的核選標(biāo)記所示,uri參數(shù)是必需參 數(shù)。參數(shù)類(lèi)型920是uri參數(shù)的字符串。類(lèi)似于put命令,uri參數(shù)描述940響應(yīng)于put 命令而替換的數(shù)據(jù)對(duì)象的URI。圖10是示出delete命令的示例參數(shù)的表格。Delete命令包括各種參數(shù)1010,例 如“uri”、“userid”、“authtype”和“auth”。參數(shù)類(lèi)型1020對(duì)于這些參數(shù)而言是 字符串。如第四欄1030中的核選標(biāo)記所示,uri參數(shù)是必需的。其余參數(shù)是可選的。參 數(shù)1010的描述1040類(lèi)似于針對(duì)get和put命令所描述的那些。Delete命令使得發(fā)送者能 夠請(qǐng)求去除指定的URI。圖11是示出delete命令響應(yīng)的示例參數(shù)1110的表格。Delete命令響應(yīng)包括uri 參數(shù)。表格示出uri參數(shù)類(lèi)型1120是字符串。Uri參數(shù)是必需的(1130),并因而包括在 delete命令響應(yīng)中。表格還包括對(duì)參數(shù)的描述1140。例如,字符串類(lèi)型uri參數(shù)描述響 應(yīng)于delete命令而刪除的對(duì)象的URI。圖12、13、14、15、16、17、18和19所列出的命令是有狀態(tài)命令。同步協(xié)議 70還提供了有狀態(tài)sync族命令和命令響應(yīng)。有狀態(tài)命令包括sync-start、sync-changes、 sync-commit和sync-cancel。這些有狀態(tài)命令使能了客戶端設(shè)備110與服務(wù)器120之間的 結(jié)構(gòu)化數(shù)據(jù)同步。這些有狀態(tài)命令和命令響應(yīng)中的每一個(gè)都包括“uri”參數(shù),用以標(biāo)識(shí) 將受給定命令影響的數(shù)據(jù)類(lèi)狀態(tài)機(jī)。圖12是示出sync-start命令的示例參數(shù)1210的表格。sync-start命令使得接收 者能夠創(chuàng)建針對(duì)給定數(shù)據(jù)類(lèi)的同步狀態(tài)機(jī)。示例參數(shù)1210包括“uri”和“anchors”。 參數(shù)類(lèi)型1220對(duì)于uri參數(shù)是字符串。參數(shù)類(lèi)型1220對(duì)于anchors參數(shù)是字典。如第三 欄1230中的核選標(biāo)記所示,“uri”和“anchors”參數(shù)是必需的參數(shù)。表格還包括各個(gè)參數(shù)的描述1240。例如,uri參數(shù)指示出數(shù)據(jù)類(lèi)名稱,例如針對(duì) 聯(lián)系人的字符串“com.apple.Contacts”或者針對(duì)日歷的字符串“com.apple.Calendars”。 當(dāng)檢測(cè)到接收者不支持該數(shù)據(jù)類(lèi)時(shí),返回狀ME_N0tSUpp0rted(612)。當(dāng)檢測(cè)到數(shù)據(jù)類(lèi)未 被使能時(shí),返回狀ME_NotAllowed(604)。在這兩種情況中,狀況“param_name”元素 都應(yīng)當(dāng)存在,并且應(yīng)當(dāng)使值“uri”指示出uri參數(shù)是所返回狀況的成因。anchors參數(shù)包 含在同步協(xié)商階段期間使用的信息。該信息可以包括所請(qǐng)求的同步模式(“mode”); 數(shù)據(jù)存儲(chǔ)庫(kù)版本(“device_version” , “server_version” );同步錨("last_device_ anchor,,, "next_device_anchor,,, "last_server_anchor,,, "next_server_anchor,,)。 Anchor元素的“ device_version,,參數(shù)描述了客戶端設(shè)備110的版本。Anchor元素的
“server_version”參數(shù)描述了服務(wù)器進(jìn)程120的版本。Anchors參數(shù)可以包括設(shè)備、服務(wù) 器、過(guò)濾器和復(fù)位錨。這些錨可用于請(qǐng)求同步模式。默認(rèn)的同步模式是快速同步模式。 這些錨可用于指定同步方向。默認(rèn)的同步方向是“雙向”,這指示出將從客戶端設(shè)備110 向服務(wù)器進(jìn)程120以及從服務(wù)器進(jìn)程120向客戶端設(shè)備110發(fā)送改變。圖13是示出sync-start命令響應(yīng)的示例參數(shù)的表格。Sync_start命令響應(yīng)的示例 參數(shù)1310可以包括“uri”和“anchors”參數(shù)。Uri和anchors參數(shù)的參數(shù)類(lèi)型1320分 別是字符串和字典。表格還示出這些參數(shù)是不是必需參數(shù)(1330)。表格中還示出了參 數(shù)的描述1340。Uri參數(shù)描述數(shù)據(jù)類(lèi)的名稱,例如聯(lián)系人、日歷等等。可為客戶端設(shè)備 110、服務(wù)器120、過(guò)濾器和復(fù)位提供anchors參數(shù)。另外,anchors參數(shù)可用于指示所請(qǐng)求的同步模式,例如快速、慢速和復(fù)位。默認(rèn)的同步模式是快速。當(dāng)接收者想要使用所提交的信息來(lái)同步時(shí),接收者利用sync-start命令響應(yīng) 來(lái)返回OK狀況S_OK(600)。當(dāng)接收者想要利用經(jīng)過(guò)調(diào)整的參數(shù)(例如,使用與客 戶端請(qǐng)求的同步模式不同的同步模式)來(lái)同步時(shí),接收者返回協(xié)商失敗狀況,例如 E_NegotiationFailed (613)。 當(dāng)接收者不支持提供來(lái)的發(fā)送者的版本(例如“ device_ version”)時(shí),接收者返回諸如E_VersionNotSupported(612)之類(lèi)的狀況,用以指示出 版本得不到支持。當(dāng)接收者不支持所希望的同步方向(例如“direction” )時(shí),接收 者返回諸如E_N0tSUpp0rted(614)之類(lèi)的狀況,用以指示出所希望的同步方向得不到支 持。在所有這些情況中,狀況包括“param-name”參數(shù),其中值“anchors”指示出命 令的“anchors”參數(shù)中的元素是不成功狀況的成因。另外,接收者可以在命令響應(yīng)的
"params"字典中指示出所希望的同步模式和anchors。當(dāng)客戶端設(shè)備110希望并行地同步多個(gè)數(shù)據(jù)類(lèi)時(shí),客戶端設(shè)備110針對(duì)每一個(gè)數(shù) 據(jù)類(lèi)發(fā)送單獨(dú)的“sync-start”命令請(qǐng)求,如下面的圖28所示。這些命令被包括在同一 消息中以使得服務(wù)器120能夠處理同一同步任務(wù)內(nèi)的命令。當(dāng)服務(wù)器120接受從客戶端設(shè) 備110接收的“sync-start”命令時(shí),客戶端設(shè)備110開(kāi)始發(fā)送“sync-changes”命令。 在已經(jīng)開(kāi)始同步的會(huì)話期間發(fā)送“sync-start”命令產(chǎn)生諸如E_StateErr0r(610)狀況之類(lèi) 的狀態(tài)差錯(cuò)狀況。當(dāng)在單個(gè)會(huì)話中同步多個(gè)數(shù)據(jù)類(lèi)時(shí),用于各個(gè)數(shù)據(jù)類(lèi)的命令在不同的狀態(tài)機(jī)上 操作。通常,服務(wù)器120—直等待,直到所有數(shù)據(jù)類(lèi)都已完成拉取階段或者在混合經(jīng)改 變數(shù)據(jù)之前取消為止。圖14是示出sync-changes命令的示例參數(shù)的表格。參數(shù)1410可以包括“uri”、 “itemtype”、“items”、“anchors” 禾Π “idmap”。Uri和itemtype參數(shù)的參數(shù)類(lèi)型 1420
是字符串。Anchors、items和idmap參數(shù)的參數(shù)類(lèi)型是字典。表格在第四欄1430示出 uri、itemtype和items參數(shù)是必需的,而idmap和anchors是可選的。表格還包括這些參 數(shù)的描述1440。uri參數(shù)描述所請(qǐng)求的改變的數(shù)據(jù)類(lèi)。Itemtype參數(shù)描述在sync_changes 命令中標(biāo)識(shí)的項(xiàng)或數(shù)據(jù)的類(lèi)型。Items參數(shù)描述項(xiàng)的字典,例如取決于itemtype的格式/ 類(lèi)型。Items參數(shù)的關(guān)聯(lián)鍵可以是設(shè)備recordid。Idmap參數(shù)描述GUID-LUID對(duì)的字典。 關(guān)聯(lián)鍵是服務(wù)器記錄id,并且值是設(shè)備記錄id。Anchors參數(shù)可被包括作為“checkpoint anchor"。當(dāng)存在時(shí),接收器利用所提供來(lái)的值來(lái)更新其錨。如果會(huì)話中斷,接收者可 以開(kāi)始與檢查點(diǎn)錨的后續(xù)同步會(huì)話,并繼續(xù)正常地同步而不會(huì)進(jìn)入慢速同步模式。Sync-changes命令使得客戶端設(shè)備110能夠?qū)⒏淖儼l(fā)送到服務(wù)器120??商娲?地,服務(wù)器120可將更新發(fā)送到客戶端設(shè)備110。Uri參數(shù)指示出要更新或改變的數(shù)據(jù)項(xiàng) 的數(shù)據(jù)類(lèi)。正發(fā)送的數(shù)據(jù)項(xiàng)的類(lèi)型由itemtype參數(shù)指示。Itemtype參數(shù)可以指示出item 參數(shù)表示完整記錄(“records”)還是字段級(jí)改變(“changes”)。當(dāng)檢測(cè)到客戶端設(shè) 備110要求id映射時(shí),由設(shè)備LUID在items參數(shù)中為數(shù)據(jù)項(xiàng)提供鍵項(xiàng)(bekeyed)。Items 參數(shù)的字典的格式取決于項(xiàng)類(lèi)型。Items參數(shù)的值具有齊次的(homogeneous)項(xiàng)類(lèi)型。 Items參數(shù)可以是用以指示出無(wú)需再發(fā)送項(xiàng)的空數(shù)組。例如,空數(shù)組可以指示出不存在改 變或者不存在記錄。當(dāng)檢測(cè)到不存在設(shè)備改變或者同步模式是“復(fù)位”時(shí),客戶端設(shè)備110利用“items”參數(shù)為空數(shù)組的“sync-changes”命令。如果用于該數(shù)據(jù)類(lèi)的所有適當(dāng)數(shù)據(jù)項(xiàng) 都不包括在命令參數(shù)中,則“more” Boolean標(biāo)志元素也被包括。“more” Booleim標(biāo)志
元素可用于將量大的同步數(shù)據(jù)打碎成較小的塊。這在要交換的數(shù)據(jù)的大小大于接收者的 接受力時(shí)是有用的。例如,接收者可能具有消息大小限制??商娲兀癿ore” Boolean 標(biāo)志元素可以使能在單個(gè)會(huì)話中針對(duì)給定數(shù)據(jù)類(lèi)的多種項(xiàng)類(lèi)型的交換。當(dāng)服務(wù)器120已 經(jīng)從客戶端設(shè)備110接收到針對(duì)所有數(shù)據(jù)類(lèi)的最新的“sync-changes”塊時(shí),服務(wù)器120 將所有提供來(lái)的數(shù)據(jù)與中央數(shù)據(jù)庫(kù)相同步。然后,協(xié)議會(huì)話中的客戶端_服務(wù)器角色反 轉(zhuǎn)。此時(shí),客戶端設(shè)備110開(kāi)始處理來(lái)自服務(wù)器120的命令。客戶端設(shè)備110還可向 服務(wù)器120返回命令響應(yīng)。來(lái)自服務(wù)器的任何同步數(shù)據(jù)更新隨后在“sync-changes”命令 中被發(fā)送。當(dāng)不需要更新時(shí),服務(wù)器120發(fā)送“items”參數(shù)為空數(shù)組的“sync-changes” 命令。在處理來(lái)自服務(wù)器120的“sync-changes”命令請(qǐng)求的同時(shí),客戶端設(shè)備110對(duì) 這些命令進(jìn)行響應(yīng),并使用“idmap”參數(shù)在命令響應(yīng)的“params”中包括用于添加事 務(wù)的任何所要求映射信息?!癷dmap”參數(shù)在來(lái)自客戶端設(shè)備的“sync-changes”命令 中被發(fā)送用以更新現(xiàn)有映射。例如,可以獨(dú)立于服務(wù)器120改變數(shù)據(jù)實(shí)體而更新id映 射。在“sync-start”之前或者“sync-commit”或“sync-cancel”之后的會(huì)話期間發(fā) 送“sync-changes”命令產(chǎn)生差錯(cuò)狀況,例如E_StateError(610)狀況??蛻舳嗽O(shè)備110 可以省略發(fā)送“sync-changes”命令響應(yīng)并推遲發(fā)送“idmap”參數(shù),直到后續(xù)同步會(huì)話 的“sync-changes”命令為止。這可被執(zhí)行來(lái)減少完成同步會(huì)話所需的傳送往返行程的 數(shù)目。圖15是示出synch-changes命令響應(yīng)的示例參數(shù)的表格。參數(shù)1510包括 “uri”、“anchors”和“idmap”。表格包括這些參數(shù)的參數(shù)類(lèi)型1520。Uri參數(shù)是字
符串類(lèi)型,而anchors和idmap參數(shù)是字典。表格還包括對(duì)參數(shù)是否是必需的(1530)的 指示。Uri參數(shù)是必需的,而anchors和idmap參數(shù)是可選的。表格還包括這些參數(shù)的描 述1540。Uri參數(shù)指示出所請(qǐng)求改變的數(shù)據(jù)類(lèi)。Anchors參數(shù)是用于指示出上一次同步 會(huì)話停止的特定時(shí)間點(diǎn)的檢查點(diǎn)錨。Idmap參數(shù)是GUID-LUID對(duì)的字典,其中鍵包括服 務(wù)器記錄id。鍵的值可以包括設(shè)備記錄id。圖16是示出sync-commit命令的示例參數(shù)的表格。Sync-commit命令的參數(shù) 1610包括“uri”和“anchors”。Sync_commit命令用于交付同步操作。該命令指示出
發(fā)送者已經(jīng)交付并且還正在告訴接收者去交付。表格示出了參數(shù)是否是必需的(1630)。 例如,“uri”參數(shù)是必需的,而anchors參數(shù)是可選的。表格還示出了參數(shù)的參數(shù)類(lèi)型1620。Uri參數(shù)是字符串類(lèi)型,而anchors參數(shù) 是字典。表格還示出了參數(shù)的描述1640。Uri參數(shù)指示出用以交付同步改變的數(shù)據(jù)類(lèi)。 Anchors參數(shù)被客戶端設(shè)備110用于發(fā)送“next_deviCe_anCh0r”以供服務(wù)器120存儲(chǔ)。 作為響應(yīng),服務(wù)器120在sync-commit命令中向設(shè)備110發(fā)送“next_server_anchor”。 另外,在sync-commit命令中指示出并返回在下一次同步中要使用的同步模式。在最后 的"sync-changes,,之前或者在“sync-commit”或“sync-cancel,,之后的會(huì)話期間發(fā) 送“sync-commit”命令產(chǎn)生差錯(cuò)狀況,例如E_StateError(601)差錯(cuò)狀況。圖17是示出sync-commit命令響應(yīng)的示例參數(shù)的表格。參數(shù)1710包括“uri”參數(shù)。Uri參數(shù)的參數(shù)類(lèi)型1720是字符串。如表格第四欄1730所示,uri參數(shù)是包括 在sync-commit命令響應(yīng)中的必需參數(shù)。Uri參數(shù)的描述1740示出uri參數(shù)指示出在同 步會(huì)話期間交付的數(shù)據(jù)類(lèi)。設(shè)備110可以省略發(fā)送“sync-commit”命令響應(yīng)以減少完 成同步會(huì)話所需的傳送往返行程的數(shù)目。通過(guò)將在“sync-commit”命令中接收到的同 步錨提交作為下一次會(huì)話的“sync-start”命令中的錨參數(shù),服務(wù)器120可以推斷出前一 “sync-commit”已被接收到。圖18是示出sync-cancel命令的示例參數(shù)的表格。Sync-cancel命令用于取消同步 操作。Sync-cancel命令指示出發(fā)送者已經(jīng)取消并且還正在告訴接收者去取消。接收者應(yīng) 當(dāng)將其針對(duì)該數(shù)據(jù)類(lèi)已經(jīng)作出的任何改變回滾到由上一次接收的同步錨表示的狀態(tài)。表 格示出sync-cancel命令的參數(shù)1810包括“uri”參數(shù)和anchors參數(shù)。Uri參數(shù)的參數(shù)類(lèi) 型1820是字符串,而anchors參數(shù)是字典。表格還在第四欄1830中示出參數(shù)是否是必需 的。Uri參數(shù)是必需的,而anchors參數(shù)是可選的。表格還示出了參數(shù)的描述1840。Uri 參數(shù)指示出要取消同步的數(shù)據(jù)類(lèi)。Anchors參數(shù)可用于指定要針對(duì)下一次同步會(huì)話使用 的錨和/或同步模式。在"sync-start”之前或者在“sync-commit”或“sync-cancel” 之后的會(huì)話期間發(fā)送“sync-cancel”命令產(chǎn)生差錯(cuò)狀況,例如E_StateErr0r(610)差錯(cuò)狀 況。設(shè)備110可以省略發(fā)送“sync-cancel”命令響應(yīng)以減少完成同步會(huì)話所需的傳送往 返行程的數(shù)目。通過(guò)將在“sync-cancel”命令中接收的同步錨提交作為下一次會(huì)話的
“sync-start”命令中的anchors參數(shù),服務(wù)器120可以推斷出前一 “sync-cancel”已被 接收。圖19是示出sync-cancel命令響應(yīng)的示例參數(shù)的表格。該命令響應(yīng)的可用參數(shù) 1910包括“uri”參數(shù)。Uri參數(shù)的參數(shù)類(lèi)型1920是字符串。表格還在第四欄1930中示 出了對(duì)參數(shù)是否是必需的指示。如核選標(biāo)記所示,uri參數(shù)必需包括在命令響應(yīng)中。表 格還包括uri參數(shù)的描述1940。Uri參數(shù)指示出要取消同步的數(shù)據(jù)類(lèi)。狀況圖20是示出示例狀況元素的表格。示例狀況元素示出在第一欄2010中,而相應(yīng) 的值示出在第二欄2020中。表格的第三欄2030示出了狀況元素是否是必需的。此外, 表格的最后一欄2040示出了對(duì)每一狀況元素的簡(jiǎn)短描述。通過(guò)對(duì)給定命令或消息進(jìn)行處理而產(chǎn)生的狀況由“status”元素表示。單個(gè)狀 況元素可以出現(xiàn)在消息頭部中。當(dāng)消息未被處理時(shí),相應(yīng)的狀況元素被包括在消息頭部 中。一數(shù)組的“狀況”元素被包括在命令響應(yīng)的“results”參數(shù)中。狀況元素指示出命令請(qǐng)求的結(jié)果。狀況項(xiàng)是字典。字典可以包含“status”元 素并包括“code”元素,用以指示出相應(yīng)命令請(qǐng)求的結(jié)果狀況?!皊tatus”元素的值是 字符串?!癱ode”元素的值包括整數(shù)字符串或整數(shù)?!癲escription”元素是可以存在于 命令中的可選元素?!癲escription”元素的值是字符串?!癲escription”元素純粹是信 息并且對(duì)命令的處理不具有影響。可以存在“param—name”、 “param_key” 禾口 “param—index”。它們被用
于為某些命令提供多狀況響應(yīng)。“param-name”值必須是字符串,并且指示出Status 項(xiàng)對(duì)應(yīng)于命令請(qǐng)求中的哪個(gè)參數(shù)。“param-index”值必須是字符串或者整數(shù)。如果 "param-name"元素存在并且其在命令請(qǐng)求中的值是數(shù)組,則“param-index”必須存在。“param-index”的值指示出命令請(qǐng)求中該Status項(xiàng)所對(duì)應(yīng)的“param_name”項(xiàng)的
索引。索引值是基于零的?!皃aram-key”值必須是字符串。如果“param-name”元 素存在并且其在命令請(qǐng)求中的值是字典,則“param-key”必須存在。“param-key”的 值指示出命令請(qǐng)求中該Status項(xiàng)所對(duì)應(yīng)的“param-name”項(xiàng)的鍵的值?!皃aram-name”、 "param-key"禾口 “param—index” 元素也可存在。它們并
不是必需元素,并且可用于為某些命令提供多狀況響應(yīng)?!皃aram-name”狀況元素的 值是字符串,其指示出該狀況元素對(duì)應(yīng)于命令請(qǐng)求中的哪個(gè)參數(shù)?!皃aram-index”元 素的值可以是字符串或者整數(shù)。當(dāng)“param-name”狀況元素存在并且與命令請(qǐng)求中的 "param-name"狀況元素的值相匹配的參數(shù)值是數(shù)組時(shí),“param-index”狀況元素被包 括在狀況字典中?!皃aram-index”狀況元素的值指示出名稱與命令請(qǐng)求中status元素所 對(duì)應(yīng)的“param-name”狀況元素的值相對(duì)應(yīng)的參數(shù)在數(shù)組參數(shù)項(xiàng)中的索引。索引狀況元 素的值是基于零的?!皃aram-key”元素的值是字符串,其指示出該狀況元素對(duì)應(yīng)于命 令請(qǐng)求中的哪個(gè)參數(shù)。“param-key”狀況元素的值是字符串。當(dāng)“param-name”狀 況元素存在并且與命令請(qǐng)求中“aparam-name”狀況元素的值相匹配的參數(shù)值為字典時(shí), "param-key"狀況元素被包括在狀況字典中。“param-index”狀況元素的值指示出名 稱與命令請(qǐng)求中status元素所對(duì)應(yīng)的“param-name”狀況元素的值相對(duì)應(yīng)的參數(shù)在字典 參數(shù)項(xiàng)中的鍵。如果原始參數(shù)是數(shù)組,則狀況中的索引指的是產(chǎn)生該狀況的參數(shù)的索引。索引 從零基礎(chǔ)開(kāi)始計(jì)數(shù)。該零基礎(chǔ)機(jī)制使得能夠返回一稀疏數(shù)組的狀況。例如,考慮下面示 出的命令(名稱為“examplecommand”),該命令具有作為數(shù)組的參數(shù)“items”。假設(shè) 命令中除了兩個(gè)項(xiàng)以外的所有項(xiàng)都形成良好,而第二和第五項(xiàng)具有值(“bad”)。
0163]<dict>0164]<key>name</key>0165]<string>examplecommand</string〉0166]<key>sequence</key><string>3</string>0167]<key>params</key>0168]<dict>0169]<key>items</key>0170]<array>0171]<string>good</string〉0172]<string>bad</string>0173]<string>good</string〉0174]<string>good</string〉0175]<string>bad</string>0176]<string>good</string〉0177]<string>good</string〉0178]</array〉0179]</dict>0180]</dict>[O181] 對(duì)上述“examplecommand”的命令響應(yīng)可以呈現(xiàn)如下[O182] <dict>
<key>name</key>
<string>examplecommand</string>
<key>response</key><true/>
<key>reSult</key>[O188] <array>[O189] <dict>
<key>C0de</key>[O191] <string>602</string>
<key>status</key>[甽93] <string>S—Ok</string>[O194] </dict>[O195] <dict>
<key>C0de</key>
<string>607</string>
<key>param—name</key>
<string>items</string>
<key>param一一index</key>
<string>l</string>
</dict>
<dict>
<key>C0de</key>
<string>607</string>
<key>param一一name</key>
<string>items</string>
<key>param一一index</key>
<string>4</string>
</dict>
] </array>
</dict>
這示出對(duì)于除了被指示為成功的項(xiàng)以外的所有項(xiàng),要針對(duì)該命令返回多個(gè)狀況。
但是,為索引為l(從零開(kāi)始計(jì)數(shù),因此是命令列表中的第二項(xiàng))的參數(shù)“items”提供的值是壞值(狀況碼為607)。
第五項(xiàng)(索引4)也是相同情況。
這種機(jī)制使得對(duì)于成功的任何其它項(xiàng)可不報(bào)告狀況。
這種機(jī)制能夠在向服務(wù)器發(fā)送大量項(xiàng)并且僅少量失敗時(shí)顯著地減少帶寬利用要求。
當(dāng)需要在單個(gè)命令響應(yīng)中返回多個(gè)狀況時(shí),可通過(guò)包括諸如S_MultiStatus(601)之類(lèi)的狀況作為狀況數(shù)組的第一元素來(lái)表示狀況的稀疏數(shù)組。
后續(xù)的狀況元素于是可以為參數(shù)類(lèi)型為數(shù)組的任何失敗的參數(shù)元素指示出參數(shù)索引值和不同狀況??商娲?,后 續(xù)狀況元素可以為參數(shù)類(lèi)型為字典的任何失敗的參數(shù)元素指示出參數(shù)鍵值和不同狀況。對(duì)于一般狀況,可以保留諸如狀況碼范圍600-699之類(lèi)的某一范圍內(nèi)的狀況 碼。對(duì)于由服務(wù)器返回的并且一般導(dǎo)致當(dāng)前會(huì)話終止的差錯(cuò),可以保留諸如范圍700-799 之類(lèi)的另一范圍內(nèi)的狀況碼。圖21是示出可包括在命令和命令響應(yīng)中的狀況的示例狀況碼的表格。第一欄 2110描述可用狀況。關(guān)聯(lián)狀況碼示出在第二欄2120中。第三欄2130示出對(duì)各個(gè)狀況的 描述。最后一欄2140示出各個(gè)狀況的父元素或參數(shù)。表格描述了成功狀況和差錯(cuò)狀況。在圖21所示的示例中,向“S_OK”狀況指 派了碼600用以指示成功。父元素可以是消息頭部或命令響應(yīng)。另一成功狀況是被指派 給碼601的“S-MultiStatus”狀況用以指示具有多值狀況的成功。父元素是命令響應(yīng)。差錯(cuò)狀況包括被指派給碼602的“E_NotCompleted”狀況,用以指示出對(duì) 該命令的命令處理尚未完成。父元素是命令響應(yīng)?!癊_N0tF0Und”差錯(cuò)狀況被指派 給碼603,用以指示出所指示的數(shù)據(jù)對(duì)象或URI找不到。父元素是命令響應(yīng)?!癊_ NotAllowed”差錯(cuò)狀況被指派給碼604,用以指示出可能由于例如不足的訪問(wèn)權(quán)限,所以 操作不被允許。父元素是命令響應(yīng)?!癊_MiSSingParam”差錯(cuò)狀況被指派給碼605,用 以指示出命令缺失必需參數(shù)?!癊_ParamErr0r”差錯(cuò)狀況被指派給碼606,用以指示出 所提供來(lái)的參數(shù)是錯(cuò)誤的。父元素是命令響應(yīng)?!癊_BadValUe”差錯(cuò)狀況被指派給碼 607,用以指示出提供了壞值。父元素是消息頭部或命令響應(yīng)。“EJJnknownCommand” 被指派給碼608用以指示出未知命令被發(fā)出并被忽略。父元素是命令響應(yīng)?!癊_ CommandNotProcessed"差錯(cuò)狀況被指派給碼609用以指示出由于處理前一命令的差錯(cuò)導(dǎo) 致命令未被處理。父元素是命令響應(yīng)?!癊_StateErr0r”是被指派給碼610的差錯(cuò)狀況, 用以指示出基于命令族的當(dāng)前狀態(tài)機(jī)接收到了預(yù)期以外的命令。父元素是命令響應(yīng)。
"E_LimitExceeded"差錯(cuò)狀況被指派給了碼611,用以指示提供來(lái)太多的項(xiàng)。父元素是 命令響應(yīng)?!癊_VerSi0nNotSupported”差錯(cuò)狀況被指派給碼612,用以指示協(xié)議或命令版 本得不到支持。父元素是消息頭部或命令響應(yīng)?!癊—NegotiationFailed”差錯(cuò)狀況被指 派給碼613,用以指示同步模式協(xié)商失敗。父元素是命令響應(yīng)?!癊_NotSupported”差 錯(cuò)狀況被指派給碼614,用以指示出嘗試了得不到支持的或者未實(shí)施的操作。父元素是消 息頭部或命令響應(yīng)。“E_Failed”差錯(cuò)狀況被指派給碼615,用以指示一般故障。父元 素是消息頭部或命令響應(yīng)?!癊_Canceled”差錯(cuò)狀況被指派給碼616,用以指示出當(dāng)前狀 態(tài)機(jī)已被取消。父元素是命令響應(yīng)?!癊_ServiCeBUSy”差錯(cuò)狀況被指派給碼700,用以 指示服務(wù)器120太忙并且無(wú)法處理該消息。此狀況碼還指示出設(shè)備110應(yīng)當(dāng)很快就再次 嘗試該命令。父碼是消息頭部?!癊_ServiceUnavailable”差錯(cuò)狀況被指派給碼701用以 指示服務(wù)器120不能工作并且無(wú)法處理該消息。此狀況碼還指示出設(shè)備110應(yīng)當(dāng)很快再次 嘗試。父元素是消息頭部。“E_ServiCeErr0r”差錯(cuò)狀況被指派給碼702用以指示服務(wù)器 120具有內(nèi)部差錯(cuò)。父元素是消息頭部或命令響應(yīng)?!癊_BadRequest”差錯(cuò)狀況被指派 給碼703用以指示服務(wù)器120無(wú)法理解該消息。父元素是消息頭部。“E_RetryLater” 差錯(cuò)狀況被指派給碼704用以指示服務(wù)器120需要客戶端設(shè)備110稍后再試。父元素是 消息頭部。
圖22是示出接收命令的給定狀況的效果的表格。指示符“C”指示出僅接收到 狀況的該命令出故障。指示符“F”指示出命令族狀態(tài)機(jī)的終止?!皊ync”命令的狀態(tài) 機(jī)的終止示例是對(duì)“sync-cancel”即將到來(lái)的指示。指示符“M”指示出消息未被處 理。指示符“S”指示出會(huì)話將終止。接收到“E_NotFound”差錯(cuò)狀況的效果是get、put和delete命令出故障。對(duì)于 sync—start、sync—changes、sync—cancel 禾口 sync—commit命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。接收 到“E_NotAllowed”差錯(cuò)狀況的效果是get、put和delete命令出故障。對(duì)于sync-start、 sync-changes、sync-cancel和sync-commit命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。接收到“ E_ MissingParam"差錯(cuò)狀況的效果是get、put和delete命令出故障。對(duì)于sync-start、 sync-changes、sync-cancel和sync-commit命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。另外,消息不被 處理。接收到“E_ParamError”差錯(cuò)狀況的效果是get、put和delete命令出故障。對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。接 收到“E_BadValue”差錯(cuò)狀況的效果是get、put和delete命令出故障。對(duì)于sync-start、 sync-changes、sync-cancel和sync_commit命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。另外,消息不被 處理。接收到“EJJnknownCommand”差錯(cuò)狀況的效果是get、put和delete命令出故障。 對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。 接收到 “E_CommandNotProcessed” 差錯(cuò)狀況的效果是 get、put 禾Π delete、sync-start、 sync-changes、sync-cancel 和 sync-commit命令出故障。接收到 “E_StateError” 差錯(cuò)狀況 的效果是對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī) 被終止。接收到“E_LimitExceeded”差錯(cuò)狀況的效果是get、put和delete命令出故障。 對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。 另外,消息不被處理。接收到“E_VerSionNotSupported”差錯(cuò)狀況的效果是get、put和 delete 命令出故障。對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù) 據(jù)類(lèi)狀態(tài)機(jī)被終止。另外,會(huì)話將終止。接收到“E—NegotiationFailed”差錯(cuò)狀況的效 果是sync-start命令出故障。接收到“E_NotSupported”差錯(cuò)狀況的效果是get、put和 delete 命令出故障。對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù) 據(jù)類(lèi)狀態(tài)機(jī)被終止。接收到“E_Failed”差錯(cuò)狀況的效果是get、put和delete命令出故 障。對(duì)于 sync-start、sync-changes、sync-cancel 禾口 sync-commit 命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被 終止。另外,會(huì)話將終止。接收到“E_Canceled”差錯(cuò)狀況的效果是對(duì)于sync-start、 sync-changes、sync-cancel和sync-commit命令,數(shù)據(jù)類(lèi)狀態(tài)機(jī)被終止。接收到“ E_ ServiceBusy"差錯(cuò)狀況的效果是會(huì)話將被終止。接收到“E_ServiceUnavailable”差錯(cuò) 狀況的效果是會(huì)話將被終止。接收到“E_ServiCeErr0r”差錯(cuò)狀況的效果是對(duì)于所有命 令,會(huì)話都將終止。接收到“E_BadReqUeSt”差錯(cuò)狀況的效果是會(huì)話將被終止。接收 到“E_RetryLater”差錯(cuò)狀況的效果是會(huì)話將被終止。錨在不同時(shí)間在設(shè)備和服務(wù)器之間交換諸如同步模式、同步方向、代理版本和同 步錨之類(lèi)的同步狀態(tài)信息。包括在命令和命令響應(yīng)中的“anchors”元素(如圖12-20所 示)被用于捆綁此信息。“anchors”元素被實(shí)現(xiàn)為字典。圖23是示出anchors元素的示例鍵的表格。表格包括示出同步錨鍵2310、關(guān)聯(lián)鍵類(lèi)型2320和鍵的描述2330的欄?!癿ode”鍵表示所需的或經(jīng)過(guò)協(xié)商的同步模式。 Mode鍵可以可選地存在于anchors元素中。當(dāng)存在時(shí),mode鍵的值被實(shí)現(xiàn)為字符串, 并且字符串值包括表示同步模式的“慢速”、“快速”或“復(fù)位”。當(dāng)mode鍵的值不 存在時(shí),消息的接收者推斷值為“快速”。因此,在發(fā)送者沒(méi)有指示mode鍵值的情況 下,接收者假設(shè)快速同步模式?!癲irection”鍵表示所需的或經(jīng)過(guò)協(xié)商的同步方向。Direction鍵的值可以可選 地存在于anchors元素中。當(dāng)存在時(shí),direction鍵的值被實(shí)現(xiàn)為字符串,并且字符串值可 以包括“to_server”、“to_device”或“twoway”。 因此,三個(gè)值將同步方向指示為 從設(shè)備110向服務(wù)器120同步、從服務(wù)器120向設(shè)備110同步或者兩個(gè)方向都同步。當(dāng) direction鍵的值不存在時(shí),接收者推斷該值為“twoway”。"device_version"鍵由設(shè)備110發(fā)送并且表示設(shè)備的數(shù)據(jù)源代理版本。當(dāng)存在 時(shí),deViCe_VerSi0n鍵的值被實(shí)現(xiàn)為字符串。此信息可被服務(wù)器120用于推斷特定于設(shè)備 軟件的給定版本的行為或能力。服務(wù)器120例如可以確定對(duì)于給定設(shè)備代理版本,同 步不被允許。"server_version"鍵由服務(wù)器120發(fā)送并且表示服務(wù)器的數(shù)據(jù)源代理版本。當(dāng)存 在時(shí),server_versi0n鍵的值被實(shí)現(xiàn)為字符串。此信息可被設(shè)備110用于推斷特定于服務(wù) 器軟件的給定版本的行為或能力。設(shè)備110例如可以確定對(duì)于給定服務(wù)器代理版本, 同步不被允許。實(shí)際的錨被使用鍵‘‘last_device_anchor,,、‘‘next_device_anchor,,、"last_ server_anchor”和"next_server_anchor”來(lái)交換。這些鍵的每一個(gè)的值可以存在于
"anchors"字典中。當(dāng)存在時(shí),這些鍵中每一個(gè)的值被實(shí)現(xiàn)為字符串。當(dāng)不存在時(shí), 接收者推斷這些鍵的上一次已知值。Anchors元素的鍵的值被認(rèn)為是不透明的,并且實(shí)體不應(yīng)當(dāng)嘗試從另一實(shí)體的 anchor鍵解碼或推斷含義。例如,客戶端設(shè)備不應(yīng)當(dāng)對(duì)“next_server_anchor”或“l(fā)ast_ server—anchor,,作出任 可假設(shè)。同步協(xié)議特征當(dāng)客戶端設(shè)備110向服務(wù)器120發(fā)送差異(即,改變的、刪除的或新的數(shù)據(jù)) 時(shí),客戶端設(shè)備Iio經(jīng)由“sync-changes”命令的“item-type”參數(shù)指示出使用的是“記 錄級(jí)差異”(RLD)還是“字段級(jí)差異”(FLD)。 “item-type”參數(shù)中的值“改變”指 示出FLD,而值“記錄”指示出RLD。對(duì)于特定數(shù)據(jù)類(lèi),支持RLD的設(shè)備針對(duì)給定的 經(jīng)改變記錄發(fā)送整個(gè)數(shù)據(jù)集。與之不同,支持FLD的設(shè)備僅發(fā)送該數(shù)據(jù)類(lèi)的數(shù)據(jù)集中針 對(duì)經(jīng)改變記錄的經(jīng)改變特性。對(duì)于RLD,支持優(yōu)化,這使得客戶端設(shè)備110能夠發(fā)送諸如指示出給定特性未 被改變并且尚未被刪除的“+**n0-Change**+”之類(lèi)的特殊值。這有助于避免發(fā)送大的 數(shù)據(jù)項(xiàng),例如未被改變的聯(lián)系人圖像。Id 映射當(dāng)檢測(cè)到針對(duì)一數(shù)據(jù)類(lèi)的例如在客戶端設(shè)備110中的數(shù)據(jù)存儲(chǔ)庫(kù)希望使用id映 射時(shí),可在來(lái)自服務(wù)器120的命令或者針對(duì)“sync-changes”命令的命令響應(yīng)中包括
“idmap”參數(shù)?!癷dmap”參數(shù)的值是字典,其將服務(wù)器的通用唯一標(biāo)識(shí)(UUID)映射到客戶端設(shè)備110的本地唯一標(biāo)識(shí)(LUID)。之后,服務(wù)器120使用客戶端設(shè)備110的 LUID來(lái)參考所映射的實(shí)體。優(yōu)化斷開(kāi)的會(huì)話可能導(dǎo)致無(wú)線通信的消息/分組丟失。同步協(xié)議140使能從斷開(kāi)的 會(huì)話恢復(fù)而無(wú)需放棄“快速”同步。通過(guò)即使在斷開(kāi)會(huì)話的情況下也維持“快速”同 步,通信往返行程的數(shù)目得以減少。往返行程的數(shù)目的減少可以降低或最小化消息/分 組丟失。同步協(xié)議140被設(shè)計(jì)為使得在正常情形下傳送消息(HTTP請(qǐng)求/響應(yīng)往返行程) 的數(shù)目最小化。保持在“快速”同步模式的能力可以通過(guò)交換較少量的數(shù)據(jù)來(lái)最小化帶 寬利用率以及用于每一次同步處理的努力。并且,頻繁的快速同步意味著設(shè)備110/服務(wù) 器120對(duì)決不會(huì)彼此偏離很多。換而言之,設(shè)備110和服務(wù)器120保持比沒(méi)有快速同步 的可能情況更加同步。此外,這種無(wú)線“滴流式同步”(trickle syncing)能夠產(chǎn)生更好的 用戶體驗(yàn)。某些事件會(huì)導(dǎo)致快速同步對(duì)(例如,客戶端設(shè)備110和服務(wù)器120對(duì))采取較不 高效的同步模式(例如,慢速同步模式)。這些事件可以包括設(shè)備數(shù)據(jù)破壞、中斷的同步 會(huì)話、未能對(duì)一致的同步錨達(dá)成一致意見(jiàn)、數(shù)據(jù)結(jié)構(gòu)復(fù)位(例如,當(dāng)用戶從另一機(jī)器推 送針對(duì)該數(shù)據(jù)類(lèi)的全新數(shù)據(jù)集時(shí))。無(wú)論何時(shí)發(fā)生問(wèn)題,同步協(xié)議140都可以避免悲觀并 最小化或者消除回退到慢速同步的需要。同步協(xié)議140實(shí)現(xiàn)了用于優(yōu)化客戶端設(shè)備110與服務(wù)器120之間的數(shù)據(jù)同步的各 種技術(shù)。例如,優(yōu)化技術(shù)包括使能樂(lè)觀的協(xié)商和交付的同步階段壓縮;并行地實(shí)現(xiàn)多個(gè) 數(shù)據(jù)類(lèi)狀態(tài)機(jī);使用同步錨檢查點(diǎn);以及使能會(huì)話魯棒性。圖24示出了同步會(huì)話的一個(gè)示例??蛻舳嗽O(shè)備110與服務(wù)器120之間的同步 會(huì)話包括交換各種消息2410、2420、2430、2440、2450和2460。例如,消息1 2410被 發(fā)送者發(fā)送到接收者。在圖24所示的示例中,發(fā)送者是客戶端設(shè)備110,接收者是服務(wù) 器120。消息1 2410包括用于協(xié)商同步會(huì)話的同步模式的sync-start命令。響應(yīng)于消息 1 2310,接收者發(fā)送消息2 2420,消息2 2420包括諸如sync-start命令響應(yīng)之類(lèi)的命令響 應(yīng)。命令響應(yīng)包括用于指示出消息1 2410中包括的命令是成功還是失敗等的狀況。在 消息2 2420的結(jié)尾處,第一往返行程結(jié)束。如果需要,可以交換附加消息η、η+U η+2 等來(lái)完成同步會(huì)話。同步會(huì)話例如可以結(jié)束于對(duì)最后一個(gè)消息η+1的接收。在一些實(shí)現(xiàn) 方式中,可以交換附加的可選消息2450、2460等。圖25示出了客戶端設(shè)備110與服務(wù)器120之間的最佳快速或復(fù)位數(shù)據(jù)同步的示 例。同步階段壓縮使得客戶端設(shè)備110能夠壓縮不同的同步狀態(tài)機(jī)階段。例如,當(dāng)客戶 端設(shè)備110相信可能的同步模式將是“快速”或“復(fù)位”時(shí),客戶端設(shè)備110在第一消息 2510中向服務(wù)器120發(fā)送協(xié)商(“sync-start” )和拉取階段命令(“sync-changes” )。 同步階段壓縮可以在服務(wù)器120拒絕所請(qǐng)求的同步模式的情況下最小化或者消除浪 費(fèi)的網(wǎng)絡(luò)流量。在圖25所示的示例中,客戶端設(shè)備110發(fā)送的第一消息2510包括
“sync-start”和“sync-change”命令。但是,服務(wù)器120可以不在第二消息2520中發(fā)送 “sync-commit”命令。取而代之,服務(wù)器120在第二消息2520中發(fā)送“sync-start”響 應(yīng)、“sync-changes”響應(yīng)和“sync-changes”命令。在第二往返行程2530中,客戶端設(shè)備 110 發(fā)送 sync-change 響應(yīng)和 “sync-commit” 命令。服務(wù)器 120 利用 “sync-commit”
響應(yīng)來(lái)作出應(yīng)答。圖26示出了客戶端設(shè)備110與服務(wù)器120之間的最佳快速或復(fù)位同步的另一示 例??蛻舳嗽O(shè)備110在第一消息2610中向服務(wù)器120發(fā)送協(xié)商(“sync-start” )和拉 取階段命令(“sync-changes”)。Sync-start協(xié)商命令可以包括指示出數(shù)據(jù)類(lèi)、錨和同 步模式的參數(shù)。在圖26所示的示例中,指示出快速同步模式。在圖26所示的示例中,同步服務(wù)器120通過(guò)在同一消息中發(fā)送其針對(duì)給定數(shù)據(jù) 類(lèi)的“sync-changes”和“sync-commit”命令來(lái)壓縮推送和交付階段。響應(yīng)于sync-start 和sync-chiinge命令,服務(wù)器120在第二消息2620中利用sync-start命令響應(yīng)(OK、數(shù)據(jù) 類(lèi)、錨)和sync-change命令響應(yīng)(OK、數(shù)據(jù)類(lèi))進(jìn)行答復(fù)。另外,服務(wù)器120還在第二 消息2620中包括sync-changes命令(數(shù)據(jù)類(lèi)、改變)和sync-commit命令(數(shù)據(jù)類(lèi)、錨) 以完成一個(gè)往返行程。因此,樂(lè)觀方法可以在單個(gè)HTTP往返行程中完成數(shù)據(jù)同步。當(dāng)客戶端設(shè)備110在第二往返行程2630中利用用于id映射的可選消息來(lái)對(duì)服務(wù) 器120在第二消息2620中的“sync-changes”命令作出響應(yīng)時(shí),數(shù)據(jù)同步可在兩個(gè)往返 行程中完成??蛻舳嗽O(shè)備110還可在可選消息中發(fā)送sync-commit響應(yīng)。在一些實(shí)現(xiàn)方式中,客戶端設(shè)備110可以推遲向服務(wù)器120發(fā)送id映射直到后一 會(huì)話為止,并且可以省略發(fā)送sync-commit響應(yīng),這是因?yàn)榉?wù)器120能夠通過(guò)對(duì)在后續(xù) 會(huì)話中發(fā)送的同步錨進(jìn)行比較來(lái)推斷出命令已被接收并被處理。圖27示出了客戶端與服 務(wù)器之間的示例數(shù)據(jù)同步,其中,當(dāng)服務(wù)器的前一消息是最后消息時(shí),設(shè)備省略發(fā)送針 對(duì)“sync-changes”或“sync-commit”的命令響應(yīng)。在該情況中,任何待決的id映射 (如果有必要的話)都在后續(xù)同步會(huì)話中被發(fā)送到服務(wù)器120。在第一消息2710中,客戶端設(shè)備110如參考圖25所述地對(duì)協(xié)商和拉取階段進(jìn)行 壓縮。作為響應(yīng),服務(wù)器120發(fā)送第二消息2720,其中,如參考圖26所述地對(duì)推送和交 付階段進(jìn)行了壓縮。第一會(huì)話在一個(gè)往返行程中完成。第二同步會(huì)話由客戶端設(shè)備110發(fā)起,其中,在第三消息2730中壓縮了拉取和 協(xié)商階段。另外,第一會(huì)話所余留的待決id映射被發(fā)送到服務(wù)器120。服務(wù)器120在第 四消息2740中響應(yīng)以sync-changes和sync-commit命令。圖28圖示出了慢速同步的示例。當(dāng)客戶端設(shè)備110相信下一同步模式將是“慢 速”同步模式時(shí),客戶端設(shè)備110不對(duì)協(xié)商和拉取階段進(jìn)行壓縮,這是因?yàn)樵诔跏颊?qǐng)求消 息2810中向服務(wù)器120發(fā)送其整個(gè)數(shù)據(jù)集相對(duì)于例如處理成本而言是昂貴的。另外,當(dāng) 檢測(cè)到服務(wù)器120已經(jīng)協(xié)商到“復(fù)位”同步模式時(shí),發(fā)送數(shù)據(jù)將浪費(fèi)帶寬。在此慢速同步模式中,客戶端設(shè)備110在第一消息2810中發(fā)送sync-start命 令,其中表明了數(shù)據(jù)類(lèi)、錨和慢速同步模式。服務(wù)器120在第二消息2820中響應(yīng)以 sync-start響應(yīng)。在第三消息2830 (第二往返行程)中,客戶端設(shè)備110發(fā)送針對(duì)數(shù)據(jù)類(lèi) 的sync-changes命令。服務(wù)器120在下一消息2840中通過(guò)包括sync-changes響應(yīng)(OK、 數(shù)據(jù)類(lèi))、sync-changes命令(數(shù)據(jù)類(lèi))和sync-commit命令(數(shù)據(jù)類(lèi)、錨)來(lái)作出響應(yīng)。 在第三往返行程2850中,客戶端設(shè)備110發(fā)送sync-changes響應(yīng)(OK、數(shù)據(jù)類(lèi)、idmap) 禾口 sync—commit 響應(yīng)(OK)。圖29示出了并行地同步多個(gè)數(shù)據(jù)類(lèi)的示例。并行地實(shí)現(xiàn)多個(gè)數(shù)據(jù)類(lèi)狀態(tài)機(jī)("parallelism")使得能夠并行地同步多個(gè)數(shù)據(jù)類(lèi)。如在所有“sync”族命令中的 “uri”必需參數(shù)所指定的每一個(gè)數(shù)據(jù)類(lèi)操作其自身的獨(dú)特狀態(tài)機(jī)。因此,在最佳情況 中,所有數(shù)據(jù)類(lèi)可在單個(gè)傳送往返行程中快速同步。與之相比,諸如開(kāi)放移動(dòng)聯(lián)盟—— 數(shù)據(jù)同步協(xié)議(以前稱為SyncML協(xié)議)OMADS/SyncML之類(lèi)的其它同步協(xié)議串行地進(jìn) 行同步并且對(duì)于每一數(shù)據(jù)類(lèi)可能要求5個(gè)或者更多往返行程。在圖29所示的示例中,對(duì)諸如聯(lián)系人、日歷和書(shū)簽之類(lèi)的多個(gè)數(shù)據(jù)類(lèi)進(jìn)行并行 同步。在第一消息2810中,客戶端設(shè)備110并行地發(fā)送針對(duì)這些數(shù)據(jù)類(lèi)的sync-start命 令。在同一消息2910中,客戶端設(shè)備110還發(fā)送針對(duì)多個(gè)數(shù)據(jù)類(lèi)的sync-changes命令。 服務(wù)器120發(fā)送具有針對(duì)多個(gè)數(shù)據(jù)類(lèi)的sync-start響應(yīng)和sync-changes響應(yīng)的響應(yīng)2920。 例如,來(lái)自服務(wù)器120的sync-start響應(yīng)說(shuō)明日歷數(shù)據(jù)類(lèi)由于失敗的協(xié)商而在服務(wù)器120 上被復(fù)位。另外,針對(duì)日歷的sync-changes響應(yīng)說(shuō)明針對(duì)日歷數(shù)據(jù)類(lèi)尚未對(duì)改變進(jìn)行處 理。如sync-start響應(yīng)的OK狀況所示,針對(duì)聯(lián)系人和書(shū)簽的sync-start命令是成功的。 如sync-changes響應(yīng)的S_NotCompleted狀況所示,針對(duì)聯(lián)系人和書(shū)簽的sync-changes命 令尚未完成。在下一消息2930中,客戶端設(shè)備110發(fā)送請(qǐng)求復(fù)位同步(服務(wù)器在前一日歷 sync-start命令響應(yīng)中所請(qǐng)求的同步模式)的另一 sync-start命令以及針對(duì)日歷數(shù)據(jù)類(lèi)的 具有空的項(xiàng)參數(shù)的sync-changes命令。服務(wù)器120在下一消息2940中響應(yīng)以針對(duì)聯(lián) 系人、日歷和書(shū)簽數(shù)據(jù)類(lèi)的sync-start響應(yīng)和sync-changes響應(yīng);針對(duì)聯(lián)系人和書(shū)簽的 sync-changes響應(yīng);針對(duì)日歷的指示出有更多改變未決的sync-changes命令;以及針對(duì)聯(lián) 系人和書(shū)簽的sync-commit命令。這兩個(gè)消息2930和2940組成了第二往返行程。第三往返行程開(kāi)始于來(lái)自客戶端設(shè)備的消息2950,其中具有針對(duì)聯(lián)系人、日 歷和書(shū)簽的sync-changes響應(yīng)。消息2950包括針對(duì)聯(lián)系人和書(shū)簽的sync-commit響 應(yīng)。為了完成第三往返行程,服務(wù)器120在下一消息2960中向客戶端設(shè)備110發(fā)送針 對(duì)數(shù)據(jù)類(lèi)的sync-changes命令和sync-commit命令。這樣,僅在三個(gè)傳送協(xié)議往返行程 中,就可以完成多數(shù)據(jù)類(lèi)同步,同步模式再次協(xié)商(日歷在服務(wù)器上被復(fù)位),以及分割 sync-changes(來(lái)自服務(wù)器的日歷改變?cè)谙?940和消息2960中被發(fā)送)??蛇x的第四往返行程2970可被實(shí)現(xiàn)來(lái)使得客戶端設(shè)備110能夠向服務(wù)器120發(fā) 送針對(duì)日歷的具有idmap的sync—changes 口向應(yīng)禾口 sync—commit響應(yīng)。服務(wù)器120不執(zhí)行混合階段,直到所有數(shù)據(jù)類(lèi)都已完成拉取階段(即,接收到第 三消息)為止。這使得服務(wù)器120能夠在單個(gè)同步任務(wù)中執(zhí)行所有工作。服務(wù)器針對(duì)其 它數(shù)據(jù)類(lèi)發(fā)送S_N0tC0mpleted,直到針對(duì)所有數(shù)據(jù)類(lèi)的所有客戶端110改變都已被服務(wù) 器120接收為止。同步錨檢查點(diǎn)同步協(xié)議使用命令和命令響應(yīng)中的“同步錨”參數(shù)來(lái)組織和維持可跟蹤的同步 會(huì)話。服務(wù)器120可以相對(duì)其內(nèi)部版本化方法來(lái)管理命令和命令響應(yīng)中的錨。同步錨是客戶端設(shè)備110與服務(wù)器120在同步處理期間交換的不透明數(shù)據(jù)。然 后,在交付階段,新的一組錨可被交換并堅(jiān)持以供后面的同步會(huì)話期間使用。作為比 較,其它同步協(xié)議使用在同步會(huì)話開(kāi)始時(shí)的錨,并且僅在同步會(huì)話成功完成時(shí)更新錨, 或者如果會(huì)話被取消或者預(yù)期以外地終止則將錨回滾。
協(xié)商期間在預(yù)期錨與實(shí)際錨之間的任何差別(稱為錨失配)會(huì)產(chǎn)生慢速同步,或 者至少是重傳來(lái)自失敗的同步會(huì)話的所有數(shù)據(jù)。在不可靠的數(shù)據(jù)網(wǎng)絡(luò)上,這會(huì)導(dǎo)致如下 情形其中,沒(méi)有任何進(jìn)展并且與服務(wù)器的同步被有利地阻止成功完成同步,直到外部 條件改變?yōu)橹?。預(yù)期以外的會(huì)話故障也會(huì)導(dǎo)致在下一個(gè)同步會(huì)話上的錨失配。OTA同步協(xié)議140使得服務(wù)器120能夠在同步會(huì)話期間的不同檢查點(diǎn)可選地返回 經(jīng)更新的錨?!癮nchor”參數(shù)可以存在于任何sync族命令或命令響應(yīng)中。檢查點(diǎn)錨包 含“next_Server_anCh0r”元素并且可以包含“mode”元素。這使得能夠?qū)ν藉^進(jìn)行 細(xì)粒度的更新以降低錨失配的可能性和影響。每一個(gè)服務(wù)器錨被利用如下信息來(lái)編碼 該信息向服務(wù)器120提供與在錨被生成時(shí)的內(nèi)部服務(wù)器狀態(tài)有關(guān)的精確信息。例如,可 利用如下信息對(duì)服務(wù)器錨進(jìn)行編碼該信息是關(guān)于從客戶端設(shè)備110請(qǐng)求的改變是否已 與中央數(shù)據(jù)庫(kù)混合的。也可利用關(guān)于客戶端設(shè)備110已接受哪些更新的信息來(lái)編碼服務(wù) 器錨。此外,還可利用關(guān)于同步會(huì)話是否被正常完成的信息來(lái)編碼服務(wù)器錨。服務(wù)器錨 中可編碼其它內(nèi)部服務(wù)器狀態(tài)。響應(yīng)于客戶端設(shè)備的最后“sync-changes”命令,示例錨檢查點(diǎn)可以包括“服 務(wù)器混合階段的結(jié)尾”。錨檢查點(diǎn)還可包括在分割的“sync-changes”和交付階段等等 的點(diǎn)。服務(wù)器120可智能地決定添加檢查點(diǎn)錨的時(shí)間和位置。當(dāng)檢查點(diǎn)錨被放置在 "sync-changes"命令中時(shí),檢查點(diǎn)錨保證接收到的數(shù)據(jù)集強(qiáng)制實(shí)施數(shù)據(jù)類(lèi)的格局的數(shù)據(jù)
完整性要求。例如,數(shù)據(jù)完整性要求可以包括與添加了檢查點(diǎn)的數(shù)據(jù)集中的未知實(shí)體 無(wú)關(guān)。在拉取階段完成之后,即使同步會(huì)話被取消,也可由客戶端設(shè)備110保存最近的 檢查點(diǎn)錨。當(dāng)不再需要檢查點(diǎn)錨時(shí),或者當(dāng)服務(wù)器需要釋放關(guān)聯(lián)的服務(wù)器側(cè)的用于維持檢 查點(diǎn)狀態(tài)的資源時(shí),服務(wù)器120將使檢查點(diǎn)錨到期。當(dāng)客戶端設(shè)備110提供未知的或者 到期的檢查點(diǎn)錨時(shí),同步會(huì)話將仍然進(jìn)入慢速同步模式。在下一個(gè)同步會(huì)話協(xié)商階段,即“sync-start”命令期間,客戶端設(shè)備110將其 最后保存的錨發(fā)送給服務(wù)器120。服務(wù)器120使用編碼在這些錨中的信息來(lái)從最近保存的 檢查點(diǎn)開(kāi)始同步會(huì)話,即使前一同步會(huì)話預(yù)期以外地終止或者“sync-commit”命令響應(yīng) 未被顯式地返回到服務(wù)器120也是如此。當(dāng)客戶端設(shè)備110在同步會(huì)話期間接收到這樣 的錨時(shí),客戶端設(shè)備110保留來(lái)自服務(wù)器的最近的錨,并保存其值以在用于下一同步會(huì) 話的“sync-start”命令中發(fā)送。圖30示出了使用檢查點(diǎn)錨的示例同步會(huì)話??蛻舳嗽O(shè)備110通過(guò)發(fā)送消息3010 來(lái)發(fā)起同步會(huì)話??蛻舳嗽O(shè)備110在消息3010中使用錨aO。該錨aO可以是來(lái)自前一 同步會(huì)話的最近的服務(wù)器錨值。客戶端設(shè)備110和服務(wù)器120按需交換其它消息3020、 3030、3040、3050和3060。在同步會(huì)話的不同點(diǎn)處,服務(wù)器120使用這些消息3020、 3030、3040、3050和3060來(lái)返回檢查點(diǎn)錨al、a2和a3。在接收和處理來(lái)自服務(wù)器120的包含“anchors”元素的各個(gè)消息時(shí),客戶端 設(shè)備110對(duì)其錨進(jìn)行更新。當(dāng)同步會(huì)話中斷或者消息丟失時(shí),客戶端設(shè)備在下一會(huì)話的
"sync-start"命令中提供其成功處理了的最近錨。取決于接收到哪個(gè)錨值,客戶端設(shè)備 110可以按需推斷必須采取哪些動(dòng)作來(lái)完成前一個(gè)同步。因此,即使在極其脆弱的無(wú)線網(wǎng)絡(luò)上或者在需要發(fā)送大數(shù)據(jù)集時(shí)也可實(shí)現(xiàn)遞增的同步進(jìn)展。圖31是示出示例檢查點(diǎn)錨的表格。表格包括描述可能的檢查點(diǎn)錨3110、關(guān)聯(lián)的 同步階段3120和與檢查點(diǎn)錨相關(guān)聯(lián)的服務(wù)器狀態(tài)3130的欄。例如,錨aO可以表示協(xié)商 階段,其沒(méi)有引起服務(wù)器狀態(tài)的改變。錨al可以表示推送階段。服務(wù)器120應(yīng)用客戶 端設(shè)備110所請(qǐng)求的改變,并且服務(wù)器120將其改變的第1部分發(fā)送到客戶端設(shè)備110。 錨a2可以表示由服務(wù)器110發(fā)起的推送階段。服務(wù)器將其改變的第2部分發(fā)送到客戶端 設(shè)備110。錨a3可以表示交付階段并且用信號(hào)通知交付改變已經(jīng)完成。該錨用信號(hào)通知 同步會(huì)話已經(jīng)完成。設(shè)備設(shè)定同步協(xié)議120提供了 一種供服務(wù)器120動(dòng)態(tài)地請(qǐng)求設(shè)備設(shè)定和能力的機(jī)制。 “get”和“put”命令可用于交換信息。在任何時(shí)候,服務(wù)器120都可發(fā)送例如“uri”
參數(shù)具有值“deviceinfo”的“get”命令以請(qǐng)求設(shè)備設(shè)定和能力??商娲兀蛻舳嗽O(shè) 備110可向服務(wù)器120發(fā)送具有相同“uri”參數(shù)的“put”命令?!皍ri”參數(shù)的值是包 含各種鍵-值對(duì)的字典。當(dāng)存在時(shí),“userid”的值表示認(rèn)證的主要用戶并且被實(shí)現(xiàn)為 字符串。當(dāng)存在時(shí),“authtype”的值表示認(rèn)證方案并且被實(shí)現(xiàn)為字符串。當(dāng)存在時(shí), "auth"的值表示認(rèn)證證書(shū)并且被表示為字符串。當(dāng)接收者想要執(zhí)行操作時(shí),接收者返 回諸如狀況S_OK(600)之類(lèi)的成功狀況。當(dāng)所請(qǐng)求的URI是未知的時(shí),接收者返回諸如 狀況E_NOtFOUnd(603)之類(lèi)的狀況用以指示出該URI未被找到并且是未知的。當(dāng)所請(qǐng)求 的操作不被允許時(shí),例如,經(jīng)授權(quán)的主要用戶不被允許刪除URI時(shí),接收者返回諸如狀 況E_NOtAllOwed(604)之類(lèi)的狀況用以指示出所請(qǐng)求的操作不被允許。當(dāng)所請(qǐng)求的操作 由于提供來(lái)的數(shù)據(jù)錯(cuò)誤而無(wú)法執(zhí)行時(shí),接收者返回諸如狀況E_BadValue(607)之類(lèi)的狀 況用以指示出所請(qǐng)求的操作無(wú)法執(zhí)行。當(dāng)所請(qǐng)求的操作由于提供來(lái)的“itemtype”錯(cuò)誤 而無(wú)法執(zhí)行時(shí),接收者返回諸如狀況E_N0tSUpp0rted(614)之類(lèi)的狀況用以指示出所請(qǐng)求 的操作得不到支持。圖32示出了針對(duì)“uri”參數(shù)的示例鍵_值對(duì)的表格?!皍ri”參數(shù)的可用鍵3210 包括 version、msisdn、deviceid、name、model、carrier 禾口 dataclasses。Version、msisdn、 deviceid、name、model 和 carrier 鍵的關(guān)聯(lián)值 3220 是字符串值。Dataclasses 鍵的值 3220
是字典。表格還示出了對(duì)這些鍵的關(guān)聯(lián)描述3230。例如,version鍵-值可以描述產(chǎn)品 版本,例如版本1.1.4。Msisdn鍵-值可以描述當(dāng)前安裝的SIM卡的電話號(hào)碼。Deviceid 鍵-值可以描述ICCID。Name鍵-值可以描述用戶設(shè)備的名稱,例如EctoPhone。Model 鍵-值可以描述客戶端設(shè)備110的機(jī)型,例如iPhone 、iPod Touch 等等。Carrier 鍵-值可以描述電信公司名稱,例如AT&T 、Verizon 等等。Dataclasses鍵-值可 以描述。當(dāng)客戶端設(shè)備110第一次與服務(wù)器120同步時(shí),服務(wù)器120通過(guò)發(fā)送“get”命 令來(lái)請(qǐng)求設(shè)備信息。之后,當(dāng)設(shè)備信息改變時(shí),客戶端設(shè)備Iio通過(guò)發(fā)送“put”命令來(lái) 將經(jīng)改變的設(shè)備信息發(fā)送到服務(wù)器120。過(guò)濾過(guò)濾是基于數(shù)據(jù)項(xiàng)中的值來(lái)約束與客戶端設(shè)備110同步的數(shù)據(jù)項(xiàng)集合的能力。 例如,用戶可能僅想同步某一群組集合中包含的聯(lián)系人,或者在圍繞當(dāng)前日期的某一時(shí)間窗內(nèi)的日歷事件。在諸如iTunes 過(guò)濾器之類(lèi)的數(shù)據(jù)共享/管理應(yīng)用中,在線纜同步期間由計(jì)算 機(jī)強(qiáng)制實(shí)施設(shè)定以對(duì)發(fā)送到諸如iPhone 之類(lèi)的客戶端設(shè)備Iio的數(shù)據(jù)項(xiàng)集合進(jìn)行約束 或過(guò)濾。同步協(xié)議140在無(wú)線同步解決方案中提供類(lèi)似的過(guò)濾功能。由服務(wù)器120強(qiáng)制 實(shí)施來(lái)自iTunes 的相同過(guò)濾器設(shè)定而無(wú)需任何用戶動(dòng)作。因此,可自動(dòng)執(zhí)行過(guò)濾???替代地,可向用戶呈現(xiàn)在客戶端設(shè)備Iio上的用戶接口(Ui)以使得用戶能夠顯示并編輯 要強(qiáng)制實(shí)施的過(guò)濾器設(shè)定。同步協(xié)議140使得能夠使用基原命令在客戶端設(shè)備110與服務(wù)器120之間交換過(guò) 濾器設(shè)定。使用“dataclass/<dataclasOTame>/filter”形式的“uri”參數(shù)來(lái)指定過(guò)濾器信
息。過(guò)濾器信息的值是字典。圖33是示出過(guò)濾器設(shè)定的示例鍵_值對(duì)的表格。過(guò)濾器設(shè)定的可用鍵3310包 括 default_container、 constrain_containers 禾口 discard_after_days。 這些過(guò)濾器設(shè)定鍵的值 3320分別是字符串、數(shù)組和字符串。Defaultjontainer鍵的數(shù)據(jù)類(lèi)120包括聯(lián)系人和日 歷。此外,Constrain_constrainers鍵的數(shù)據(jù)類(lèi)120也包括聯(lián)系人和日歷。Discard_after_ days鍵的數(shù)據(jù)類(lèi)120包括日歷。Default_container鍵描述容器實(shí)體的標(biāo)識(shí)(LUID),例如聯(lián)系人的群組ID和事件 的日歷ID。Constrain_containers鍵描述要包括的容器實(shí)體的LUID的集合,例如要包括 的群組的集合。DiSCard_after_dayS鍵描述如下天數(shù)在該天數(shù)以后,比所描述的天數(shù)舊
的事件應(yīng)當(dāng)被刪除。圖34是以偽巴科斯諾爾范式(pseudoBNF,Backus-Naur Form)的圖示的示例。
偽巴科斯諾爾范式是描述句法(syntax)的一種快捷方式。BNF是使能對(duì)上下文無(wú)關(guān)語(yǔ)法 的表達(dá)的元句法。上下文無(wú)關(guān)語(yǔ)法可以通過(guò)使用兩組規(guī)則來(lái)定義編程語(yǔ)言的句法,這兩 組規(guī)則是詞法規(guī)則(Lexical rule)和句法規(guī)則(Syntactic rule)。增廣型BNF是BNF的修 改版本,其使用不同的命名規(guī)則、重復(fù)、替代、順序獨(dú)立性和值范圍。圖35示出了示例同步會(huì)話。圖35所示的示例同步會(huì)話包括經(jīng)分割的 sync-changes和放入的過(guò)濾器信息。客戶端設(shè)備110在第一消息3510中向服務(wù)器120發(fā) 送協(xié)商階段命令(“sync-start”)和拉取階段命令(“sync-changes”)。Put命令被用 于發(fā)送針對(duì)特定數(shù)據(jù)類(lèi)的數(shù)據(jù)項(xiàng)。在圖35所示的示例中,put命令中指示出的數(shù)據(jù)類(lèi)是 聯(lián)系人。此外,數(shù)據(jù)項(xiàng)被過(guò)濾以約束針對(duì)該數(shù)據(jù)類(lèi)要同步的數(shù)據(jù)。在第二消息3520中,服務(wù)器120通過(guò)發(fā)送具有狀況“S_OK”的sync-start命 令響應(yīng)來(lái)作出響應(yīng)以指示出聯(lián)系人數(shù)據(jù)類(lèi)的成功協(xié)商。另外,anchors被用于指示出 檢查點(diǎn)。此外,服務(wù)器120還發(fā)送針對(duì)聯(lián)系人數(shù)據(jù)類(lèi)的具有“more” Boolean標(biāo)志的 sync-changes命令,其中,“more” Boolean標(biāo)志指示出并非針對(duì)該數(shù)據(jù)類(lèi)的所有適當(dāng)數(shù) 據(jù)項(xiàng)都包括在命令參數(shù)中。此外,第二消息3520可以包括put命令響應(yīng),其中具有指示 出成功放入的“S_OK”狀況。在第三消息3530中,客戶端設(shè)備110包括sync-changes命令響應(yīng),其具有針對(duì) 聯(lián)系人數(shù)據(jù)類(lèi)的由uri參數(shù)指示出的“S_OK”狀況。此外,例如idmap被包括以提供 GUID-LUID映射。在第四消息3540中,服務(wù)器120發(fā)送sync-changes命令,其具有指 示出聯(lián)系人數(shù)據(jù)類(lèi)的uri參數(shù)。此外,“more” Boolean被包括以指示出后面將跟隨其它數(shù)據(jù)。在第五消息3550中,客戶端設(shè)備110發(fā)送sync-changes命令響應(yīng),其具有狀況 “S_OK”用以指示出對(duì)聯(lián)系人數(shù)據(jù)類(lèi)的成功更新。在第六消息3560中,服務(wù)器120發(fā) 送針對(duì)聯(lián)系人數(shù)據(jù)類(lèi)的sync-changes命令和sync-commit命令??蛻舳嗽O(shè)備110在第七 消息3570中利用指示出成功更新的sync-changes命令響應(yīng)來(lái)作出響應(yīng)??蛻舳嗽O(shè)備110 還包括sync-commit響應(yīng)(OK)用以指示出客戶端設(shè)備已交付改變。最后一個(gè)消息3580 具有空的消息主體用以指示出同步會(huì)話的最后一個(gè)消息。圖 36、37a、37b、38a、38b、38c、38d、39a、39b、39c、40a 和 40b 表示同步 會(huì)話的線跡(Wiretrace)示例。圖36示出用于復(fù)位同步會(huì)話的四種示例消息的概要。圖 37a和37b示出從客戶端設(shè)備110發(fā)送到服務(wù)器120的示例消息。Sync-start命令包括值為
"com.apple.Contacts"的指示出數(shù)據(jù)類(lèi)的uri參數(shù)。此外,同步模式被指示為“復(fù)位”。 消息還包括具有相同數(shù)據(jù)類(lèi)(com.apple.Contacts)和空的改變的sync-changes命令。圖38a、38b、38c和38d示出了從服務(wù)器120發(fā)送到客戶端設(shè)備110的示例消 息。服務(wù)器120發(fā)送sync-start命令響應(yīng),其具有狀況“S_OK”用以指示出成功協(xié)商。 該消息還包括sync-changes命令響應(yīng),其具有狀況“S_OK”用以指示出成功的數(shù)據(jù)更 新。另外,服務(wù)器120還包括sync-changes命令,其發(fā)送一個(gè)聯(lián)系人、電話號(hào)碼和電子 郵件地址。服務(wù)器120還發(fā)送get命令以從客戶端設(shè)備110拉取設(shè)備信息。圖39a、39b和39c示出了從客戶端設(shè)備110發(fā)送的示例消息。該消息包括 sync-changes命令響應(yīng),其具有狀況“S_OK”用以指示出對(duì)改變后的數(shù)據(jù)項(xiàng)的成功更 新。Idmap參數(shù)被提供來(lái)指示出GUID到LUID的映射。消息還包括get命令響應(yīng),其 具有狀況“S_OK”用以指示出在返回設(shè)備信息方面的成功獲取操作。此外,消息還包 括sync-commit命令用以指示出客戶端設(shè)備110已經(jīng)交付并且服務(wù)器120也應(yīng)當(dāng)交付。圖40a和40b示出了從服務(wù)器120發(fā)送的示例消息。服務(wù)器120發(fā)送sync-commit 命令響應(yīng),其具有狀況“S_OK”用以指示出服務(wù)器120也已交付改變。圖41、42a、42b、43a、43b和43c示出了用于快速同步的示例消息??蛻舳嗽O(shè) 備110和服務(wù)器120各自具有一次刪除。圖41示出了用于快速同步的兩種示例消息的概 要。圖42a和42b示出了從客戶端設(shè)備110發(fā)送的用于快速同步的示例消息。該消息包 括用于協(xié)商階段的sync-start命令。Uri參數(shù)指示出作為com.apple.Contacts的數(shù)據(jù)類(lèi)。 同步模式被指示為快速。該消息還包括sync-changes命令用以刪除針對(duì)所指示出的com. apple.Contacts數(shù)據(jù)類(lèi)的數(shù)據(jù)記錄。圖43a、43b和43c示出了響應(yīng)于客戶端設(shè)備110所發(fā)送的消息而從服務(wù)器120 發(fā)送的示例消息。該消息包括具有用以指示出成功協(xié)商的狀況“S_OK”的sync-start命 令響應(yīng)。該消息還包括sync-changes命令響應(yīng),其具有狀況“S_OK”用以指示出對(duì)客 戶端設(shè)備110所指示的數(shù)據(jù)記錄的成功刪除。另外,服務(wù)器120還發(fā)送sync-changes命 令用以請(qǐng)求另一數(shù)據(jù)記錄的刪除。在該sync-changes命令中由uri參數(shù)指示出了相同的數(shù) 據(jù)類(lèi),com.apple.Contacts。因此,此次是由服務(wù)器12O請(qǐng)求刪除來(lái)自com.apple.Contacts 的另一數(shù)據(jù)記錄。來(lái)自服務(wù)器120的消息還包括sync-commit命令用以指示出服務(wù)器120 已交付同步并且客戶端設(shè)備110也應(yīng)當(dāng)交付。圖44a和44b示出了用于同步客戶端設(shè)備110和服務(wù)器120的示例處理。發(fā)送 者發(fā)起(4402)與接收者的協(xié)商階段。在此示例中,發(fā)送者是客戶端設(shè)備110,而接收者是服務(wù)器120。協(xié)商階段是通過(guò)發(fā)送具有諸如sync-start之類(lèi)的有狀態(tài)sync族命令的消息 來(lái)發(fā)起(4402)的。Sync-start命令包括指示出特定數(shù)據(jù)類(lèi)的uri參數(shù)和可以包括所請(qǐng)求的 同步模式、數(shù)據(jù)存儲(chǔ)庫(kù)版本和/或同步錨的anchors參數(shù)。當(dāng)并行地同步多個(gè)數(shù)據(jù)類(lèi)時(shí), 針對(duì)每一個(gè)數(shù)據(jù)類(lèi)來(lái)發(fā)送單獨(dú)的“sync-sart”命令請(qǐng)求。這些并行sync-start命令被包 括在同一消息中以使得服務(wù)器能夠在同一同步任務(wù)中對(duì)它們進(jìn)行處理。服務(wù)器120通過(guò)向客戶端設(shè)備110發(fā)送具有sync-start命令響應(yīng)的消息來(lái)對(duì)協(xié)商 階段作出響應(yīng)(4404)。對(duì)協(xié)商是否成功進(jìn)行判斷(4406)。對(duì)uri參數(shù)所指示的數(shù)據(jù)類(lèi)進(jìn) 行檢測(cè)并分析以判斷服務(wù)器120是否支持并使能該數(shù)據(jù)類(lèi)(4424)。當(dāng)檢測(cè)到該數(shù)據(jù)類(lèi)不 被支持時(shí),生成諸如“E_N0tSUpp0rted(612)”之類(lèi)的差錯(cuò)狀況(4432)。所生成的差錯(cuò)狀 況可被包括在sync-start命令響應(yīng)中以指示出數(shù)據(jù)類(lèi)得不到支持。當(dāng)檢測(cè)到服務(wù)器120未 使能該數(shù)據(jù)類(lèi)時(shí),生成諸如“E_NotAlloWed(604)”之類(lèi)的差錯(cuò)狀況。所生成的狀況被包 括在sync-start命令響應(yīng)中以指示出該數(shù)據(jù)類(lèi)未被使能。當(dāng)檢測(cè)到數(shù)據(jù)類(lèi)得到支持并且被 使能時(shí),生成諸如“S_OK”之類(lèi)的成功狀況(4426)。所生成的狀況被包括在sync-start 命令響應(yīng)中用以指示出服務(wù)器120支持并且使能了該數(shù)據(jù)類(lèi)。當(dāng)sync-start命令的anchors參數(shù)包括所請(qǐng)求的同步模式時(shí),所請(qǐng)求的同步模式被 分析以判斷服務(wù)器120是否接受(4428)該同步模式。當(dāng)該同步模式不被服務(wù)器120接受 時(shí),諸如“E_Neg0tiati0nFailed(613)”之類(lèi)的差錯(cuò)狀況被生成(4434)。所生成的狀況被 包括在sync-start命令響應(yīng)中以指示出所請(qǐng)求的同步模式不被接受。服務(wù)器120可以決定 (4436)是否建議使用另外的同步模式。當(dāng)服務(wù)器120想要以另外的模式進(jìn)行同步時(shí),所 建議的另外模式被包括(4438)在sync-start命令響應(yīng)中的anchors參數(shù)中。當(dāng)所請(qǐng)求的同步模式被接受時(shí),諸如“S_OK”之類(lèi)的成功狀況被生成 (4430)。所生成的成功狀況被包括在sync-start命令響應(yīng)中。當(dāng)檢測(cè)到協(xié)商成功時(shí)(如“S_OK”狀況所指示的),同步會(huì)話前進(jìn)(4408)到拉 取階段。當(dāng)同步模式為快速時(shí),客戶端設(shè)備Iio將經(jīng)改變的記錄發(fā)送到服務(wù)器120。當(dāng) 同步模式為“慢速”時(shí),所有記錄都被發(fā)送到服務(wù)器120。改變被使用sync-changes有 狀態(tài)命令來(lái)發(fā)送。服務(wù)器120利用相應(yīng)的sync-changes命令響應(yīng)來(lái)對(duì)sync-changes命令 作出響應(yīng),以指示出改變是否已被接受。成功狀況“S_OK”指示出改變已被接受。當(dāng)所有的改變都已被接收時(shí),服務(wù)器120前進(jìn)(4410)到混合階段。當(dāng)在單個(gè)會(huì) 話中對(duì)多個(gè)數(shù)據(jù)類(lèi)進(jìn)行同步時(shí),針對(duì)各個(gè)數(shù)據(jù)類(lèi)的sync-changes命令將具有不同的狀態(tài) 機(jī)。然而,服務(wù)器120 —直等待直到所有數(shù)據(jù)類(lèi)都已完成拉取階段或者在前進(jìn)到混合階 段之前取消為止。服務(wù)器120可以拒絕任何檢測(cè)到的無(wú)效改變。在混合階段期間,服務(wù)器判定(4412)對(duì)于該數(shù)據(jù)類(lèi)是否存在任何沖突。當(dāng)檢測(cè) 到存在沖突時(shí),服務(wù)器120判定(4416)是由其自身解決沖突還是由用戶或客戶端設(shè)備110 來(lái)解決沖突。在服務(wù)器120解決沖突的情況下,服務(wù)器120可以依賴于啟發(fā)法來(lái)解決沖 突。例如,發(fā)起最近的同步的客戶端設(shè)備110可被選擇作為贏家。對(duì)于諸如數(shù)據(jù)類(lèi)和/或數(shù)據(jù)項(xiàng)之類(lèi)的某些情形,用戶/客戶端設(shè)備110可被選擇 作為解決沖突的一方。然后,檢測(cè)到的沖突被發(fā)送到客戶端設(shè)備110以使得客戶端設(shè)備 110能夠解決沖突。此外,例如可通過(guò)在客戶端設(shè)備110上的顯示單元上顯示檢測(cè)到的沖 突來(lái)向用戶呈現(xiàn)這些沖突。用戶可以手動(dòng)解決沖突。沖突解決的結(jié)果隨后可在下一同步會(huì)話期間被從設(shè)備110發(fā)送到服務(wù)器120。來(lái)自服務(wù)器120 (接收者)的改變可在推送階段(4414)期間被發(fā)送到客戶端設(shè)備 110。服務(wù)器120可向客戶端設(shè)備發(fā)送具有sync-changes命令的消息以將改變推送給客戶 端設(shè)備110。最后,一旦所有更新都已被接收,就進(jìn)入交付階段(4416)。雙方一致認(rèn)定同步 成功,堅(jiān)持它們當(dāng)前的同步錨,并將所交換的數(shù)據(jù)交付給它們各自的數(shù)據(jù)存儲(chǔ)庫(kù)。在交 付階段中,消息是利用sync-commit命令和命令響應(yīng)來(lái)發(fā)送的。此說(shuō)明書(shū)中描述的主題和功能操作的實(shí)施例可被實(shí)現(xiàn)在數(shù)字電子電路中,或者 用計(jì)算機(jī)軟件、固件或硬件(包括此說(shuō)明書(shū)中公開(kāi)的結(jié)構(gòu)以及它們的結(jié)構(gòu)性等同物)或者 其中一個(gè)或多個(gè)的組合來(lái)實(shí)現(xiàn)。此說(shuō)明書(shū)中描述的主題的實(shí)施例可被實(shí)現(xiàn)為一個(gè)或多個(gè) 計(jì)算機(jī)程序產(chǎn)品,即編碼在有形程序載體上供數(shù)據(jù)處理裝置執(zhí)行或者控制數(shù)據(jù)處理裝置 的操作的一個(gè)或多個(gè)計(jì)算機(jī)程序指令命令。有形程序載體可以是傳播信號(hào)或者計(jì)算機(jī)可 讀介質(zhì)。傳播信號(hào)是人工生成的信號(hào),例如機(jī)器生成的電信號(hào)、光信號(hào)或電磁信號(hào),這 種人工生成的信號(hào)被生成用以對(duì)要傳送到合適的接收裝置以供計(jì)算機(jī)執(zhí)行的信息進(jìn)行編 碼。計(jì)算機(jī)可讀介質(zhì)可以是機(jī)器可讀存儲(chǔ)設(shè)備、機(jī)器可讀存儲(chǔ)基底、存儲(chǔ)設(shè)備、實(shí)現(xiàn)機(jī) 器可讀傳播信號(hào)的事物的合成物或者它們中的一項(xiàng)或多項(xiàng)的組合。術(shù)語(yǔ)“數(shù)據(jù)處理裝置”涵蓋了用于處理數(shù)據(jù)所有的裝置、設(shè)備和機(jī)器,例如包 括可編程的處理器、計(jì)算機(jī)、或者多個(gè)處理器或計(jì)算機(jī)。裝置除了硬件以外,還可以 包括為所涉及的計(jì)算機(jī)程序創(chuàng)建執(zhí)行環(huán)境的代碼,例如構(gòu)成下述內(nèi)容的代碼處理器固 件、協(xié)議棧、數(shù)據(jù)庫(kù)管理系統(tǒng)、操作系統(tǒng)、或者它們中一項(xiàng)或多項(xiàng)的組合。計(jì)算機(jī)程序(也稱為程序、軟件、軟件應(yīng)用、腳本、或代碼)可以寫(xiě)成任何形式 的編程語(yǔ)言,包括編譯語(yǔ)言或解釋語(yǔ)言,或者表述性或過(guò)程性的語(yǔ)言,它可以以任何形 式來(lái)部署,包括獨(dú)立的程序或者作為模塊、組件、子例程或者適用于計(jì)算環(huán)境中的其他 單元。計(jì)算機(jī)程序不一定要對(duì)應(yīng)于文件系統(tǒng)中的文件。程序可以被儲(chǔ)存在保存其他程序 或數(shù)據(jù)(例如標(biāo)記語(yǔ)言文檔中儲(chǔ)存的一個(gè)或多個(gè)腳本)的文件的一部分中,專(zhuān)用于所涉及 的程序的單一文件中,或者多個(gè)協(xié)作的文件中(例如儲(chǔ)存一個(gè)或多個(gè)模塊、子程序或代 碼部分的多個(gè)文件)。計(jì)算機(jī)程序可以部署成在一個(gè)計(jì)算機(jī)或多個(gè)計(jì)算機(jī)上執(zhí)行,所述多 個(gè)計(jì)算機(jī)位于一個(gè)地點(diǎn)或分布在多個(gè)地點(diǎn)并由通信網(wǎng)絡(luò)而互連。這份說(shuō)明書(shū)中所述的處理和邏輯流程可以由一個(gè)或多個(gè)可編程處理器來(lái)執(zhí)行, 這些處理器執(zhí)行一個(gè)或多個(gè)計(jì)算機(jī)程序來(lái)通過(guò)對(duì)輸入數(shù)據(jù)進(jìn)行操作并產(chǎn)生輸出而執(zhí)行功 能。也可以由專(zhuān)門(mén)目的的邏輯電路(例如FPGA (現(xiàn)場(chǎng)可編程門(mén)陣列)或ASIC(專(zhuān)用集 成電路))來(lái)執(zhí)行這些處理和邏輯流程以及由這些專(zhuān)門(mén)目的的邏輯電路來(lái)實(shí)現(xiàn)裝置。適于執(zhí)行計(jì)算機(jī)程序的處理器例如既包括通用和專(zhuān)用目的的微處理器,也包括 任何種類(lèi)的數(shù)字計(jì)算機(jī)的任一個(gè)或多個(gè)處理器。通常,處理器將從只讀存儲(chǔ)器、或隨機(jī) 存取存儲(chǔ)器、或者這二者接收指令和數(shù)據(jù)。計(jì)算機(jī)的主要元件是用于執(zhí)行指令的處理器 以及用于儲(chǔ)存指令和數(shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)器設(shè)備。通常,計(jì)算機(jī)還會(huì)包括用于儲(chǔ)存數(shù) 據(jù)的一個(gè)或多個(gè)海量?jī)?chǔ)存設(shè)備(例如磁盤(pán)、磁光盤(pán)或光盤(pán)),或者以可操作的方式耦合來(lái) 從該設(shè)備接收數(shù)據(jù)、向其傳輸數(shù)據(jù)或既接收又傳輸。但是,計(jì)算機(jī)不一定要具有這些設(shè) 備。此外,計(jì)算機(jī)也可以嵌入另一設(shè)備中。
適于儲(chǔ)存計(jì)算機(jī)程序指令和數(shù)據(jù)的計(jì)算機(jī)可讀介質(zhì)包括所有形式的非易失性存 儲(chǔ)器、介質(zhì)和存儲(chǔ)器設(shè)備,例如包括半導(dǎo)體存儲(chǔ)器設(shè)備(例如EPROM、EEPROM和閃存 設(shè)備)、磁盤(pán)(例如內(nèi)部硬盤(pán)或可移動(dòng)盤(pán))、磁光盤(pán)、以及CD ROM和DVD-ROM盤(pán)。 處理器和存儲(chǔ)器可以由專(zhuān)門(mén)目的的邏輯電路提供補(bǔ)充,或者結(jié)合到其中。為了提供與用戶的交互,這份說(shuō)明書(shū)中所述主題的實(shí)施例可以在具有用于向用 戶顯示信息的顯示設(shè)備(例如CRT (陰極射線管)或LCD (液晶顯示)監(jiān)視器)以及鍵盤(pán) 和點(diǎn)選設(shè)備(例如鼠標(biāo)器或軌跡球)的計(jì)算機(jī)上實(shí)現(xiàn),用戶能夠通過(guò)所述鍵盤(pán)和點(diǎn)選裝置 來(lái)向計(jì)算機(jī)提供輸入。其他種類(lèi)的設(shè)備也可以用來(lái)提供與用戶的交互,例如,來(lái)自用戶 的輸入可以以任何形式被接收,包括聲波、語(yǔ)音或觸覺(jué)輸入。這份說(shuō)明書(shū)中所述主題的實(shí)施例可以在下述形式中實(shí)現(xiàn)包括后端組件(例如 作為數(shù)據(jù)服務(wù)器)的計(jì)算系統(tǒng)、或者包括中間件組件(例如應(yīng)用服務(wù)器)的計(jì)算系統(tǒng)、 或者包括前端組件(例如客戶端計(jì)算機(jī),其具有圖形用戶界面或Web瀏覽器,用戶可以 通過(guò)它們來(lái)與這份說(shuō)明書(shū)中所述主題的實(shí)現(xiàn)形式進(jìn)行交互)的計(jì)算系統(tǒng)、或者一個(gè)或多 個(gè)這種后端組件、中間件組件或前端組件的組合。系統(tǒng)的組件可以由任何形式的數(shù)字 數(shù)據(jù)通信介質(zhì)(例如通信網(wǎng)絡(luò))來(lái)互連。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(LAN)和廣域網(wǎng) (WAN),例如因特網(wǎng)。計(jì)算系統(tǒng)可以包括客戶端和服務(wù)器??蛻魴C(jī)和服務(wù)器通常彼此處于遠(yuǎn)程,并通 常通過(guò)通信網(wǎng)絡(luò)來(lái)交互??蛻舳撕头?wù)器的關(guān)系起因于運(yùn)行在相應(yīng)計(jì)算機(jī)上、并彼此具 有客戶端_服務(wù)器關(guān)系的計(jì)算機(jī)程序。盡管這份說(shuō)明書(shū)包含了許多具體細(xì)節(jié),但是這些不應(yīng)認(rèn)為是對(duì)任何發(fā)明的或所 要求保護(hù)的范圍的限制,而應(yīng)作為可以專(zhuān)用于特定發(fā)明的特定實(shí)施例的特征的描述。這 份說(shuō)明書(shū)中以不同實(shí)施例的形式描述的某些特征也可以在一個(gè)實(shí)施例中結(jié)合來(lái)實(shí)現(xiàn)。相 反,以單一實(shí)施例的形式描述的各個(gè)特征也可以在多個(gè)實(shí)施例中分別實(shí)現(xiàn)或者以任何合 適的子組合形式來(lái)實(shí)現(xiàn)。此外,盡管上文可能將多個(gè)特征作為以特定組合的形式來(lái)作用 并且甚至最初如此主張了權(quán)利,但在某些情況下,來(lái)自所主張權(quán)利的組合形式的一個(gè)或 多個(gè)特征也可以從該組合形式中被除去,所主張權(quán)利的組合形式也可以針對(duì)子組合或者 子組合的變形。類(lèi)似地,盡管在附圖中以特定順序描述了多個(gè)操作,但是這不應(yīng)認(rèn)為要求這些 操作必須以所示的特定順序或依次的順序來(lái)執(zhí)行,或者必須執(zhí)行全部的所示操作來(lái)獲得 所需的結(jié)果。在某些情況下,多任務(wù)和并行處理可能是有利的。另外,在上述實(shí)施例中 各個(gè)系統(tǒng)組件的分開(kāi)不應(yīng)認(rèn)為在所有實(shí)施例中都要求這種分開(kāi),應(yīng)當(dāng)明白,所述的程序 組件和系統(tǒng)可以大體上一起集成在單一的軟件產(chǎn)品或封裝在多個(gè)軟件產(chǎn)品中。只描述了一些實(shí)現(xiàn)形式和示例,根據(jù)本申請(qǐng)中所述和所示的內(nèi)容可以作出其他 的實(shí)現(xiàn)形式、改進(jìn)形式和變更形式。
權(quán)利要求
1.一種同步數(shù)據(jù)的方法,該方法包括接收用于發(fā)起同步會(huì)話的請(qǐng)求,其中,該請(qǐng)求包括 針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和 對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變;生成一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否 被接受;基于所生成的狀況碼,使用針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所接受同步模式來(lái)選擇性地更新與對(duì) 所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變相關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng);以及 在服務(wù)器處選擇性地交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
2.如權(quán)利要求1所述的方法,其中,生成所述一個(gè)或多個(gè)狀況碼包括訪問(wèn)從先前的同 步會(huì)話保存的信息以判斷是否使用所述所提議同步模式來(lái)同步所述一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
3.如權(quán)利要求1所述的方法,其中,接收所述請(qǐng)求包括并行地接收針對(duì)兩個(gè)或更多個(gè) 數(shù)據(jù)類(lèi)的所提議同步模式。
4.如權(quán)利要求1所述的方法,其中,接收所述請(qǐng)求包括接收包含快速同步模式、慢速 同步模式或復(fù)位同步模式的所提議同步模式。
5.如權(quán)利要求1所述的方法,其中,接收所述請(qǐng)求包括接收包含快速同步模式的所提 議同步模式,所述快速同步模式允許僅交換要更新的數(shù)據(jù)項(xiàng)。
6.如權(quán)利要求5所述的方法,還包括在所述同步會(huì)話中斷之后再次接受所述快速同步 模式。
7.如權(quán)利要求1所述的方法,還包括在包含兩個(gè)消息的一個(gè)往返行程中完成所述同步 會(huì)話。
8.如權(quán)利要求1所述的方法,其中,接收所述請(qǐng)求包括在來(lái)自客戶端設(shè)備的單個(gè)消息中接收所述所提議同步模式和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù) 類(lèi)的所述一個(gè)或多個(gè)改變。
9.如權(quán)利要求1所述的方法,其中,選擇性地交付包括當(dāng)客戶端設(shè)備發(fā)送用以交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)的命令時(shí),在所述服務(wù)器處 選擇性地交付所述經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
10.如權(quán)利要求1所述的方法,還包括 拒絕所述所提議同步模式;以及 利用不同的同步模式對(duì)所述請(qǐng)求作出響應(yīng)。
11.一種計(jì)算機(jī)程序產(chǎn)品,包含在計(jì)算機(jī)可讀介質(zhì)上,該計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致 使數(shù)據(jù)處理裝置執(zhí)行操作,所述操作包括接收用于發(fā)起同步會(huì)話的請(qǐng)求,其中,該請(qǐng)求包括 針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和 對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變;生成狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否被接受; 基于所生成的狀況碼,使用針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所接受同步模式來(lái)選擇性地更新與對(duì) 所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變相關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng);以及 在數(shù)據(jù)倉(cāng)庫(kù)處選擇性地交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
12.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置訪問(wèn)從先前 的同步會(huì)話保存的信息以生成所述一個(gè)或多個(gè)狀況碼。
13.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置并行地接收 針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。
14.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置接收包含快 速同步模式、慢速同步模式或復(fù)位同步模式的所提議同步模式。
15.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置接收包含快 速同步模式的所提議同步模式,所述快速同步模式允許僅交換要更新的數(shù)據(jù)項(xiàng)。
16.如權(quán)利要求15所述的計(jì)算機(jī)程序產(chǎn)品,還包括在所述同步會(huì)話中斷時(shí)再次發(fā)起快 速同步模式。
17.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置在包含兩個(gè) 消息的一個(gè)往返行程中完成所述同步會(huì)話。
18.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置 在來(lái)自客戶端設(shè)備的單個(gè)消息中接收所述所提議同步模式和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的所述一個(gè)或多個(gè)改變。
19.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置當(dāng)客戶端設(shè)備發(fā)送用以交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)的命令時(shí),在服務(wù)器處選擇 性地交付所述經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
20.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置執(zhí)行包括如 下內(nèi)容的操作拒絕所述所提議同步模式;以及 利用不同的同步模式對(duì)所述請(qǐng)求作出響應(yīng)。
21.—種同步服務(wù)器,包括 處理器,被配置來(lái)操作傳送協(xié)議,該傳送協(xié)議使得能夠開(kāi)放到一個(gè)或多個(gè)客戶端設(shè)備的一個(gè)或多個(gè)連接;和同步協(xié)議,該同步協(xié)議使得能夠經(jīng)由所開(kāi)放的一個(gè)或多個(gè)連接而在所述服務(wù)器和所 述一個(gè)或多個(gè)客戶端設(shè)備之間進(jìn)行數(shù)據(jù)同步,其中,所述同步協(xié)議使得所述服務(wù)器能夠 接收用于發(fā)起同步會(huì)話的請(qǐng)求,其中,該請(qǐng)求包括 針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和 對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變;生成一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否 被接受;基于所生成的狀況碼,使用針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所接受同步模式來(lái)選擇性地更新與對(duì) 所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變相關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng);以及 選擇性地交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
22.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)訪問(wèn)數(shù)據(jù)倉(cāng)庫(kù)以基于所 接收的一個(gè)或多個(gè)改變來(lái)更新一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
23.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以基于從先前的同步會(huì)話保存的信息來(lái)接受或拒絕針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。
24.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以并 行地接收針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。
25.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以接 收包含快速同步模式、慢速同步模式或復(fù)位同步模式的所提議同步模式。
26.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以接 收包含快速同步模式的所提議同步模式,所述快速同步模式允許所述一個(gè)或多個(gè)客戶端 設(shè)備僅發(fā)送要更新的數(shù)據(jù)項(xiàng)。
27.如權(quán)利要求26所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以在 所述同步會(huì)話中斷時(shí)接收用于再次發(fā)起快速同步的請(qǐng)求。
28.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以在 包含兩個(gè)消息的一個(gè)往返行程中完成所述同步會(huì)話。
29.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以在 來(lái)自所述一個(gè)或多個(gè)客戶端設(shè)備中的至少一個(gè)客戶端設(shè)備的單個(gè)消息中接收所述所提議 同步模式和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的所述一個(gè)或多個(gè)改變。
30.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以在 所述一個(gè)或多個(gè)客戶端設(shè)備中的一個(gè)客戶端設(shè)備發(fā)送用以交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù) 項(xiàng)的命令時(shí),在所述服務(wù)器處選擇性地交付所述經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
31.如權(quán)利要求21所述的服務(wù)器,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以拒絕所述所提議同步模式;以及利用不同的同步模式對(duì)所述請(qǐng)求作出響應(yīng)。
32.—種同步數(shù)據(jù)的方法,該方法包括向服務(wù)器發(fā)送用于發(fā)起同步會(huì)話的請(qǐng)求,其中,該請(qǐng)求包括針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變;接收一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否 已被所述服務(wù)器接受;基于所接收的狀況碼,使用所接受的同步模式來(lái)從所述服務(wù)器接收對(duì)所述一個(gè)或多 個(gè)數(shù)據(jù)類(lèi)的附加改變;以及在客戶端設(shè)備處交付從所述服務(wù)器接收的所述附加改變。
33.如權(quán)利要求32所述的方法,還包括接收指示出針對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的至少一個(gè)數(shù)據(jù)類(lèi)的所提議同步模式已被 所述服務(wù)器拒絕的一個(gè)或多個(gè)狀況碼;以及發(fā)送另一請(qǐng)求,該另一請(qǐng)求包含與被拒絕的同步模式不同的同步模式。
34.如權(quán)利要求32所述的方法,還包括在單個(gè)消息中向所述服務(wù)器發(fā)送所述所提議同步模式和所述一個(gè)或多個(gè)改變。
35.如權(quán)利要求32所述的方法,還包括并行地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。
36.如權(quán)利要求35所述的方法,其中,并行地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議 同步模式包括針對(duì)所述兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)數(shù)據(jù)類(lèi)并行地發(fā)送不同的所提議 同步模式。
37.如權(quán)利要求35所述的方法,其中,針對(duì)所述兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)數(shù)據(jù) 類(lèi)并行地發(fā)送不同的所提議同步模式包括針對(duì)所述數(shù)據(jù)類(lèi)中的一個(gè)數(shù)據(jù)類(lèi)發(fā)送所提議的 快速同步模式,并針對(duì)所述數(shù)據(jù)類(lèi)中的另一數(shù)據(jù)類(lèi)發(fā)送所提議的慢速同步模式。
38.如權(quán)利要求32所述的方法,還包括在所述同步會(huì)話中斷之后使用所接受的同步協(xié) 議來(lái)再次發(fā)起同步會(huì)話。
39.—種計(jì)算機(jī)程序產(chǎn)品,包含在計(jì)算機(jī)可讀介質(zhì)中,該計(jì)算機(jī)程序產(chǎn)品可操作來(lái)致 使數(shù)據(jù)處理裝置執(zhí)行包括如下的一個(gè)或多個(gè)操作向服務(wù)器發(fā)送用于發(fā)起同步會(huì)話的請(qǐng)求,其中,該請(qǐng)求包括針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi) 中的每一者的所提議同步模式,和對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變;接收一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否 已被所述服務(wù)器接受;基于所接收的狀況碼,使用所接受的同步模式來(lái)從所述服務(wù)器接收對(duì)所述一個(gè)或多 個(gè)數(shù)據(jù)類(lèi)的附加改變;以及在客戶端設(shè)備處交付從所述服務(wù)器接收的所述附加改變。
40.如權(quán)利要求39所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置執(zhí)行包括如 下內(nèi)容的操作接收指示出針對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的至少一個(gè)數(shù)據(jù)類(lèi)的所提議同步模式已被 所述服務(wù)器拒絕的一個(gè)或多個(gè)狀況碼;以及發(fā)送另一請(qǐng)求,該另一請(qǐng)求包含與被拒絕的同步模式不同的同步模式。
41.如權(quán)利要求39所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置在單個(gè)消息 中向所述服務(wù)器發(fā)送所述所提議同步模式和所述一個(gè)或多個(gè)改變。
42.如權(quán)利要求39所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使數(shù)據(jù)處理裝置并行地發(fā)送 針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。
43.如權(quán)利要求42所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使所述數(shù)據(jù)處理裝置針對(duì)所 述兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)數(shù)據(jù)類(lèi)并行地發(fā)送不同的所提議同步模式。
44.如權(quán)利要求42所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使所述數(shù)據(jù)處理裝置針對(duì)所 述數(shù)據(jù)類(lèi)中的一個(gè)數(shù)據(jù)類(lèi)發(fā)送所提議的快速同步模式,并針對(duì)所述數(shù)據(jù)類(lèi)中的另一數(shù)據(jù) 類(lèi)發(fā)送所提議的慢速同步模式。
45.如權(quán)利要求39所述的計(jì)算機(jī)程序產(chǎn)品,還可操作來(lái)致使所述數(shù)據(jù)處理裝置在所述 同步會(huì)話中斷之后使用所接受的同步協(xié)議來(lái)再次發(fā)起同步會(huì)話。
46.—種客戶端設(shè)備,包括處理器,該處理器被配置來(lái)操作傳送協(xié)議,該傳送協(xié)議使得能夠開(kāi)放到服務(wù)器的一個(gè)或多個(gè)連接;和同步協(xié)議,該同步協(xié)議使得能夠經(jīng)由所開(kāi)放的一個(gè)或多個(gè)連接而在所述客戶端設(shè)備 和所述服務(wù)器之間進(jìn)行數(shù)據(jù)同步,其中,所述同步協(xié)議使得所述客戶端設(shè)備能夠向服務(wù)器發(fā)送用于發(fā)起同步會(huì)話的請(qǐng)求,其中,該請(qǐng)求包括 針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一者的所提議同步模式,和 對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)的一個(gè)或多個(gè)改變;接收一個(gè)或多個(gè)狀況碼,所述狀況碼指示出針對(duì)各個(gè)數(shù)據(jù)類(lèi)的所提議同步模式是否 已被所述服務(wù)器接受;基于所接收的狀況碼,使用所接受的同步模式來(lái)從所述服務(wù)器接收對(duì)所述一個(gè)或多 個(gè)數(shù)據(jù)類(lèi)的附加改變;以及在客戶端設(shè)備處交付從所述服務(wù)器接收的所述附加改變。
47.如權(quán)利要求46所述的客戶端設(shè)備,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以接收指示出針對(duì)所述一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的至少一個(gè)數(shù)據(jù)類(lèi)的所提議同步模式已被 所述服務(wù)器拒絕的一個(gè)或多個(gè)狀況碼;以及發(fā)送另一請(qǐng)求,該另一請(qǐng)求包含與被拒絕的同步模式不同的同步模式。
48.如權(quán)利要求46所述的客戶端設(shè)備,其中,所述處理器被配置來(lái)操作所述同步協(xié)議以在單個(gè)消息中向所述服務(wù)器發(fā)送所述所提議同步模式和所述一個(gè)或多個(gè)改變。
49.如權(quán)利要求46所述的客戶端設(shè)備,其中,所述處理器被配置來(lái)操作所述同步協(xié)議 以并行地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式。
50.如權(quán)利要求49所述的客戶端設(shè)備,其中,所述處理器被配置來(lái)操作所述同步協(xié)議 以并行地發(fā)送針對(duì)兩個(gè)或更多個(gè)數(shù)據(jù)類(lèi)的所提議同步模式包括針對(duì)所述兩個(gè)或更多個(gè)數(shù) 據(jù)類(lèi)中的每一個(gè)數(shù)據(jù)類(lèi)并行地發(fā)送不同的所提議同步模式。
51.如權(quán)利要求49所述的客戶端設(shè)備,其中,所述處理器被配置來(lái)操作所述同步協(xié)議 以針對(duì)所述數(shù)據(jù)類(lèi)中的一個(gè)數(shù)據(jù)類(lèi)發(fā)送所提議的快速同步模式,并針對(duì)所述數(shù)據(jù)類(lèi)中的 另一數(shù)據(jù)類(lèi)發(fā)送所提議的慢速同步模式。
52.如權(quán)利要求46所述的客戶端設(shè)備,其中,所述處理器被配置來(lái)操作所述同步協(xié)議 以在所述同步會(huì)話中斷之后使用所接受的同步協(xié)議來(lái)再次發(fā)起同步會(huì)話。
全文摘要
公開(kāi)了用于同步客戶端設(shè)備與服務(wù)器之間的數(shù)據(jù)的技術(shù)和系統(tǒng),以及其它。同步數(shù)據(jù)包括通過(guò)針對(duì)一個(gè)或多個(gè)數(shù)據(jù)類(lèi)中的每一個(gè)在客戶端設(shè)備與服務(wù)器之間協(xié)商同步模式來(lái)發(fā)起同步會(huì)話?;趨f(xié)商的結(jié)果生成狀況碼。基于所生成的狀況碼,客戶端設(shè)備和服務(wù)器使用針對(duì)各個(gè)數(shù)據(jù)類(lèi)所協(xié)商的同步模式、針對(duì)該一個(gè)或多個(gè)數(shù)據(jù)類(lèi)來(lái)交換要更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。在客戶端設(shè)備處或者在服務(wù)器處對(duì)所交換的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)進(jìn)行更新。在客戶端處或者服務(wù)器處交付經(jīng)更新的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。
文檔編號(hào)G06F17/30GK102016846SQ200980116069
公開(kāi)日2011年4月13日 申請(qǐng)日期2009年3月3日 優(yōu)先權(quán)日2008年3月4日
發(fā)明者卡斯特恩·古恩特爾, 布倫丹·A·麥卡西 申請(qǐng)人:蘋(píng)果公司