專利名稱:在托管的會(huì)話系統(tǒng)中提供對(duì)會(huì)話的訪問的制作方法
技術(shù)領(lǐng)域:
所公開的實(shí)施例總體上涉及通信系統(tǒng)。更具體地,所公開的實(shí)施例涉及用于發(fā)送、 接收和呈現(xiàn)電子消息的方法、系統(tǒng)和用戶界面。
背景技術(shù):
包括電子郵件(“email”)系統(tǒng)和即時(shí)消息傳送(IM)系統(tǒng)的多種電子通信系統(tǒng)是公知的。在電子郵件和IM系統(tǒng)中,可以轉(zhuǎn)發(fā)和答復(fù)各消息。然而,對(duì)于電子郵件和 IM,響應(yīng)于消息的部分或轉(zhuǎn)發(fā)消息的部分較難和棘手。而且,對(duì)于具有幾個(gè)層級(jí)的會(huì)話 (conversion)(例如,包括關(guān)于不同話題或子話題的多個(gè)消息和響應(yīng)的會(huì)話),會(huì)難以識(shí)別在會(huì)話中的消息的至少一些的邏輯上下文。類似地,如果參與者中途加入會(huì)話,則會(huì)話的邏輯上下文可能丟失。即時(shí)消息傳送有時(shí)被稱為電子聊天。流行的電子聊天程序例如是hstant Messenger (即時(shí)消息器),這是America Online的商標(biāo)。電子聊天在功能和結(jié)構(gòu)上能夠與電話會(huì)話相比。通常對(duì)于電子聊天會(huì)話沒有邏輯結(jié)構(gòu),僅有時(shí)間線。當(dāng)用戶從多個(gè)裝置(例如,膝上型計(jì)算機(jī)、移動(dòng)電話、電子紙張、機(jī)頂盒等)訪問電子消息時(shí),有益的是,從這些裝置的每個(gè)具有對(duì)整個(gè)會(huì)話的全部訪問,并且能夠識(shí)別在會(huì)話內(nèi)的每一個(gè)用戶對(duì)于會(huì)話的貢獻(xiàn)的邏輯上下文。
發(fā)明內(nèi)容
在本發(fā)明的一個(gè)方面,一種服務(wù)器系統(tǒng)托管多個(gè)會(huì)話,每個(gè)會(huì)話具有識(shí)別的一組參與者。對(duì)于相應(yīng)的會(huì)話,所述服務(wù)器系統(tǒng)向所述會(huì)話的所述參與者提供所述會(huì)話的內(nèi)容。 所述服務(wù)器系統(tǒng)從所述會(huì)話的多個(gè)參與者中的每一個(gè)接收內(nèi)容,并且向所述多個(gè)參與者中的其他參與者發(fā)送所接收的內(nèi)容。在另外的參與者被增加到所述會(huì)話時(shí),所述服務(wù)器系統(tǒng)向所述另外的參與者提供包括向所述識(shí)別的一組參與者提供的所有內(nèi)容的所述會(huì)話的內(nèi)容(例如,包括所述會(huì)話的在過去發(fā)生的部分),并且將所述另外的參與者增加到所述識(shí)別的一組參與者中。在一些實(shí)施例中,在所述服務(wù)器系統(tǒng)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)用于執(zhí)行如上所述的操作的指令,以由所述服務(wù)器系統(tǒng)的一個(gè)或多個(gè)處理器執(zhí)行。在一些實(shí)施例中,所述服務(wù)器系統(tǒng)具有一個(gè)或多個(gè)處理器、存儲(chǔ)器和具有用于執(zhí)行如上所述的操作的指令的一個(gè)或多個(gè)程序,其中,所述一個(gè)或多個(gè)程序被存儲(chǔ)在所述存儲(chǔ)器中,并且被配置來由所述一個(gè)或多個(gè)處理器執(zhí)行使得執(zhí)行所述指令。在本發(fā)明的另一個(gè)方面,一種服務(wù)器系統(tǒng)托管多個(gè)會(huì)話。對(duì)于相應(yīng)的會(huì)話,所述服務(wù)器系統(tǒng)向與所述會(huì)話的參與者相關(guān)聯(lián)的多個(gè)客戶端提供所述會(huì)話的內(nèi)容。所述服務(wù)器系統(tǒng)向與所述會(huì)話的參與者相關(guān)聯(lián)的多個(gè)客戶端提供所述會(huì)話的內(nèi)容,向每一個(gè)客戶端提供所述客戶端已經(jīng)被配置來接收的所述會(huì)話的全部?jī)?nèi)容。所述服務(wù)器系統(tǒng)從所述會(huì)話的相應(yīng)參與者接收內(nèi)容,并且向與其他參與者相關(guān)聯(lián)的客戶端發(fā)送所接收的內(nèi)容的至少一部分。 在另外的參與者被增加到所述會(huì)話時(shí),所述服務(wù)器系統(tǒng)向與所述另外的參與者相關(guān)聯(lián)的客戶端提供與所述另外的參與者相關(guān)聯(lián)的所述客戶端已經(jīng)被配置來接收的所述會(huì)話的所有內(nèi)容。在一些實(shí)施例中,在所述服務(wù)器系統(tǒng)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)用于執(zhí)行如上所述的操作的指令,以由所述服務(wù)器系統(tǒng)的一個(gè)或多個(gè)處理器執(zhí)行。在一些實(shí)施例中,所述服務(wù)器系統(tǒng)具有一個(gè)或多個(gè)處理器、存儲(chǔ)器和具有用于執(zhí)行如上所述的操作的指令的一個(gè)或多個(gè)程序,其中,所述一個(gè)或多個(gè)程序被存儲(chǔ)在所述存儲(chǔ)器中,并且被配置來由所述一個(gè)或多個(gè)處理器執(zhí)行使得執(zhí)行所述指令。在本發(fā)明的另一個(gè)方面,其中每一個(gè)與不同的用戶子集相關(guān)聯(lián)的多個(gè)服務(wù)器系統(tǒng)中的至少一個(gè)在每一個(gè)相應(yīng)的服務(wù)器系統(tǒng)托管由相應(yīng)的用戶子集啟動(dòng)的會(huì)話。相應(yīng)的服務(wù)器系統(tǒng)從會(huì)話的相應(yīng)參與者接收內(nèi)容,并且向與所述會(huì)話的其他參與者相關(guān)聯(lián)的客戶端發(fā)送所接收的內(nèi)容的至少一部分。在另外的參與者被增加到所述會(huì)話時(shí),所述服務(wù)器系統(tǒng)向與所述另外的參與者相關(guān)聯(lián)的客戶端提供與所述另外的參與者相關(guān)聯(lián)的所述客戶端已經(jīng)被配置來接收的所述會(huì)話的所有內(nèi)容。在一些實(shí)施例中,提供所述內(nèi)容包括向多個(gè)所述參與者提供所述會(huì)話的統(tǒng)一視圖。在一些實(shí)施例中,在所述服務(wù)器系統(tǒng)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)用于執(zhí)行如上所述的操作的指令,以由所述服務(wù)器系統(tǒng)的一個(gè)或多個(gè)處理器執(zhí)行。在一些實(shí)施例中,所述服務(wù)器系統(tǒng)具有一個(gè)或多個(gè)處理器、存儲(chǔ)器和具有用于執(zhí)行如上所述的操作的指令的一個(gè)或多個(gè)程序,其中,所述一個(gè)或多個(gè)程序被存儲(chǔ)在所述存儲(chǔ)器中, 并且被配置來被所述一個(gè)或多個(gè)處理器執(zhí)行使得執(zhí)行所述指令。
與下面的附圖相結(jié)合地在下面的具體實(shí)施方式
中公開了本發(fā)明的各個(gè)實(shí)施例,在附圖中,貫串各圖,相似的附圖標(biāo)記指示對(duì)應(yīng)的部分。圖1是圖示根據(jù)本發(fā)明的某些實(shí)施例的示例性分布式計(jì)算機(jī)系統(tǒng)的框圖。圖2是根據(jù)本發(fā)明的某些實(shí)施例的、包括通過一個(gè)或多個(gè)通信網(wǎng)絡(luò)耦合的會(huì)話服務(wù)器和客戶端的分布式系統(tǒng)的框圖。圖3A-3C是根據(jù)本發(fā)明的某些實(shí)施例的、分別用于會(huì)話數(shù)據(jù)庫(kù)、參與者列表和會(huì)話記錄的數(shù)據(jù)結(jié)構(gòu)的框圖。圖4是圖示根據(jù)本發(fā)明的某些實(shí)施例的、用于用戶數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)的框圖。圖5A-5E是表示根據(jù)本發(fā)明的某些實(shí)施例的用于托管在服務(wù)器處的會(huì)話的方法的流程圖。圖6是根據(jù)本發(fā)明的某些實(shí)施例的、多個(gè)鏈接的會(huì)話服務(wù)器系統(tǒng)的框圖,該服務(wù)器系統(tǒng)具有用于獲得和分發(fā)用戶在線存在信息的機(jī)制。圖7是根據(jù)本發(fā)明的某些實(shí)施例的用于托管的會(huì)話系統(tǒng)的會(huì)話服務(wù)器的框圖。圖8是根據(jù)本發(fā)明的某些實(shí)施例的、具有在托管的會(huì)話系統(tǒng)中參與一個(gè)或多個(gè)會(huì)話的用戶的客戶端的框圖。圖9A-9B圖示一系列窗口,用于示出由會(huì)話的多個(gè)參與者對(duì)于會(huì)話進(jìn)行的連續(xù)編輯和那些編輯的重放。圖10圖示了用于示出會(huì)話的基于個(gè)體和組的起草的一系列窗口。圖1IA-IIB是用于表示根據(jù)本發(fā)明的某些實(shí)施例的、用于編輯、重放和起草在服務(wù)器處托管的會(huì)話的方法的流程圖。
圖12圖示用于示出在從多個(gè)參與者接收的多個(gè)潛在沖突的編輯之間的并發(fā)控制的過程圖。圖13圖示對(duì)于同一內(nèi)容單元執(zhí)行的獨(dú)立的編輯操作的兩個(gè)序列和其上的變換, 其中,在會(huì)話中,從第一參與者接收一個(gè)序列,并且從第二參與者接收第二序列。圖14圖示被應(yīng)用到分別從第一參與者和第二參與者接收的電子會(huì)話的內(nèi)容單元的編輯操作的第一和第二序列和與所接收的編輯操作的第一和第二序列對(duì)應(yīng)的合并編輯操作的變換的序列。圖15是用于表示當(dāng)在會(huì)話中的多個(gè)參與者對(duì)于會(huì)話進(jìn)行潛在沖突的編輯時(shí)在服務(wù)器和在客戶端的并發(fā)控制的方法的流程圖。貫串附圖,相似的附圖標(biāo)記指示對(duì)應(yīng)的部分。
具體實(shí)施例方式描述了本發(fā)明的方法、系統(tǒng)、用戶界面和其他方面。參考本發(fā)明的某些實(shí)施例,其示例被圖示在附圖中。雖然結(jié)合實(shí)施例描述了本發(fā)明,但是可以明白,不意欲將本發(fā)明限于這些特定實(shí)施例。相反,本發(fā)明意欲覆蓋在本發(fā)明的精神和范圍內(nèi)的替代品、修改和等同物。因此,要在說明性而不是限制性的意義上看待說明書和附圖。而且,在下面的說明中,給出了多個(gè)具體細(xì)節(jié)以提供對(duì)本發(fā)明的徹底理解。然而, 對(duì)于本領(lǐng)域內(nèi)的普通技術(shù)人員顯然,可以在沒有這些具體細(xì)節(jié)的情況下實(shí)施本發(fā)明。在另外一些情況下,未詳細(xì)描述本領(lǐng)域內(nèi)的普通技術(shù)人員公知的方法、過程、部件和網(wǎng)絡(luò),以避免使本發(fā)明的方面模糊。圖1是圖示根據(jù)本發(fā)明的某些實(shí)施例的示例性分布式計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括多個(gè)客戶端110??蛻舳?10(在此也稱為客戶裝置或客戶端系統(tǒng))的用戶是在由一組會(huì)話服務(wù)器130(有時(shí)稱為會(huì)話服務(wù)器系統(tǒng))托管的會(huì)話中的參與者112??蛻舳?00可以是用于使能如下所述的行為的多種計(jì)算裝置(例如,因特網(wǎng)售貨亭、個(gè)人數(shù)字助理、蜂窩電話、游戲裝置、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、手持計(jì)算機(jī)、平板計(jì)算機(jī)或其組合) 的任何一種。。每一個(gè)客戶端110耦合到網(wǎng)絡(luò)120,網(wǎng)絡(luò)120可以是多種網(wǎng)絡(luò)(例如,因特網(wǎng)、內(nèi)聯(lián)網(wǎng)、局域網(wǎng)、廣域網(wǎng)、無線網(wǎng)絡(luò)、有線網(wǎng)絡(luò)、光學(xué)網(wǎng)絡(luò)或這樣的網(wǎng)絡(luò)的組合)的任何一種。更一般地,客戶端100和會(huì)話服務(wù)器130經(jīng)由一個(gè)或多個(gè)通信網(wǎng)絡(luò)120彼此耦合。相應(yīng)的客戶端110-B執(zhí)行客戶端應(yīng)用114,客戶端應(yīng)用114便利從客戶端110對(duì)于相應(yīng)的托管會(huì)話服務(wù)器130的訪問??蛻舳藨?yīng)用114可以包括圖形用戶界面。例如,客戶端應(yīng)用可以是web瀏覽器或其他瀏覽器應(yīng)用,諸如Firef0X(M0Zilla Rnmdation的商標(biāo))、 Internet Explorer (微軟公司的商標(biāo))、Safari (蘋果公司的商標(biāo))或Chrome (谷歌公司的商標(biāo))。雖然系統(tǒng)100可以具有單個(gè)會(huì)話服務(wù)器130,但是在其他實(shí)施例中,系統(tǒng)100可以具有多個(gè)會(huì)話服務(wù)器130。例如,多個(gè)會(huì)話服務(wù)器130A和130-B可以分別被諸如提供商 116-A和116-B的不同的服務(wù)提供商托管。在一些實(shí)施例中,提供商是用于提供會(huì)話服務(wù)的因特網(wǎng)服務(wù)提供商(ISP)。替代地,提供商的一些或全部可以是專用會(huì)話提供商。當(dāng)系統(tǒng)100包括多個(gè)會(huì)話服務(wù)器130時(shí),會(huì)話服務(wù)器130可以直接地或通過局域網(wǎng)(LAN)或經(jīng)由網(wǎng)絡(luò)120耦合在一起。
會(huì)話服務(wù)器130托管在參與者112之間的會(huì)話。更具體地,每一個(gè)會(huì)話服務(wù)器130 代表一組用戶托管會(huì)話。這些用戶中的至少一些是托管的會(huì)話系統(tǒng)100的用戶,因此具有用戶帳戶。如下更詳細(xì)所述,會(huì)話參與者中的一些不必是托管會(huì)話系統(tǒng)的用戶。當(dāng)任何參與者將新的內(nèi)容加到會(huì)話或任何參與者向會(huì)話進(jìn)行任何其他改變時(shí),向托管在會(huì)話中的參與者的會(huì)話的所有會(huì)話服務(wù)器130發(fā)送更新。那些托管服務(wù)器繼而向在會(huì)話中的參與者使用的客戶端110發(fā)送該更新。會(huì)話更新可以較為瞬時(shí)地(例如,在一兩秒內(nèi))被發(fā)送到在會(huì)話中的活動(dòng)參與者的客戶端110??蛇x地,在線并且登錄到會(huì)話系統(tǒng)100但是當(dāng)前未觀看會(huì)話或當(dāng)前未參與會(huì)話的消極參與者112的客戶端110接收已經(jīng)更新會(huì)話的信息,而不接收對(duì)于會(huì)話的更新。在至少一些實(shí)施例中,當(dāng)參與者“打開”會(huì)話(選擇它來觀看)時(shí),更新的會(huì)話被從托管用于那個(gè)用戶的會(huì)話的會(huì)話服務(wù)器130下載到參與者的客戶端。圖2是圖示會(huì)話服務(wù)器130與客戶端系統(tǒng)210和220的示例性實(shí)施例的系統(tǒng)200 的框圖。系統(tǒng)200包括在會(huì)話服務(wù)器130和包括客戶端210的多個(gè)客戶端之間耦合的如上所述通信網(wǎng)絡(luò)120??蛻舳?10對(duì)應(yīng)于圖1的相應(yīng)的客戶端110,并且在此有時(shí)被稱為“參與者客戶端”,因?yàn)榭蛻舳?10/210的用戶是在由會(huì)話服務(wù)器130托管的一個(gè)或多個(gè)會(huì)話中的參與者。系統(tǒng)200包括至少一個(gè)參與者客戶端210。參與者客戶端210可選地包括瀏覽器212,諸如web瀏覽器或用于便利參與者與相應(yīng)的會(huì)話服務(wù)器130的交互的其他客戶端應(yīng)用。瀏覽器212通常包括(或控制)用于執(zhí)行在網(wǎng)頁(yè)或由瀏覽器212呈現(xiàn)的其他文檔中嵌入的軟件的虛擬機(jī)(例如,Java虛擬機(jī))。在一些實(shí)施例中,瀏覽器212執(zhí)行至少部分地嵌入網(wǎng)頁(yè)內(nèi)的會(huì)話應(yīng)用214。網(wǎng)頁(yè)(可以被稱為“托管的會(huì)話網(wǎng)頁(yè)”)被從諸如會(huì)話服務(wù)器 130的服務(wù)器下載到客戶端210,并且包括被在客戶端210中的瀏覽器212的虛擬機(jī)執(zhí)行的可執(zhí)行指令。瀏覽器212和會(huì)話應(yīng)用214—起形成圖1的客戶端應(yīng)用114。會(huì)話應(yīng)用214 便利參與者與會(huì)話服務(wù)器130的交互。在其他一些實(shí)施例中,會(huì)話應(yīng)用214是瀏覽器應(yīng)用212的插件或擴(kuò)展。系統(tǒng)200可選地包括非訂戶客戶端220。非訂戶客戶端220使得在會(huì)話系統(tǒng)中沒有帳戶的用戶能夠至少以有限的方式來參與托管的會(huì)話中??梢砸远喾N方式來限制在托管的會(huì)話中的參與,例如,通過允許非訂戶客戶端的用戶讀取會(huì)話的內(nèi)容,并且允許用戶貢獻(xiàn)新內(nèi)容,但是不允許非訂戶客戶端的用戶使用其他特征,諸如編輯已經(jīng)在會(huì)話中的內(nèi)容、響應(yīng)由其他參與者先前貢獻(xiàn)的內(nèi)容的特定部分和重放會(huì)話。非訂戶客戶端220以與由其用戶是托管的會(huì)話系統(tǒng)的訂戶的客戶端210使用的方式不同的方式來訪問會(huì)話服務(wù)器系統(tǒng)130。非訂戶客戶端220的示例是具有網(wǎng)絡(luò)日志客戶端228的網(wǎng)絡(luò)日志(“博客”)服務(wù)器226。如下所述,托管的會(huì)話可以包括作為在會(huì)話中的參與者的網(wǎng)絡(luò)日志228(也稱為網(wǎng)絡(luò)日志客戶端),在該情況下,在網(wǎng)絡(luò)日志中發(fā)布托管的會(huì)話的內(nèi)容。所發(fā)布的會(huì)話在由網(wǎng)絡(luò)日志服務(wù)器2 托管的網(wǎng)絡(luò)日志2 上是可見的。更具體地,當(dāng)網(wǎng)絡(luò)日志2 作為參與者被加到會(huì)話時(shí),會(huì)話的內(nèi)容被托管會(huì)話的會(huì)話服務(wù)器 130發(fā)送到(也稱為“張貼到”)網(wǎng)絡(luò)日志228。在作為參與者增加網(wǎng)絡(luò)日志2 時(shí),向會(huì)話增加的新內(nèi)容也被托管會(huì)話的會(huì)話服務(wù)器130發(fā)送到網(wǎng)絡(luò)日志228。觀看網(wǎng)絡(luò)日志228的內(nèi)容(例如,通過訪問在網(wǎng)絡(luò)日志服務(wù)器2 上托管的與網(wǎng)絡(luò)日志2 相關(guān)聯(lián)的URL)的用戶(例如,另一個(gè)客戶端110的用戶,圖1)可以觀看在網(wǎng)絡(luò)日志上發(fā)布的會(huì)話的內(nèi)容。非訂戶客戶端220的另一個(gè)示例是具有電子郵件客戶端222的電子郵件服務(wù)器224。來自托管會(huì)話的內(nèi)容可以被發(fā)送到一個(gè)或多個(gè)電子郵件服務(wù)器224的一個(gè)或多個(gè)電子郵件客戶端222。具體地說,當(dāng)電子郵件客戶端222的用戶作為參與者被加到會(huì)話時(shí),會(huì)話的內(nèi)容(和隨后被加到會(huì)話的內(nèi)容)被托管會(huì)話的會(huì)話服務(wù)器130發(fā)送到電子郵件客戶端 222。網(wǎng)絡(luò)日志和電子郵件服務(wù)器也是“自動(dòng)客戶端”的示例。自動(dòng)客戶端的其他示例包括可以被調(diào)用來向托管的會(huì)話的其他參與者提供服務(wù)的服務(wù),諸如歸檔服務(wù)、翻譯服務(wù)、 拼寫檢查服務(wù)和語(yǔ)法檢查服務(wù)。在一些實(shí)施例中,電子郵件客戶端222和網(wǎng)絡(luò)日志客戶端2 可以讀取內(nèi)容但是不能向托管的會(huì)話提供內(nèi)容,因此僅是觀看者。然而,在一些其他實(shí)施例中,向至少一些“電子郵件參與者”(S卩,電子郵件客戶端的用戶)或“網(wǎng)絡(luò)日志參與者”(即,網(wǎng)絡(luò)日志客戶端) 提供編寫能力(用于向會(huì)話提供內(nèi)容的能力)。在一些實(shí)施例中,會(huì)話服務(wù)器130包括前端或會(huì)話引擎對(duì)6,用于管理會(huì)話和與客戶端的通信;以及一個(gè)或多個(gè)輔助服務(wù)(模塊、應(yīng)用或服務(wù)器)250,用于管理與會(huì)話相關(guān)的服務(wù)。在一些實(shí)施例中,輔助服務(wù)250包括拼寫檢查252、語(yǔ)言翻譯或本地化256和管理對(duì)于會(huì)話的附件258。會(huì)話服務(wù)器130也包括在線存在服務(wù)M8,用于使得用戶能夠知道其他用戶(例如,托管的會(huì)話系統(tǒng)的其他訂戶)的在線狀態(tài),如下面參考圖6詳細(xì)所述。服務(wù)器130包括下面參考圖4詳細(xì)所述的用戶數(shù)據(jù)庫(kù)270。前端或會(huì)話引擎246利用(或替代地包括)更新、訪問和/搜索/查詢引擎沈0, 用于向會(huì)話提供參與者訪問,并且提供在會(huì)話中的搜索功能。在一些實(shí)施例中,一個(gè)或多個(gè)會(huì)話索引264是逆索引,用于將在會(huì)話中的詞和詞語(yǔ)映射到其中它們出現(xiàn)的會(huì)話。該一個(gè)或多個(gè)會(huì)話索引264用于找到匹配指定的搜索查詢的在托管會(huì)話數(shù)據(jù)庫(kù)沈2中的會(huì)話。 當(dāng)向在會(huì)話數(shù)據(jù)庫(kù)沈2中的會(huì)話增加內(nèi)容時(shí),使用那個(gè)內(nèi)容來更新該一個(gè)或多個(gè)會(huì)話索引 264,以便使得通過搜索查詢的執(zhí)行能夠訪問所增加的內(nèi)容。下面參考圖3更詳細(xì)地描述了會(huì)話數(shù)據(jù)庫(kù)沈2??蛇x地,會(huì)話服務(wù)器130包括SMTP網(wǎng)關(guān)M2,用于便利與一個(gè)或多個(gè)電子郵件服務(wù)器224的電子郵件通信。在下面的描述中,訂戶是會(huì)話服務(wù)器130(例如,在提供會(huì)話服務(wù)的一組會(huì)話服務(wù)器130中的任何會(huì)話服務(wù)器130)維護(hù)其用戶記錄或簡(jiǎn)檔的用戶(參見圖4中的402,如下所述)。如下更詳細(xì)所述,在一些實(shí)施例中,會(huì)話服務(wù)器130對(duì)于相應(yīng)的用戶/訂戶維護(hù)其中該用戶/訂戶是參與者的會(huì)話的列表414(圖4)。當(dāng)相應(yīng)的每一個(gè)這樣的會(huì)話的狀態(tài)改變時(shí),會(huì)話服務(wù)器130更新在用戶的會(huì)話列表414中的該每一個(gè)這樣的會(huì)話的狀態(tài)(會(huì)話狀態(tài)438-1,圖4)。當(dāng)(例如,響應(yīng)于來自用戶的搜索/查詢)會(huì)話服務(wù)器130向用戶發(fā)送所請(qǐng)求的會(huì)話的列表(通常包括其中用戶是參與者的完整的會(huì)話集的子集)時(shí),該列表包括用于列出的會(huì)話的狀態(tài)信息。在返回的列表中的狀態(tài)信息通常是會(huì)話狀態(tài)438的子集, 因?yàn)楫?dāng)顯示會(huì)話的列表時(shí)僅需要會(huì)話狀態(tài)的一部分(例如,在還沒有被用戶觀看的會(huì)話中是否存在任何內(nèi)容)。圖3A是圖示用于會(huì)話數(shù)據(jù)庫(kù)262的示例性數(shù)據(jù)結(jié)構(gòu)的框圖。雖然大多數(shù)會(huì)話具有共享會(huì)話的所有內(nèi)容的單個(gè)的一組參與者,在此被稱為會(huì)話容器,但是一些會(huì)話具有更復(fù)0雜的結(jié)構(gòu)。具體地說,第一會(huì)話可以導(dǎo)致由在第一會(huì)話中的參與者的各種子集進(jìn)行的任何數(shù)量的“側(cè)會(huì)話”,并且可以甚至包括另外的參與者。例如,會(huì)話容器可以被兩個(gè)或更多組的參與者(例如,組A和組B)使用來協(xié)商約定或共同編輯文檔或演示文稿等。為了適應(yīng)所有參與者的需要,在所有參與者之間開始初始會(huì)話(有時(shí)稱為主會(huì)話),然后,大量產(chǎn)生“私人會(huì)話”取代初始會(huì)話以使得在每一個(gè)組中的參與者能夠與該組的其他參與者秘密地交流, 同時(shí)仍然可以訪問初始會(huì)話的所有內(nèi)容。通常,每一個(gè)私人會(huì)話具有一組參與者,該一組參與者排除在主會(huì)話中的至少一個(gè)參與者??蛇x地,私人會(huì)話可以包括不是在主會(huì)話中的參與者的一個(gè)或多個(gè)附加參與者(例如,顧問)。每一個(gè)參與者僅可以訪問其中他們是參與者的會(huì)話的內(nèi)容。通常,在組A上的參與者可以訪問組A私人會(huì)話和主會(huì)話的內(nèi)容,并且在組 B上的參與者可以訪問組B私人會(huì)話和主會(huì)話的內(nèi)容。圖3A是支持簡(jiǎn)單會(huì)話(即,沒有相關(guān)的私人會(huì)話的單個(gè)會(huì)話)以及會(huì)話容器的示例性數(shù)據(jù)結(jié)構(gòu)的框圖,該會(huì)話容器包括多個(gè)會(huì)話(有時(shí)被稱為主會(huì)話和一個(gè)或多個(gè)子會(huì)話)°會(huì)話數(shù)據(jù)庫(kù)262包括多個(gè)會(huì)話容器記錄302-1至302-N,每一個(gè)包含用于會(huì)話容器的數(shù)據(jù)。當(dāng)相應(yīng)的會(huì)話容器僅具有一個(gè)會(huì)話時(shí),在對(duì)應(yīng)的會(huì)話容器記錄302中的唯一信息用于單個(gè)會(huì)話,如通過一個(gè)會(huì)話記錄310表示。更一般地,會(huì)話容器記錄302包括一個(gè)或多個(gè)會(huì)話記錄310-1至310-C。每一個(gè)會(huì)話記錄310包含用于相應(yīng)的會(huì)話的數(shù)據(jù),包括眷會(huì)話容器識(shí)別符329,其唯一地識(shí)別在會(huì)話系統(tǒng)110/200中的會(huì)話容器,該會(huì)話容器對(duì)應(yīng)于會(huì)話記錄310所位于的會(huì)話容器記錄302 ; 會(huì)話識(shí)別符330,其與會(huì)話容器識(shí)別符3 相組合來唯一地識(shí)別在會(huì)話系統(tǒng) 100/200中的會(huì)話,該會(huì)話對(duì)應(yīng)于會(huì)話記錄310(即,會(huì)話僅可以與單個(gè)會(huì)話容器相關(guān)聯(lián)); 會(huì)話元數(shù)據(jù)322 ; 會(huì)話日志3 (有時(shí)稱為歷史日志);以及 一個(gè)或多個(gè)內(nèi)容貢獻(xiàn)326-1至326-n ;以及 歷史日志360。會(huì)話元數(shù)據(jù)322是用于與會(huì)話記錄310對(duì)應(yīng)并且通過會(huì)話識(shí)別符310識(shí)別的會(huì)話的元數(shù)據(jù)。在一些實(shí)施例中,會(huì)話元數(shù)據(jù)322包括會(huì)話建立時(shí)間戳331 (用于指示建立會(huì)話的日期和時(shí)間)和用于會(huì)話的參與者的列表332(在圖;3B中更詳細(xì)地所述)。元數(shù)據(jù)322 可以可選地包括其他元數(shù)據(jù),諸如與會(huì)話相關(guān)聯(lián)的元數(shù)據(jù)識(shí)別標(biāo)簽325(例如,系統(tǒng)和/ 或用戶分配的標(biāo)簽,其是“公共”的,因此可用于在會(huì)話中的所有參與者);以及與會(huì)話記錄 310相關(guān)聯(lián)的相應(yīng)會(huì)話的其他特性。當(dāng)會(huì)話容器包含多于一個(gè)會(huì)話時(shí),會(huì)話容器的用于主會(huì)話的參與者列表332通常包括在會(huì)話容器中的所有會(huì)話中的所有參與者。然而,在一些實(shí)施例中,在會(huì)話容器中的私人會(huì)話(即,除了主會(huì)話之外的會(huì)話)可以具有不是主會(huì)話的參與者的另外的參與者。因此,在會(huì)話容器中的私人會(huì)話的每一個(gè)通常具有參與者列表332,該參與者列表332包括在同一會(huì)話容器中的主會(huì)話中的參與者的至少一個(gè),并且可選地包括不是在同一會(huì)話容器中的主會(huì)話中的參與者的一個(gè)或多個(gè)參與者。另外,當(dāng)會(huì)話容器包含多于一個(gè)會(huì)話時(shí),對(duì)于私人會(huì)話的每一個(gè)而不是對(duì)于主會(huì)話提供父ID/插入位置333。父ID/插入位置333識(shí)別私人會(huì)話的父以及在所識(shí)別的父會(huì)話中的位置,當(dāng)被私人會(huì)話的參與者觀看時(shí),應(yīng)當(dāng)在該位置插入私人會(huì)話的內(nèi)容。通常,私人會(huì)話的父是會(huì)話容器的主會(huì)話,但是在一些情況下,私人會(huì)話的父可以是在會(huì)話容器中的會(huì)話的分級(jí)(或圖形)中的較高的另一個(gè)父會(huì)話。當(dāng)私人會(huì)話的參與者觀看包括該私人會(huì)話的會(huì)話容器時(shí),將看到父會(huì)話和私人會(huì)話兩者的內(nèi)容(假定,參與者也是父會(huì)話的參與者)。在其中用戶是私人會(huì)話的參與者但是不是在父會(huì)話中的參與者的不常見的情況下, 用戶僅看到在它們是參與者的會(huì)話容器中的會(huì)話的內(nèi)容。在一些實(shí)施例中,會(huì)話邏輯324(圖3C)記錄對(duì)會(huì)話的所有改變,包括對(duì)會(huì)話的內(nèi)容的改變以及對(duì)會(huì)話的參與者組和其他特性的改變。當(dāng)參與者請(qǐng)求觀看在一個(gè)或多個(gè)時(shí)間點(diǎn)的會(huì)話的狀態(tài)或會(huì)話的內(nèi)容單元時(shí),訪問會(huì)話日志324。例如,會(huì)話日志3M可以用于重建或查看對(duì)于會(huì)話的內(nèi)容單元進(jìn)行的編輯的序列。這有時(shí)被稱為會(huì)話的“重放”??梢砸远喾N方式來執(zhí)行會(huì)話的重放,包括在時(shí)間上向前或在時(shí)間上向后,并且示出僅對(duì)于會(huì)話的一部分或?qū)τ谡麄€(gè)會(huì)話的更新。在會(huì)話中的相應(yīng)的內(nèi)容貢獻(xiàn)326(也稱為內(nèi)容單元或“評(píng)論”)可以是消息,很像電子郵件消息或即時(shí)消息。在會(huì)話中的其他內(nèi)容貢獻(xiàn)3 可以是文檔(例如,報(bào)告、會(huì)議日程等)、圖片、演示文稿、音頻文件、視頻文件或?qū)嶋H上任何其他類型的電子文檔或內(nèi)容。在一些實(shí)施例中,在電子郵件消息和對(duì)于會(huì)話的其他類型的內(nèi)容貢獻(xiàn)之間存在很少——如果有的話——的區(qū)別。在一些實(shí)施例中,在用于每一個(gè)內(nèi)容貢獻(xiàn)326的會(huì)話記錄310中的數(shù)據(jù)包括 內(nèi)容識(shí)別符342 (例如,用于唯一地識(shí)別內(nèi)容貢獻(xiàn)的值,全局地在會(huì)話系統(tǒng)中或是本地地在特定的會(huì)話中); 內(nèi)容單元元數(shù)據(jù)346,用于識(shí)別內(nèi)容貢獻(xiàn)326的特性; 可選地,一個(gè)或多個(gè)附件344 (例如,圖片、視頻、文檔、文件、歸檔、音頻、動(dòng)畫、 鏈接等);以及·內(nèi)容貢獻(xiàn)326的內(nèi)容349 (例如,文本、圖像、文檔內(nèi)容等)。在一些實(shí)施例中,用于內(nèi)容單元326的內(nèi)容單元元數(shù)據(jù)346包括 第一時(shí)間戳341-1,用于表示第一次建立(向會(huì)話增加)內(nèi)容單元的日期和時(shí)間;以及對(duì)應(yīng)的序列號(hào)343-1,其對(duì)應(yīng)于當(dāng)?shù)谝淮谓?nèi)容單元時(shí)的會(huì)話的狀態(tài); 最后時(shí)間戳341-2,用于表示編輯內(nèi)容單元的最后日期和時(shí)間;以及對(duì)應(yīng)的序列號(hào)343-2,其對(duì)應(yīng)于當(dāng)進(jìn)行對(duì)于內(nèi)容單元的最后編輯時(shí)的會(huì)話的狀態(tài);(例如)當(dāng)重放對(duì)內(nèi)容單元的改變時(shí)或當(dāng)重放對(duì)包括內(nèi)容單元的會(huì)話的一部分的改變時(shí),具有第一和最后時(shí)間戳和序列號(hào)是有益的;以及 內(nèi)容單元的貢獻(xiàn)者或作者的識(shí)別符352 (例如,參與者地址),其可選地由每一個(gè)作者對(duì)內(nèi)容單元的第一貢獻(xiàn)的順序排序;雖然大多數(shù)內(nèi)容單元具有單個(gè)作者,但是可以合作地編寫內(nèi)容單元,在該情況下,內(nèi)容單元具有多個(gè)作者。在一些實(shí)施例中,用于內(nèi)容單元326的元數(shù)據(jù)346也包括下述的一個(gè)或多個(gè) 父識(shí)別符3M提供父內(nèi)容單元的識(shí)別符或指向其的指針,對(duì)于該父內(nèi)容單一, 這個(gè)內(nèi)容貢獻(xiàn)是響應(yīng)或答復(fù); 位置350提供在會(huì)話中的這個(gè)內(nèi)容單元的位置的指示符;位置350可以用于控制當(dāng)顯示會(huì)話的兩個(gè)或更多內(nèi)容單元時(shí)如何顯示內(nèi)容單元;以及
可選地,這個(gè)內(nèi)容貢獻(xiàn)的同級(jí)358(即,對(duì)于同級(jí)內(nèi)容單元的識(shí)別符或指針,該同級(jí)內(nèi)容單元是對(duì)這個(gè)內(nèi)容單元的父的其他響應(yīng)或答復(fù))。通常,用于內(nèi)容單元326的元數(shù)據(jù)346包括至少一個(gè)值(例如,位置350或父識(shí)別符354),該至少一個(gè)值識(shí)別或表示內(nèi)容單元3 在會(huì)話中的位置。會(huì)話索引沈4(參見圖2、通過索引的搜索使能對(duì)于在會(huì)話數(shù)據(jù)庫(kù)262中的會(huì)話的快速訪問。圖;3B是圖示在會(huì)話記錄310的會(huì)話元數(shù)據(jù)322 (圖3A)中的參與者列表332的數(shù)據(jù)結(jié)構(gòu)的框圖。參與者列表332包括多個(gè)參與者記錄362,在相應(yīng)的會(huì)話中的每一個(gè)參與者一個(gè)參與者記錄。在一些實(shí)施例中,每一個(gè)參與者記錄362包括下面的信息或下面的信息的子集 會(huì)話識(shí)別符371 ; 參與者地址372,其也可以被稱為參與者識(shí)別符;參與者地址唯一地識(shí)別在會(huì)話系統(tǒng)100(圖1)中的會(huì)話中的所有參與者中的參與者; 每個(gè)用戶會(huì)話狀態(tài)373 ;例如,會(huì)話狀態(tài)373可以指示這個(gè)會(huì)話相對(duì)于與參與者記錄362對(duì)應(yīng)的相應(yīng)參與者而言的讀取/未讀取狀態(tài)374 ;會(huì)話狀態(tài)372可以包括關(guān)于參與者已經(jīng)查看了在會(huì)話中的哪些內(nèi)容貢獻(xiàn)和哪些還沒有被查看的信息。 用于會(huì)話參與者的會(huì)話狀態(tài)373可以包括標(biāo)記376 ;可選地,標(biāo)記376可以包括忽略標(biāo)記377 (有時(shí)也稱為靜音標(biāo)記),該忽略標(biāo)記377如果存在則指示參與者已經(jīng)指令會(huì)話系統(tǒng)不向參與者通知對(duì)會(huì)話的更新; 會(huì)話參與者的會(huì)話狀態(tài)373可以包括由這個(gè)參與者向這個(gè)會(huì)話分配的專用標(biāo)簽(有時(shí)稱為“文件夾”或“文件夾指定”)378,該專用標(biāo)簽僅由這個(gè)參與者使用(例如,當(dāng)搜索會(huì)話時(shí),該參與者可以包括作為查詢?cè)~語(yǔ)中的一個(gè)的專用標(biāo)簽);專用標(biāo)簽可以被參與者應(yīng)用來幫助組織它們的會(huì)話并且使得容易至少部分地基于已經(jīng)向它們應(yīng)用了什么標(biāo)簽來定位會(huì)話;注意,標(biāo)記325是在會(huì)話中的所有參與者可獲得的公共信息,而每一個(gè)參與者的專用標(biāo)簽是那個(gè)參與者專用的。眷用于會(huì)話參與者的會(huì)話狀態(tài)373可以包括視點(diǎn)指針379,該指針指示當(dāng)前被參與者查看的會(huì)話的部分(和如果用戶正在輸入或編輯內(nèi)容單元?jiǎng)t在相應(yīng)的內(nèi)容單元內(nèi)的用戶的光標(biāo)的位置)或如果參與者當(dāng)前未顯示或查看會(huì)話則為由參與者最后查看的會(huì)話的部分; 可選地,與相對(duì)于這個(gè)特定會(huì)話而言的這個(gè)相應(yīng)的參與者相關(guān)的其他元數(shù)據(jù)。在相應(yīng)的參與者的每一個(gè)用戶會(huì)話狀態(tài)373中的另一個(gè)可選標(biāo)記376是提醒標(biāo)記。當(dāng)在每一個(gè)用戶會(huì)話狀態(tài)373中包括時(shí),每一個(gè)用戶會(huì)話狀態(tài)373也包括對(duì)應(yīng)的時(shí)間戳,用于指示提醒參與者關(guān)注會(huì)話或其一部分的日期和時(shí)間(或用于指示日期/時(shí)間范圍的時(shí)間戳對(duì));可選地,用戶ID,用于識(shí)別啟動(dòng)提醒的用戶(在一些實(shí)施例中,用戶不僅向他們本身,而且向會(huì)話中的其他參與者發(fā)送提醒);以及,可選地,內(nèi)容范圍指示符,用于指定作為提醒的主題的會(huì)話的一部分。在相應(yīng)的參與者的每一個(gè)用戶會(huì)話狀態(tài)373中的另一個(gè)可選標(biāo)記376是ping (探索)標(biāo)記。當(dāng)另一個(gè)參與者已經(jīng)向該參與者(通常是在線參與者)發(fā)送了 Ping(它是一種形式的通知或即時(shí)消息)時(shí),或當(dāng)該參與者已經(jīng)向另一個(gè)參與者發(fā)送Ping時(shí),ping標(biāo)記被包括在每一個(gè)用戶會(huì)話狀態(tài)373中。ping標(biāo)記當(dāng)存在時(shí)向客戶端應(yīng)用指示要顯示ping通知(例如,彈出框)。在每一個(gè)參與者記錄362中的大多信息(例如,會(huì)話狀態(tài)37 對(duì)那個(gè)參與者是專用的,而不與會(huì)話的其他參與者或在會(huì)話系統(tǒng)中的其他用戶共享。在一些實(shí)施例中,在會(huì)話中積極地編輯內(nèi)容單元或輸入下一個(gè)文本的每一個(gè)參與者的光標(biāo)位置(參見379,圖3B)被發(fā)布給該會(huì)話的其他參與者并且可被其看到,除非相應(yīng)的參與者已經(jīng)選擇抑制它們的光標(biāo)位置的發(fā)布,在該情況下,不將參與者的會(huì)話狀態(tài)373的那個(gè)方面考慮為對(duì)該參與者是專用的。當(dāng)存在編輯同一會(huì)話的多個(gè)活動(dòng)的參與者時(shí),用于活動(dòng)的參與者的每一個(gè)的光標(biāo)位置信息被發(fā)送到活動(dòng)參與者的客戶端(經(jīng)由它們的托管會(huì)話服務(wù)器)。在相應(yīng)的參與者的客戶端處,當(dāng)光標(biāo)位置彼此接近得足以使得同時(shí)顯示時(shí),同時(shí)顯示多個(gè)光標(biāo)位置(對(duì)應(yīng)于多個(gè)不同的參與者)。如上所述,在一些實(shí)施例中,對(duì)于每一個(gè)相應(yīng)的會(huì)話記錄310,服務(wù)器140對(duì)于每一個(gè)相應(yīng)的參與者362維護(hù)相應(yīng)會(huì)話的關(guān)于該相應(yīng)的參與者的會(huì)話狀態(tài)373。服務(wù)器130 向相應(yīng)的參與者(例如,向正在向該參與者顯示會(huì)話的客戶端)提供相應(yīng)會(huì)話的關(guān)于該相應(yīng)的參與者的狀態(tài)。在一些實(shí)施例中,這包括向該參與者(例如,向正在被該參與者使用的客戶端)提供關(guān)于該參與者的相應(yīng)的會(huì)話的內(nèi)容單元的讀取狀態(tài)(即,用于指示哪些內(nèi)容單元(在它們當(dāng)前的狀態(tài)中)已經(jīng)被參與者讀取或查看,以及哪些還沒有)。在一些實(shí)施例中,提供相應(yīng)會(huì)話的關(guān)于相應(yīng)的參與者的會(huì)話狀態(tài)373包括提供由相應(yīng)的參與者為相應(yīng)的會(huì)話指定的標(biāo)簽378。在一些實(shí)施例中,提供相應(yīng)會(huì)話的關(guān)于相應(yīng)的參與者的狀態(tài)373包括根據(jù)來自參與者的指令來提供用于忽略相應(yīng)的會(huì)話的元數(shù)據(jù)(例如,忽略標(biāo)記377)。這向參與者提供了根據(jù)規(guī)則來管理會(huì)話的選項(xiàng),實(shí)際上用于歸檔會(huì)話,并且減少在會(huì)話觀看者中的擁塞。 例如,當(dāng)參與者使用系統(tǒng)定義的標(biāo)簽“忽略”或“靜音”來標(biāo)注會(huì)話時(shí),設(shè)置參與者的忽略狀態(tài)標(biāo)記377 (用于標(biāo)注的會(huì)話),并且其后,很像歸檔的消息或會(huì)話那樣處理會(huì)話(代表該特定的參與者)。會(huì)話的其他參與者如果他們未使用“忽略”標(biāo)簽標(biāo)注會(huì)話則可以繼續(xù)看到在他們的活動(dòng)會(huì)話的列表中的會(huì)話。在一些實(shí)施例中,每一個(gè)托管的會(huì)話的每一個(gè)參與者的每一個(gè)用戶會(huì)話狀態(tài)373 被存儲(chǔ)在會(huì)話數(shù)據(jù)庫(kù)沈2中,如圖3A中所示。在其他實(shí)施例中,每一個(gè)托管的會(huì)話的每一個(gè)參與者的每一個(gè)用戶會(huì)話狀態(tài)373被存儲(chǔ)在用戶數(shù)據(jù)庫(kù)400中,如下所述。在其他實(shí)施例中,每一個(gè)用戶會(huì)話狀態(tài)373信息(用于每一個(gè)托管的會(huì)話的每一個(gè)參與者)被存儲(chǔ)在與會(huì)話數(shù)據(jù)庫(kù)262和用戶數(shù)據(jù)庫(kù)400分離的獨(dú)立數(shù)據(jù)庫(kù)或服務(wù)器(有時(shí)稱為“用戶補(bǔ)充”數(shù)據(jù)庫(kù)或服務(wù)器)中。可選地,可以在用戶數(shù)據(jù)庫(kù)400和會(huì)話數(shù)據(jù)庫(kù)沈2中存儲(chǔ)指向在用戶補(bǔ)充數(shù)據(jù)庫(kù)中的每一個(gè)用戶會(huì)話狀態(tài)373信息(例如,記錄)的指針。替代地,不存儲(chǔ)這樣的指針,并且,在根據(jù)需要的基礎(chǔ)上從用戶補(bǔ)充數(shù)據(jù)庫(kù)檢索用于相應(yīng)的會(huì)話的特定用戶的每一個(gè)用戶會(huì)話狀態(tài)373以通常用于向參與會(huì)話的客戶端發(fā)送,并且根據(jù)由該參與者執(zhí)行的操作(例如,讀取內(nèi)容、輸入結(jié)束內(nèi)容、標(biāo)記內(nèi)容等)來更新該每一個(gè)用戶會(huì)話狀態(tài)373。如下更詳細(xì)所述,在一些實(shí)施例中,會(huì)話服務(wù)器130對(duì)于每一個(gè)相應(yīng)的訂戶存儲(chǔ)與該相應(yīng)的訂戶相關(guān)聯(lián)的聯(lián)系人列表(在圖4中所述的416)。在一些實(shí)施例中,在用戶數(shù)據(jù)庫(kù)270 (圖2)或400 (圖4)中存儲(chǔ)聯(lián)系人列表。
當(dāng)向客戶端發(fā)送會(huì)話以向用戶顯示時(shí),該客戶端僅接收用于該會(huì)話的會(huì)話記錄 310(圖3A)的一部分。例如,在一些實(shí)施例中,被發(fā)送到客戶端并且被存儲(chǔ)在客戶端的會(huì)話記錄310的部分排除會(huì)話日志3M和其他參與者的會(huì)話狀態(tài)373 (除了還沒有阻止他們的光標(biāo)位置的發(fā)送的、在會(huì)話中的其他當(dāng)前活動(dòng)參與者的光標(biāo)位置)。在一些實(shí)施例中,僅當(dāng)在客戶端110的參與者已經(jīng)請(qǐng)求會(huì)話或會(huì)話的用戶指定部分的重放或已經(jīng)請(qǐng)求查看在過去的特定時(shí)間或點(diǎn)處的會(huì)話的狀態(tài)時(shí),向該客戶端發(fā)送會(huì)話日志324。圖3C是圖示根據(jù)一些實(shí)施例的用于會(huì)話日志324的數(shù)據(jù)結(jié)構(gòu)的框圖。會(huì)話日志 3 包括日志記錄385-1至385-C(有時(shí)稱為日志條目)的時(shí)間排序的序列。相應(yīng)的日志記錄385包括內(nèi)容ID 386,用于識(shí)別由在日志記錄385中記錄的會(huì)話編輯更新的內(nèi)容單元(如果有的話);元數(shù)據(jù)388,其與在日志記錄中記錄的會(huì)話編輯相關(guān);對(duì)于由在日志記錄中記錄的會(huì)話編輯加到會(huì)話的任何附件的引用394(例如,一個(gè)或多個(gè)指針或文件名); 以及在日志記錄中記錄的會(huì)話編輯或改變396的列表。元數(shù)據(jù)388包括相對(duì)于在用于同一會(huì)話的其他日志記錄中的會(huì)話編輯而言的、唯一地識(shí)別在日志記錄中的會(huì)話編輯的順序的時(shí)間戳389和/或序列號(hào)。元數(shù)據(jù)388也識(shí)別在日志記錄中的會(huì)話編輯的作者(也稱為貢獻(xiàn)者)列表390和在日志記錄385中記錄的會(huì)話編輯的開始位置392。雖然作者列表390 對(duì)于大多數(shù)日志記錄385僅包括一個(gè)作者,但是當(dāng)多個(gè)作者在短時(shí)間期間或在重疊的時(shí)間段期間向內(nèi)容單元進(jìn)行編輯或貢獻(xiàn)內(nèi)容時(shí),單個(gè)相對(duì)應(yīng)的日志記錄385包括對(duì)于由那個(gè)日志記錄385記錄的內(nèi)容單元中的改變有貢獻(xiàn)的所有作者的列表390。在一些實(shí)施例中,開始位置392作為用于會(huì)話編輯396的第一編輯或更新操作的偏移或位置設(shè)置被包含到會(huì)話編輯396,并且在那些實(shí)施例中,日志記錄沒有獨(dú)立的開始位置392字段。圖4是圖示根據(jù)本發(fā)明的某些實(shí)施例的、用于用戶數(shù)據(jù)庫(kù)400的數(shù)據(jù)結(jié)構(gòu)的框圖。 數(shù)據(jù)庫(kù)400包括多個(gè)用戶記錄402。在一些實(shí)施例中,每一個(gè)用戶記錄402包括 用于托管的會(huì)話系統(tǒng)的訂戶的用戶識(shí)別符410 ; 用戶元數(shù)據(jù)412,包含關(guān)于或用于用戶的信息; 其中用戶是參與者的會(huì)話414的列表; 用戶的聯(lián)系人列表416(通常,對(duì)應(yīng)于用戶并且對(duì)于用戶而言是個(gè)人的聯(lián)系人 416的列表); 可選地,由用戶定義的標(biāo)簽418,用于標(biāo)注或分類會(huì)話; 可選地,被用戶使用來與會(huì)話服務(wù)器進(jìn)行通信的客戶端裝置的客戶端裝置識(shí)別符和/或類型420,或替代地,用戶在過去與會(huì)話服務(wù)器相結(jié)合地使用的客戶端裝置的識(shí)別符和類型;在一些實(shí)施例中,可以使用客戶端的類型(例如,臺(tái)式機(jī)、蜂窩電話等)來確定向用戶發(fā)送來自會(huì)話的什么內(nèi)容; 可選地,當(dāng)參與會(huì)話422時(shí)用戶的偏好422 ; 可選地,與用戶相關(guān)聯(lián)的逆索引424 ; 用戶的當(dāng)前在線狀態(tài)426(例如,離線、在線、忙、離開等); 用于用戶的認(rèn)證信息428(例如,用戶名、密碼和可選的用于用戶認(rèn)證的其他值); 可選地,與用戶相關(guān)的其他數(shù)據(jù),諸如一個(gè)或多個(gè)博客URL 430、電子郵件地址 432 等。
與用戶相關(guān)聯(lián)的會(huì)話列表414包括多個(gè)用戶會(huì)話記錄434,每一個(gè)記錄與其中用戶是參與者的會(huì)話相關(guān)。每一個(gè)用戶會(huì)話記錄434包括 會(huì)話識(shí)別符436,用于識(shí)別相應(yīng)的會(huì)話,以及 每一個(gè)用戶會(huì)話狀態(tài)信息438,其可以與在會(huì)話記錄310的參與者記錄362中的會(huì)話狀態(tài)373相同(或是指向該會(huì)話狀態(tài)373的指針)。如上所述,在一些實(shí)施例中,每一個(gè)用戶會(huì)話狀態(tài)信息被存儲(chǔ)在獨(dú)立的數(shù)據(jù)庫(kù)或服務(wù)器(有時(shí)稱為用戶補(bǔ)充數(shù)據(jù)庫(kù)或服務(wù)器)中,在該情況下,用戶會(huì)話記錄434包括會(huì)話識(shí)別符436,而不是每一個(gè)用戶會(huì)話狀態(tài)信息 438。如上所述,在一些實(shí)施例中,所述系統(tǒng)包括用于系統(tǒng)的每一個(gè)用戶的獨(dú)立的每一個(gè)用戶逆索引4M ;每一個(gè)這樣的索引4M是將其中用戶是參與者的會(huì)話的詞語(yǔ)、標(biāo)簽、標(biāo)記等映射到包含那些詞語(yǔ)、標(biāo)簽、標(biāo)記等的會(huì)話(并且可選地,映射到具有會(huì)話的內(nèi)容單元或在會(huì)話內(nèi)的位置)。這些每一個(gè)用戶索引使能其中用戶是參與者的會(huì)話的快速索引和快速搜索。在一些實(shí)施例中,另外的索引(有時(shí)稱為“大波”索引)用于對(duì)于具有大量(例如,超過閾值數(shù)量,諸如500或100)參與者的“大波”會(huì)話提供快速索引和訪問。在這些實(shí)施例中,不在每一個(gè)用戶逆索引4M中對(duì)于“大波”會(huì)話的內(nèi)容加索引,而是在一個(gè)或多個(gè) “大波”索引中對(duì)于“大波”會(huì)話的內(nèi)容加索引。類似地,在其中用戶組作為組參與會(huì)話的一些實(shí)施例中,附加的每組索引用于對(duì)那些會(huì)話加索引,并且提供那些會(huì)話的快速搜索;并且,其中相應(yīng)的用戶僅作為組成員參與的會(huì)話(如果有的話)不被包括在用戶的每一個(gè)用戶逆索引4M中。因此,當(dāng)用戶執(zhí)行對(duì)于滿足用戶指定的查詢的會(huì)話的搜索時(shí),可以搜索多個(gè)索引,在該情況下,來自多個(gè)索引的搜索結(jié)果被合并,然后將搜索結(jié)果返回到進(jìn)行請(qǐng)求的用戶。在一些實(shí)施例中,服務(wù)器130向會(huì)話的所有參與者提供會(huì)話的相同內(nèi)容,并且向每一個(gè)在線參與者提供關(guān)于在同一會(huì)話中的其他參與者的在線存在信息。在一些實(shí)施例中,服務(wù)器允許會(huì)話的參與者禁止向在會(huì)話中的其他參與者發(fā)布他們的在線存在信息。在一些實(shí)施例中,服務(wù)器允許會(huì)話的參與者選擇性地使能向在會(huì)話中的其他參與者發(fā)布他們的在線存在信息(例如,允許僅向由參與者指定的用戶發(fā)布參與者的在線存在;或替代地, 禁止向由參與者具體指定的用戶發(fā)布參與者的在線存在)。在一些實(shí)施例中,服務(wù)器130向每一個(gè)參與者提供相同的內(nèi)容,將會(huì)話的內(nèi)容格式化為與關(guān)聯(lián)于相應(yīng)的參與者的客戶端裝置110已經(jīng)被配置來接收的一個(gè)或多個(gè)內(nèi)容類型兼容,并且向客戶端裝置發(fā)送格式化的內(nèi)容。在一些實(shí)施例中,當(dāng)向某些客戶端(例如,蜂窩電話或PDA)遞送會(huì)話的內(nèi)容時(shí),會(huì)話服務(wù)器130通過壓縮與內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù)(例如,以減少帶寬要求)來格式化該內(nèi)容。在一些實(shí)施例中,服務(wù)器向客戶端提供與內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù)(例如,縮略圖或短音頻/視頻剪輯)的子集。在一些實(shí)施例中,會(huì)話服務(wù)器去除與向客戶端遞送的內(nèi)容(例如,剝?nèi)ザ嗝襟w并且僅提供文本)相關(guān)聯(lián)的多媒體數(shù)據(jù)。在一些實(shí)施例中,會(huì)話服務(wù)器130在向用戶提供來自會(huì)話的內(nèi)容之前使用認(rèn)證信息似8來認(rèn)證用戶。在一些實(shí)施例中,會(huì)話服務(wù)器130向在用于相應(yīng)的用戶的用戶記錄402中(例如, 通過博客URL 430)指定的網(wǎng)絡(luò)日志(例如,網(wǎng)絡(luò)日志服務(wù)器2 或網(wǎng)絡(luò)日志客戶端228)發(fā)送來自其中該用戶是參與者的會(huì)話的內(nèi)容。當(dāng)在會(huì)話中的相應(yīng)參與者是自動(dòng)客戶端時(shí), 會(huì)話的內(nèi)容被發(fā)送到自動(dòng)客戶端。自動(dòng)客戶端可以是網(wǎng)絡(luò)日志、電子郵件服務(wù)器或帳戶或諸如翻譯服務(wù)或拼寫檢查服務(wù)等的服務(wù)提供商。圖5A-5E是用于表示根據(jù)本發(fā)明的某些實(shí)施例的、用于在服務(wù)器處托管會(huì)話的方法的流程圖。這些方法被在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)并且由一個(gè)或多個(gè)服務(wù)器的一個(gè)或多個(gè)處理器執(zhí)行的指令控制。在圖5A-5E中所示的操作的每一個(gè)可以對(duì)應(yīng)于在計(jì)算機(jī)存儲(chǔ)器或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)的指令。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括磁或光盤存儲(chǔ)裝置、諸如閃速存儲(chǔ)器的固態(tài)存儲(chǔ)裝置或其他非易失性存儲(chǔ)裝置。在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)的計(jì)算機(jī)可讀指令是以源代碼、匯編語(yǔ)言代碼、對(duì)象代碼或被一個(gè)或多個(gè)處理器執(zhí)行或解譯的其他指令格式的。圖5A示出用于在服務(wù)器處托管會(huì)話的方法500。服務(wù)器托管(502)多個(gè)會(huì)話,每一個(gè)會(huì)話具有被識(shí)別的一組參與者。服務(wù)器通常是在托管的會(huì)話系統(tǒng)中托管會(huì)話的多個(gè)服務(wù)器中的一個(gè)。服務(wù)器向會(huì)話的所有參與者提供(506)來自會(huì)話的相同內(nèi)容。在一些實(shí)施例中, 服務(wù)器也向在會(huì)話中的其他參與者提供(508)在會(huì)話中的多個(gè)參與者的每一個(gè)的在線存在信息。服務(wù)器從會(huì)話的多個(gè)參與者的每一個(gè)接收(510)內(nèi)容,并且向多個(gè)參與者中的其他參與者發(fā)送所接收的內(nèi)容。服務(wù)器在另外的參與者被增加到會(huì)話時(shí)向該另外的參與者提供與向所述被識(shí)別的一組參與者提供的相同的會(huì)話內(nèi)容,并且向被識(shí)別的一組參與者增加該另外的參與者。 如上所述,當(dāng)該另外的參與者正在使用能夠接收會(huì)話的整體內(nèi)容的客戶端時(shí),會(huì)話的整體內(nèi)容被發(fā)送到由該另外的參與者當(dāng)前正在使用的客戶端。在一些實(shí)施例中,“會(huì)話的整體內(nèi)容”包括在向會(huì)話增加該另外的參與者之前由在會(huì)話的先前參與者增加的全部?jī)?nèi)容以及在增加另外的參與者時(shí)在會(huì)話中包括的任何自動(dòng)產(chǎn)生的內(nèi)容(例如,由服務(wù)器系統(tǒng)產(chǎn)生的內(nèi)容)。結(jié)果,甚至在會(huì)話已經(jīng)開始后長(zhǎng)時(shí)間被加到會(huì)話的參與者接收在參與者被加到會(huì)話之前向會(huì)話貢獻(xiàn)的內(nèi)容。應(yīng)當(dāng)明白,保護(hù)與在會(huì)話中的參與者相關(guān)聯(lián)的個(gè)人數(shù)據(jù)和/或由參與者向會(huì)話增加的內(nèi)容的隱私經(jīng)常是參與者的關(guān)心問題。因此,在一些實(shí)施例中,以多種方式的任何一種來處理這樣的隱私問題,該多種方式包括但是不限于以下的一種或多種使得參與者能夠參與“私人會(huì)話”(如上面參考圖3A更詳細(xì)所述);使得參與者能夠在“組起草模式”中編輯起草消息(如下面參考圖10更詳細(xì)所述);允許參與者決定退出自動(dòng)共享他們的內(nèi)容(例如,通過限制對(duì)由相應(yīng)的參與者增加的內(nèi)容的訪問,使得它僅可以被已經(jīng)由相應(yīng)的參與者特定批準(zhǔn)的其他參與者訪問);以及限制參與者在沒有一個(gè)或多個(gè)其他參與者對(duì)于相應(yīng)的會(huì)話的批準(zhǔn)的情況下向相應(yīng)的會(huì)話增加另外的參與者的能力(例如,在向相關(guān)的會(huì)話增加新的參與者之前,要求其他參與者的一半或全部其他參與者的批準(zhǔn))。在一些實(shí)施例中,服務(wù)器將會(huì)話的內(nèi)容格式化(514)為與和相應(yīng)的參與者相關(guān)聯(lián)的客戶端已經(jīng)被配置來接收的一個(gè)或多個(gè)內(nèi)容類型兼容,并且向客戶端裝置發(fā)送格式化的內(nèi)容。在一些實(shí)施例中,服務(wù)器通過執(zhí)行下述中的至少一個(gè)來格式化來自會(huì)話的內(nèi)容壓縮與內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù);提供與內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù)的子集;以及去除與內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù)(例如,去除視頻和音頻數(shù)據(jù),但是留下文本內(nèi)容)。在一些實(shí)施例中,服務(wù)器從參與者接收(518)搜索請(qǐng)求(經(jīng)常被稱為查詢或搜索查詢),并且響應(yīng)于搜索請(qǐng)求向參與者提供搜索結(jié)果,該搜索結(jié)果包括來自多個(gè)會(huì)話中的至少一個(gè)的內(nèi)容。作為替代或補(bǔ)充,響應(yīng)于所接收的搜索請(qǐng)求,服務(wù)器向參與者提供(520)包括匹配搜索請(qǐng)求的一個(gè)或多個(gè)會(huì)話的列表的搜索結(jié)果。在一些實(shí)施例中,查詢引擎沈0(圖 2)使用會(huì)話內(nèi)容的逆索引264來處理搜索請(qǐng)求,以識(shí)別與搜索請(qǐng)求匹配的會(huì)話或在一個(gè)或多個(gè)會(huì)話內(nèi)的內(nèi)容。圖5B示出圖5A的方法500的繼續(xù)部分。服務(wù)器對(duì)于每一個(gè)相應(yīng)的參與者存儲(chǔ) (530)相應(yīng)會(huì)話關(guān)于相應(yīng)的參與者的狀態(tài),并且向相應(yīng)的參與者(例如,向當(dāng)前被參與者使用來觀看會(huì)話的客戶端)提供相應(yīng)的會(huì)話關(guān)于相應(yīng)的參與者的狀態(tài)。在一些實(shí)施例中,這包括向參與者(例如,向參與者使用的客戶端)提供(53 相應(yīng)的會(huì)話的內(nèi)容單元關(guān)于參與者的讀取狀態(tài)(即,指示哪些內(nèi)容單元已經(jīng)被參與者讀取或觀看和哪些沒有)。在一些實(shí)施例中,提供(534)相應(yīng)會(huì)話關(guān)于相應(yīng)的參與者的狀態(tài)包括提供由用于相應(yīng)的會(huì)話的相應(yīng)參與者指定的標(biāo)簽——如果有的話。在一些實(shí)施例中,根據(jù)來自特定參與者的指令,針對(duì)該參與者為會(huì)話維護(hù)的元數(shù)據(jù)包括(536)用于忽略相應(yīng)的會(huì)話的元數(shù)據(jù)。例如,可以向會(huì)話服務(wù)器的搜索引擎沈0(圖 2)提供忽略元數(shù)據(jù)。在一些實(shí)施例中,服務(wù)器提供(538)與會(huì)話狀態(tài)對(duì)應(yīng)的格式化信息, 當(dāng)顯示會(huì)話或其部分時(shí)使用該格式化信息。在一些實(shí)施例中,該格式化信息包括下述中的一個(gè)或多個(gè)顏色(例如,文本、背景、邊界的顏色)、字體、縮進(jìn)、位置(例如,上標(biāo)或下標(biāo))寸。在一些實(shí)施例中,服務(wù)器對(duì)于每一個(gè)相應(yīng)的參與者存儲(chǔ)(MO)與相應(yīng)的參與者相關(guān)聯(lián)的聯(lián)系人列表。在一些實(shí)施例中,在向參與者提供內(nèi)容之前,服務(wù)器(使用認(rèn)證信息428)驗(yàn)證 (542)參與者被授權(quán)來接收會(huì)話的內(nèi)容。在一些實(shí)施例中,服務(wù)器維護(hù)(544)相應(yīng)的會(huì)話的一組參與者,包括服務(wù)器系統(tǒng)的一個(gè)或多個(gè)訂戶和由電子郵件地址識(shí)別的電子郵件參與者。在一些實(shí)施例中,服務(wù)器維護(hù)646)相應(yīng)的會(huì)話的一組參與者,包括由服務(wù)器托管的會(huì)話系統(tǒng)的一個(gè)或多個(gè)訂戶和其上張貼了會(huì)話的內(nèi)容的網(wǎng)絡(luò)日志。圖5C示出圖5A的方法500的繼續(xù)部分。在一些實(shí)施例中,服務(wù)器對(duì)于(由包括該服務(wù)器的一組服務(wù)器托管的會(huì)話系統(tǒng)的)相應(yīng)用戶維護(hù)650)其中用戶是參與者的會(huì)話的列表。當(dāng)相應(yīng)的會(huì)話的狀態(tài)改變時(shí),服務(wù)器更新在列表中的每一個(gè)這樣的會(huì)話的狀態(tài)。在來自用戶(例如,來自被用戶使用的客戶端)的請(qǐng)求時(shí),服務(wù)器向用戶發(fā)送包括其中用戶是參與者的會(huì)話的列表的至少一部分的列表,該列表包括列出的會(huì)話的狀態(tài)信息。在一些實(shí)施例中,服務(wù)器對(duì)其維護(hù)( 會(huì)話列表的每一個(gè)相應(yīng)用戶是托管的會(huì)話系統(tǒng)的訂戶。圖5D示出托管電子消息的方法560。服務(wù)器托管(56 多個(gè)會(huì)話。服務(wù)器向與會(huì)話的參與者相關(guān)聯(lián)的多個(gè)客戶端提供(564)會(huì)話的內(nèi)容,包括向每一個(gè)客戶端提供客戶端已經(jīng)被配置來接收的會(huì)話的所有內(nèi)容。服務(wù)器從會(huì)話的相應(yīng)的參與者接收(566)內(nèi)容,并且向與會(huì)話的其他參與者相關(guān)聯(lián)的客戶端發(fā)送所接收的內(nèi)容的至少一部分。服務(wù)器也在向會(huì)話增加另外的參與者時(shí)向與該另外的參與者相關(guān)聯(lián)的客戶端提供(568)與該另外的參與者相關(guān)聯(lián)的客戶端已經(jīng)被配置來接收的會(huì)話的所有內(nèi)容。
圖5E示出托管電子消息的方法570。對(duì)于其中每一個(gè)與不同的用戶子集相關(guān)聯(lián)的多個(gè)服務(wù)器中的至少一個(gè),服務(wù)器托管(572)由相應(yīng)的用戶子集啟動(dòng)的會(huì)話。服務(wù)器從會(huì)話的相應(yīng)參與者接收(574)內(nèi)容,并且使得該內(nèi)容可被會(huì)話的其他參與者獲得。對(duì)于與其他會(huì)話服務(wù)器相關(guān)聯(lián)的參與者,該內(nèi)容被發(fā)送到那些其他會(huì)話服務(wù)器。當(dāng)參與者登錄并且請(qǐng)求會(huì)話的內(nèi)容時(shí),該內(nèi)容被發(fā)送到該參與者。服務(wù)器也在向會(huì)話增加另外的參與者時(shí)向與該另外的參與者相關(guān)聯(lián)的客戶端提供(576)會(huì)話的所有內(nèi)容,或者替代地,提供(576)與該另外的參與者相關(guān)聯(lián)的客戶端已經(jīng)被配置來接收的會(huì)話的所有內(nèi)容。在一些實(shí)施例中,服務(wù)器向多個(gè)參與者提供(578)會(huì)話的統(tǒng)一視圖。圖6是根據(jù)本發(fā)明的某些實(shí)施例的、具有多個(gè)鏈接的會(huì)話服務(wù)器130的會(huì)話系統(tǒng) 600的框圖。圖6圖示會(huì)話服務(wù)器130彼此的邏輯耦合和會(huì)話服務(wù)器130與客戶端的邏輯耦合,以監(jiān)控和報(bào)告系統(tǒng)用戶的在線狀態(tài)(存在)。網(wǎng)絡(luò)600包括會(huì)話服務(wù)器130-A、130-B 和130-C。會(huì)話系統(tǒng)600可以包括比在圖6中所示的更多或更少的會(huì)話服務(wù)器。每一個(gè)會(huì)話服務(wù)器130托管一組用戶138的會(huì)話。(例如,每一個(gè)會(huì)話服務(wù)器130可以托管由幾百或甚至幾千用戶啟動(dòng)的會(huì)話。)會(huì)話服務(wù)器130-A被分配用戶138-A ;會(huì)話服務(wù)器130-B被分配用戶138-B ;并且會(huì)話服務(wù)器130-N被分配用戶138-N。每一個(gè)會(huì)話服務(wù)器130包括相應(yīng)的狀態(tài)監(jiān)視器1;M(1;M-A、1;M-B、134-N)和相應(yīng)的狀態(tài)收集器136 (136-A、136-B、136-N)。每當(dāng)用戶改變?cè)诰€狀態(tài)(例如,通過登錄到會(huì)話系統(tǒng)而從離線改變?yōu)樵诰€)時(shí),相應(yīng)的狀態(tài)監(jiān)視器134 (例如,被分配給該用戶的會(huì)話服務(wù)器130中的狀態(tài)監(jiān)視器)檢測(cè)在狀態(tài)上的改變。在用戶被分配到的會(huì)話服務(wù)器處的狀態(tài)監(jiān)視器134接收消息或?qū)⒃谀莻€(gè)用戶的在線狀態(tài)上的改變檢測(cè)為“在線”(或“活動(dòng)”、“忙”或適當(dāng)?shù)娜魏螤顟B(tài))。而且,在會(huì)話服務(wù)器處的狀態(tài)收集器136收集在那個(gè)用戶的聯(lián)系人列表416中的聯(lián)系人的在線狀態(tài)。在用戶的聯(lián)系人列表中的一些聯(lián)系人可以被分配到同一會(huì)話服務(wù)器,而在用戶的聯(lián)系人列表中的其他聯(lián)系人被分配到其他會(huì)話服務(wù)器。用戶被分配到的會(huì)話服務(wù)器的狀態(tài)收集器136收集用戶的聯(lián)系人的在線狀態(tài),包括向其他會(huì)話服務(wù)器分配的那些,并且將所收集的狀態(tài)信息的至少一部分向用戶(即,向被用戶當(dāng)前使用的客戶端裝置或系統(tǒng))轉(zhuǎn)發(fā)。在一些實(shí)施例中,狀態(tài)收集器向其他會(huì)話服務(wù)器廣播對(duì)用戶的聯(lián)系人的狀態(tài)信息的請(qǐng)求,并且聯(lián)系人被分配到的會(huì)話服務(wù)器響應(yīng)于該請(qǐng)求。在其他一些實(shí)施例中,狀態(tài)收集器確定聯(lián)系人被分配到的會(huì)話服務(wù)器,并且向那些會(huì)話服務(wù)器發(fā)送對(duì)狀態(tài)信息的請(qǐng)求。在一些實(shí)施例中,通過參考所有用戶的索引,可以確定用戶到會(huì)話服務(wù)器的分配,所有用戶的索引可以被存儲(chǔ)在所有的會(huì)話服務(wù)器或其子集中。例如,如果分配到會(huì)話服務(wù)器130-A的用戶138-A中的用戶Al將在線狀態(tài)從離線改變?yōu)樵诰€,則在被用戶Al使用的客戶端處的客戶端應(yīng)用向會(huì)話系統(tǒng)600發(fā)送聲明用戶Al 在線的消息。在會(huì)話服務(wù)器130-A處的狀態(tài)監(jiān)視器134-A接收該消息,并且將用戶Al的狀態(tài)更新為在線。其他會(huì)話服務(wù)器的狀態(tài)監(jiān)視器134或者不接收這個(gè)消息,或忽略它,因?yàn)橛脩鬉l未被分配到那些其他會(huì)話服務(wù)器。在會(huì)話服務(wù)器130-A處的狀態(tài)收集器136-A獲得用戶Al的聯(lián)系人的列表(例如,通過訪問用戶Al的聯(lián)系人列表416)。利用那個(gè)聯(lián)系人列表,狀態(tài)收集器136-A從該聯(lián)系人被分配到的會(huì)話服務(wù)器收集狀態(tài)信息。因此,如果聯(lián)系人被分配到會(huì)話服務(wù)器130-A,則狀態(tài)收集器136-A訪問在會(huì)話服務(wù)器130-A處存儲(chǔ)的聯(lián)系人的狀態(tài)信息。如果聯(lián)系人被分配到會(huì)話服務(wù)器130-B,則服務(wù)器130-A與會(huì)話服務(wù)器132-0 進(jìn)行通信,以獲得狀態(tài)信息。如果相應(yīng)的聯(lián)系人被分配到會(huì)話服務(wù)器130-C,則發(fā)生類似的過程。圖7是圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的會(huì)話服務(wù)器700(有時(shí)也稱為會(huì)話系統(tǒng)) 的框圖。會(huì)話服務(wù)器700包括一個(gè)或多個(gè)處理單元(CPU) 702、一個(gè)或多個(gè)網(wǎng)絡(luò)或其他通信接口 704、存儲(chǔ)器706和用于互連這些部件的一條或多條通信總線708。通信總線708可以包括互連系統(tǒng)部件并且控制其間的通信的電路(有時(shí)稱為芯片集)。會(huì)話服務(wù)器700可選地包括(但是通常不包括)具有顯示裝置和鍵盤的用戶接口。存儲(chǔ)器706包括高速隨機(jī)存取存儲(chǔ)器,諸如DRAM、SRAM、DDRRAM或其他隨機(jī)存取固態(tài)存儲(chǔ)器裝置;并且可以包括非易失性存儲(chǔ)器,諸如一個(gè)或多個(gè)磁盤存儲(chǔ)裝置、光盤存儲(chǔ)裝置、閃速存儲(chǔ)裝置或其他非易失性固態(tài)存儲(chǔ)裝置。存儲(chǔ)器706可以可選地包括遠(yuǎn)離CPU 702定位的一個(gè)或多個(gè)存儲(chǔ)裝置。存儲(chǔ)器706,或替代地在存儲(chǔ)器706內(nèi)的非易失性存儲(chǔ)器裝置,包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。在一些實(shí)施例中,存儲(chǔ)器706或存儲(chǔ)器706的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)下面的程序、模塊和數(shù)據(jù)結(jié)構(gòu)或其子集 操作系統(tǒng)710,其包括用于處理各種基本系統(tǒng)服務(wù)并且用于執(zhí)行硬件相關(guān)的任務(wù)的過程;·網(wǎng)絡(luò)通信模塊712,其用于將會(huì)話服務(wù)器700經(jīng)由一個(gè)或多個(gè)通信網(wǎng)絡(luò)接口 704 和一個(gè)或多個(gè)通信網(wǎng)絡(luò)連接到其他計(jì)算機(jī),該一個(gè)或多個(gè)通信網(wǎng)絡(luò)例如是因特網(wǎng)、其他廣域網(wǎng)、局域網(wǎng)和城域網(wǎng)等;以及 會(huì)話引擎714,其向多個(gè)用戶提供在服務(wù)器700上的托管的會(huì)話服務(wù);在一些實(shí)施例中,會(huì)話引擎714對(duì)應(yīng)于圖2的元件M6。會(huì)話引擎714可以包括下面的模塊或其子集 搜索/訪問模塊716(在一些實(shí)施例中,這對(duì)應(yīng)于圖2的元件沈0),用于執(zhí)行會(huì)話數(shù)據(jù)庫(kù)726的搜索;會(huì)話數(shù)據(jù)庫(kù)726的搜索可以包括用戶指定的搜索718以及服務(wù)器指定的搜索720 (例如,對(duì)于在用戶的收件箱中的會(huì)話的搜索); 用戶數(shù)據(jù)庫(kù)722 (在一些實(shí)施例中,這對(duì)應(yīng)于圖2的元件270和圖4的元件400), 用于存儲(chǔ)與系統(tǒng)的用戶相關(guān)的信息; 用戶數(shù)據(jù)庫(kù)管理模塊724,用于管理用戶數(shù)據(jù)庫(kù)722(例如,用于建立新的用戶記錄,并且用于更新現(xiàn)有的用戶記錄); 會(huì)話數(shù)據(jù)庫(kù)726(在一些實(shí)施例中,這對(duì)應(yīng)于圖2和圖3的元件沈2); 會(huì)話管理模塊728,用于管理會(huì)話數(shù)據(jù)庫(kù)726 ;以及 輔助服務(wù)模塊250 ;如上所述,可以通過在會(huì)話服務(wù)器700內(nèi)的模塊或其他服務(wù)器提供在托管的會(huì)話系統(tǒng)中提供的每一個(gè)特定的輔助服務(wù)。在一些實(shí)施例中,會(huì)話管理模塊7 包括下面的模塊或其子集 一組會(huì)話更新模塊730,用于使用由一個(gè)或多個(gè)參與者進(jìn)行的改變來更新會(huì)話, 該模塊包括下述中的一個(gè)或多個(gè)增加/刪除內(nèi)容模塊732,用于相對(duì)于會(huì)話增加或去除內(nèi)容;劃分內(nèi)容貢獻(xiàn)模塊734,用于將在會(huì)話中的內(nèi)容貢獻(xiàn)(圖3A中的326)劃分為兩個(gè)和更多的獨(dú)立內(nèi)容貢獻(xiàn);合作編輯模塊736,用于使能會(huì)話或由多個(gè)參與者的內(nèi)容貢獻(xiàn)(內(nèi)容單元)的同時(shí)編輯;以及向會(huì)話增加新參與者模塊738,用于向會(huì)話增加新的參與者;
內(nèi)容重放模塊740,用于重放對(duì)于會(huì)話或文檔(或會(huì)話或文檔的用戶指定部分) 的編輯;·內(nèi)容格式化模塊742,用于格式化內(nèi)容以匹配客戶端的配置;(用于相應(yīng)用戶的客戶端的配置可以通過用于相應(yīng)用戶的用戶記錄402的、圖4的元件420指定); 向電子郵件內(nèi)容發(fā)布模塊744,用于向電子郵件地址發(fā)布會(huì)話的內(nèi)容;電子郵件地址可以由用于相應(yīng)用戶的用戶記錄402的、圖4的元件432指定; 向網(wǎng)絡(luò)日志(“博客”)內(nèi)容發(fā)布模塊746,用于向網(wǎng)絡(luò)日志發(fā)布會(huì)話的內(nèi)容;網(wǎng)絡(luò)日志的URL或者網(wǎng)絡(luò)位置可以由用于相應(yīng)用戶的用戶記錄402的、圖4的元件430指定; 刪除/歸檔會(huì)話模塊748,用于從用戶的收件箱或會(huì)話觀看者刪除或歸檔會(huì)話; 向新的會(huì)話復(fù)制附件模塊750,用于從一個(gè)會(huì)話向另一個(gè)會(huì)話復(fù)制附件,而不復(fù)制會(huì)話的其他內(nèi)容; 發(fā)送會(huì)話模塊752,用于向客戶端或另一個(gè)會(huì)話服務(wù)器發(fā)送會(huì)話的內(nèi)容(例如, 以向由其他會(huì)話服務(wù)器服務(wù)的用戶/客戶端遞送);以及 發(fā)送會(huì)話列表模塊754,用于向客戶端或另一個(gè)會(huì)話服務(wù)器發(fā)送會(huì)話的列表 (例如,以向由其他會(huì)話服務(wù)器服務(wù)的用戶/客戶端遞送)。上面識(shí)別的元件中的每一個(gè)可以被存儲(chǔ)在前述存儲(chǔ)器裝置的一個(gè)或多個(gè)中,并且對(duì)應(yīng)于用于執(zhí)行如上所述的功能的一組指令。上面識(shí)別的模塊或程序(即,指令集)不必被實(shí)現(xiàn)為獨(dú)立的軟件程序、過程或模塊,因此,在各個(gè)實(shí)施例中,可以組合或重新布置這些模塊的各個(gè)子集。在一些實(shí)施例中,存儲(chǔ)器706可以存儲(chǔ)如上面識(shí)別的模塊和數(shù)據(jù)結(jié)構(gòu)的子集。而且,存儲(chǔ)器706可以存儲(chǔ)上面未描述的額外模塊和數(shù)據(jù)結(jié)構(gòu)。雖然圖7示出會(huì)話服務(wù)器,但是圖7更意欲是可以存在于一組服務(wù)器中的各種特征的功能說明,而不是在此所述的實(shí)施例的結(jié)構(gòu)示意。實(shí)際上,并且本領(lǐng)域內(nèi)的技術(shù)人員可以認(rèn)識(shí)到,獨(dú)立地示出的項(xiàng)目可以被組合,并且一些項(xiàng)目可以被分離。例如,在圖7中獨(dú)立地示出的一些項(xiàng)目可以被實(shí)現(xiàn)在單個(gè)服務(wù)器上,并且單個(gè)項(xiàng)目可以被一個(gè)或多個(gè)服務(wù)器實(shí)現(xiàn)。用于實(shí)現(xiàn)會(huì)話服務(wù)器系統(tǒng)的服務(wù)器的實(shí)際數(shù)量和如何在它們之間分配特征將隨實(shí)現(xiàn)方式而不同,并且,可以部分地依賴于在峰值使用時(shí)間段期間以及在平均使用時(shí)間段期間系統(tǒng)必須處理的數(shù)據(jù)業(yè)務(wù)量。圖8是根據(jù)本發(fā)明的某些實(shí)施例的具有參與在托管的會(huì)話系統(tǒng)中的一個(gè)或多個(gè)會(huì)話的用戶的客戶端的框圖??蛻舳?00包括一個(gè)或多個(gè)處理單元(CPU)802、一個(gè)或多個(gè)網(wǎng)絡(luò)或其他通信接口 804、存儲(chǔ)器806和用于互連這些部件的一條或多條通信總線808。通信總線808可以包括互連系統(tǒng)部件并且控制其間的通信的電路(有時(shí)稱為芯片集)。客戶端800通常包括用戶接口 805。在一些實(shí)施例中,用戶接口包括顯示裝置、鍵盤和指示裝置 (未示出),而在其他實(shí)施例(例如,蜂窩電話或個(gè)人數(shù)字助理)中,用戶接口包括觸摸屏顯
7J\ ο存儲(chǔ)器806包括高速隨機(jī)存取存儲(chǔ)器,諸如DRAM、SRAM、DDR RAM或其他隨機(jī)存取固態(tài)存儲(chǔ)器裝置;并且可以包括非易失性存儲(chǔ)器,諸如一個(gè)或多個(gè)磁盤存儲(chǔ)裝置、光盤存儲(chǔ)裝置、閃速存儲(chǔ)裝置或其他非易失性固態(tài)存儲(chǔ)裝置。存儲(chǔ)器806可以可選地包括遠(yuǎn)離CPU 802定位的一個(gè)或多個(gè)存儲(chǔ)裝置。存儲(chǔ)器806,或替代地在存儲(chǔ)器806內(nèi)的非易失性存儲(chǔ)器裝置,包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。在一些實(shí)施例中,存儲(chǔ)器806或存儲(chǔ)器806的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)下面的程序、模塊和數(shù)據(jù)結(jié)構(gòu)或其子集 操作系統(tǒng)810,其包括用于處理各種基本系統(tǒng)服務(wù)并且用于執(zhí)行硬件相關(guān)的任務(wù)的過程; 網(wǎng)絡(luò)通信模塊812,其用于將客戶端800經(jīng)由一個(gè)或多個(gè)通信網(wǎng)絡(luò)接口 804和一個(gè)或多個(gè)通信網(wǎng)絡(luò)連接到其他計(jì)算機(jī),該一個(gè)或多個(gè)通信網(wǎng)絡(luò)例如是因特網(wǎng)、其他廣域網(wǎng)、 局域網(wǎng)和城域網(wǎng)等;以及 瀏覽器或其他客戶端應(yīng)用814,用于觀看網(wǎng)頁(yè)和其他內(nèi)容(包括在托管的會(huì)話系統(tǒng)中的會(huì)話)并且與其交互; 會(huì)話網(wǎng)頁(yè)815,從會(huì)話服務(wù)器(例如,如圖7中所示)接收它,并且使用瀏覽器或其他客戶端應(yīng)用814來顯示它; 會(huì)話記錄820,其包含從會(huì)話服務(wù)器下載的會(huì)話的內(nèi)容,該會(huì)話的內(nèi)容的一些或全部可以被顯示在會(huì)話網(wǎng)頁(yè)815中; 會(huì)話列表826,它是從會(huì)話服務(wù)器下載的會(huì)話的列表(例如,響應(yīng)于來自客戶端的用戶的查詢或作為在會(huì)話網(wǎng)頁(yè)815內(nèi)顯示的用戶界面的一部分); 聯(lián)系人列表828或客戶端的用戶的聯(lián)系人列表的一部分;該聯(lián)系人列表可以與會(huì)話系統(tǒng)分離地或與其相結(jié)合地被維護(hù); 可選地,其他數(shù)據(jù)結(jié)構(gòu)830(例如,由用戶定義的標(biāo)簽的列表);以及 可選地,被客戶端800執(zhí)行的其他應(yīng)用832。在一些實(shí)施例中,會(huì)話網(wǎng)頁(yè)815包括客戶端會(huì)話模塊818或在網(wǎng)頁(yè)815中嵌入的其他客戶端助理??蛻舳藭?huì)話模塊818包括被客戶端800執(zhí)行的可執(zhí)行指令;例如,客戶端會(huì)話模塊818可以包括被作為瀏覽器814的一部分的虛擬機(jī)(例如,Java虛擬機(jī))執(zhí)行的指令。會(huì)話網(wǎng)頁(yè)815包括會(huì)話用戶界面,會(huì)話用戶界面具有圖標(biāo),該圖標(biāo)當(dāng)被用戶激活時(shí), 執(zhí)行各種任務(wù)以使得用戶能夠請(qǐng)求會(huì)話的列表、選擇要顯示的會(huì)話、觀看會(huì)話的各個(gè)部分、 參與會(huì)話(例如,通過向會(huì)話增加內(nèi)容或編輯會(huì)話的內(nèi)容)、開始新的會(huì)話和下載附件等。 在會(huì)話用戶界面中的圖標(biāo)可以作為指向可執(zhí)行過程的鏈接和在客戶端會(huì)話模塊818中的指令。在一些實(shí)施例中,可以響應(yīng)于由客戶端會(huì)話模塊818或在網(wǎng)頁(yè)815中嵌入的其他客戶端助理向會(huì)話服務(wù)器發(fā)送的指令來下載上述會(huì)話記錄820和會(huì)話列表826。會(huì)話記錄820包括關(guān)于相應(yīng)會(huì)話的、如上參考圖3A所述的會(huì)話記錄310的客戶端版本或子集。客戶端會(huì)話記錄820包括由客戶端需要的會(huì)話元數(shù)據(jù)822 (例如,參與者的列表和他們的在線狀態(tài))和作為會(huì)話的內(nèi)容的內(nèi)容貢獻(xiàn)824。根據(jù)客戶端800的實(shí)現(xiàn)方式和能力,會(huì)話記錄820可以可選地包括會(huì)話的附件——如果有的話。因此,可以向一些客戶端 (例如,臺(tái)式和膝上型計(jì)算機(jī))而不向其他(例如,移動(dòng)電話和個(gè)人數(shù)字助理)下載附件。 在一些實(shí)施例中,不下載會(huì)話的附件,直到用戶請(qǐng)求它們。替代地,在一些實(shí)施例中,將一些或所有附件的縮略圖和/或摘錄(例如,所選擇的文本,如果有的話)與會(huì)話的主內(nèi)容一起自動(dòng)地下載到客戶端800,并且,僅在用戶請(qǐng)求時(shí)向客戶端800下載附件的全部?jī)?nèi)容。上面識(shí)別的模塊的每一個(gè)對(duì)應(yīng)于用于執(zhí)行如上所述的功能的一組指令。上面識(shí)別的模塊或程序(即,指令集)不必被實(shí)現(xiàn)為獨(dú)立的軟件程序、過程或模塊,因此在各個(gè)實(shí)施例中,可以組合或重新布置這些模塊的各個(gè)子集。在一些實(shí)施例中,存儲(chǔ)器806或存儲(chǔ)器 806的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以存儲(chǔ)如上面識(shí)別的模塊和數(shù)據(jù)結(jié)構(gòu)的子集。而且,存儲(chǔ)器806或存儲(chǔ)器806的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以存儲(chǔ)上面未描述的額外模塊和數(shù)據(jù)結(jié)構(gòu)。圖9A和9B圖示用于示出由會(huì)話的多個(gè)參與者對(duì)于會(huì)話的編輯和那些編輯的重放的一系列窗口。圖9A圖示由在會(huì)話中的多個(gè)參與者對(duì)于會(huì)話進(jìn)行的改變。在下面的示例中,在會(huì)話中至少有兩個(gè)參與者“Joe”和“Pat”。在第一時(shí)間/步驟920,第一會(huì)話窗口 910具有第一參與者(例如,Joe)輸入的第一內(nèi)容單元922,第一參與者是內(nèi)容922的初始作者。在一些實(shí)施例中,會(huì)話窗口 910包括縮放(zoom)選項(xiàng)912,用于向會(huì)話內(nèi)更深地縮放;答復(fù)(Mply)選項(xiàng)914,用于答復(fù)內(nèi)容922;起草(draft)選項(xiàng)916,用于創(chuàng)建起草消息;或設(shè)置(setting)選項(xiàng)918,用于改變會(huì)話設(shè)置。第一插入符號(hào)擬4表示第一參與者鍵入或編輯內(nèi)容922的點(diǎn)(在此有時(shí)被稱為光標(biāo)位置)。當(dāng)?shù)谝粎⑴c者鍵入內(nèi)容922、刪除內(nèi)容922或在內(nèi)容922周圍移動(dòng)時(shí),插入符號(hào)擬4移動(dòng),用于指示在用戶正在編輯的內(nèi)容中的位置或內(nèi)容的一部分。在一些實(shí)施例中,可以將插入符號(hào)定義為XML標(biāo)簽或其他標(biāo)記語(yǔ)言標(biāo)簽或表達(dá)。 在一些實(shí)施例中,參與者、系統(tǒng)管理員等可以選擇或定義插入符號(hào)內(nèi)容、風(fēng)格等。在第二時(shí)間/步驟930,第二參與者(Pat)向內(nèi)容922提供編輯的序列。第二插入符號(hào)934表示第二參與者(也稱為第二用戶)鍵入或編輯內(nèi)容922的點(diǎn)。第二用戶向內(nèi)容922加上文本“建筑物B”932。原始內(nèi)容(通過Joe)和對(duì)于其的編輯(通過I^t)是通過在會(huì)話中不同的第一和第二參與者進(jìn)行的編輯。在一些實(shí)施例中,服務(wù)器(例如,用于托管會(huì)話)準(zhǔn)備在與由會(huì)話的第一參與者 (Joe)進(jìn)行的第一編輯對(duì)應(yīng)的位置處顯示第一插入符號(hào),并且在與由會(huì)話的第二參與者 (Pat)進(jìn)行的第二編輯對(duì)應(yīng)的位置處顯示第二插入符號(hào)。服務(wù)器向一個(gè)或多個(gè)服務(wù)器提供第一和第二編輯和第一和第二插入符號(hào)以顯示。在一些實(shí)施例中,時(shí)間戳或序列號(hào)(例如,#1、#2、#3和#4,如所示)可以與對(duì)于現(xiàn)有內(nèi)容的新的內(nèi)容或編輯相關(guān)聯(lián)。在一些實(shí)施例中,如果使用時(shí)間戳,則時(shí)間戳使用一致的時(shí)基,諸如托管服務(wù)器的時(shí)基。在第三時(shí)間/步驟940,第二用戶通過下述方式再一次編輯內(nèi)容922 刪除詞 “second”并且將其替換為詞“third”942。第二插入符號(hào)934現(xiàn)在在詞“third”旁邊,用于指示第二用戶正在進(jìn)行編輯的位置。在第四時(shí)間/步驟950,第一用戶Joe在會(huì)話窗口 910內(nèi)并且第一消息窗口(其包含第一消息的內(nèi)容922)之下的新的消息窗口 952中創(chuàng)建新的消息,并且向新的消息窗口增加新的內(nèi)容954。插入符號(hào)956表示第一用戶(Joe)在新的消息窗口 952中鍵入或編輯內(nèi)容954的新點(diǎn)。在一些實(shí)施例中,當(dāng)接收到新內(nèi)容(例如,內(nèi)容922)或編輯的序列(例如,編輯 932,942)時(shí),使用修訂的內(nèi)容單元來更新會(huì)話。在一些實(shí)施例中,向用于托管用于在會(huì)話中的參與者(例如,Joe、Pat等)的會(huì)話的一個(gè)或多個(gè)服務(wù)器提供更新的會(huì)話。在一些實(shí)施例中,用于托管會(huì)話的服務(wù)器檢查在第一編輯和第二編輯之間的沖突,并且如果發(fā)生沖突,則服務(wù)器通知與該沖突相關(guān)聯(lián)的參與者。例如,如果參與者Pat試圖編輯Joe當(dāng)前正在編輯的文本片段,使得編輯彼此沖突(例如,當(dāng)Joe鍵入一個(gè)詞時(shí)Pat 刪除它,或Joe刪除其中Pat正在編輯的段落),則發(fā)生沖突,并且通知參與者中的一個(gè)或兩者。在一些實(shí)施例中,使用預(yù)定義的并發(fā)控制過程來自動(dòng)地解決沖突,如下更詳細(xì)所述。圖9B圖示在圖9A中圖示的對(duì)于會(huì)話的編輯的重放。在一些實(shí)施例中,以時(shí)間順序,例如根據(jù)與編輯相關(guān)聯(lián)的時(shí)間戳來重放編輯。在一些其他實(shí)施例中,根據(jù)與編輯相關(guān)聯(lián)的序列號(hào)來重放編輯。會(huì)話的參與者可以使用重放機(jī)制來觀看對(duì)于會(huì)話的改變。在一些實(shí)施例中,重放會(huì)話,以時(shí)間順序示出在會(huì)話的用戶指定部分(例如,文本塊、段落、單個(gè)會(huì)話單元(評(píng)論)等)內(nèi)的改變。在一些實(shí)施例中,重放會(huì)話的該用戶指定的部分,而不觀看對(duì)于會(huì)話的其他部分的改變。在一個(gè)示例中,用戶指定的部分是會(huì)話的單個(gè)內(nèi)容單元。在第一重放時(shí)間/步驟中,在窗口 964中顯示內(nèi)容966。顯示向前(forward)選項(xiàng) 962,其允許觀眾在會(huì)話重放中前行。在第二重放時(shí)間/步驟中,通過在窗口 964中選擇向前選項(xiàng)962而獲得的內(nèi)容970 示出由第二參與者O^at)對(duì)于會(huì)話進(jìn)行的編輯,增加了詞“Building B”。顯示向后(back) 選項(xiàng)972,其允許參與者在會(huì)話重放中向后移動(dòng),并且繼續(xù)顯示向前選項(xiàng)962。在第三重放時(shí)間/步驟中,通過在觀看第二重放時(shí)間/步驟的同時(shí)在窗口 964中選擇向前選項(xiàng)962而獲得的內(nèi)容980示出由第二參與者(I^t)對(duì)于會(huì)話的進(jìn)一步的編輯, 將詞 “second” 替換為 “third”。在第四重放時(shí)間/步驟中,通過在觀看第三重放時(shí)間/步驟的同時(shí)在窗口 964中選擇向前選項(xiàng)962而獲得的內(nèi)容990示出由第一參與者(Joe)對(duì)于會(huì)話的進(jìn)一步的編輯 (具有文本的新的窗口 99 。重放(i^play)選項(xiàng)994允許參與者重放對(duì)于會(huì)話的更新的序列。在一些實(shí)施例中,一個(gè)或多個(gè)重放選項(xiàng)使得參與者能夠執(zhí)行下面的操作中的一個(gè)或多個(gè)重放最近的編輯(例如,在時(shí)間或在數(shù)字上的最近)、由特定參與者進(jìn)行的編輯、對(duì)于會(huì)話的特定部分的編輯等。在一些實(shí)施例中,重放可以僅示出由會(huì)話的特定參與者進(jìn)行的改變。這可以允許參與者查看他的/她的改變或查看另一個(gè)參與者的改變。在一些實(shí)施例中,在編輯序列中的編輯包括由在會(huì)話中的相應(yīng)參與者進(jìn)行鍵擊序列的單獨(dú)鍵擊。在一些實(shí)施例中,在編輯序列中的多個(gè)不同的編輯是不同的鍵擊。在一些實(shí)施例中,在編輯序列中的多個(gè)不同的編輯是不同的詞。例如,由參與者Pat進(jìn)行的編輯932包括不同的詞(Building)和不同的字母(B),并且編輯942包括刪除操作(刪除詞 "second")和增加操作(增加詞“third”)。在一些實(shí)施例中,當(dāng)用于托管會(huì)話的服務(wù)器接收到這些不同的編輯中的每一個(gè)時(shí),相應(yīng)更新會(huì)話。圖10圖示參與者在起草模式中準(zhǔn)備消息。雖然在起草模式中,參與者進(jìn)行編輯, 諸如在會(huì)話中增加或刪除內(nèi)容,并且該編輯被用于托管會(huì)話的服務(wù)器接收,但是不被發(fā)送到在會(huì)話中的其他參與者。僅當(dāng)參與者例如通過指示他/她結(jié)束進(jìn)行編輯來退出起草模式時(shí),服務(wù)器釋放參與者的編輯(即,向其他參與者的客戶端發(fā)送),使得其他參與者可以觀看它們。作者(即,在起草模式中工作的參與者)可以準(zhǔn)備內(nèi)容,知道中間改變或想法不被其他參與者看到,直到作者準(zhǔn)備好。在一些實(shí)施例中,當(dāng)一個(gè)參與者在起草模式中正在編輯(會(huì)話的)內(nèi)容單元時(shí),禁止由其他參與者進(jìn)行對(duì)該內(nèi)容單元的編輯。不禁止由其他參與者對(duì)同一會(huì)話的其他內(nèi)容單元的編輯。
在一些實(shí)施例中,“組起草模式”允許多個(gè)參與者(例如,組A的成員)一起工作來準(zhǔn)備或編輯內(nèi)容,并且看到彼此的編輯,同時(shí)防止非組參與者看到內(nèi)容或編輯,直到退出組起草模式。當(dāng)組成員一起工作來準(zhǔn)備要向在會(huì)話中的其他參與者發(fā)布的內(nèi)容時(shí),使用組起草模式保護(hù)組成員的隱私。多種不同的機(jī)制可以用于退出組起草模式或釋放由參與者的組準(zhǔn)備的內(nèi)容。例如,當(dāng)組成員同意應(yīng)當(dāng)發(fā)布編輯時(shí),可以退出組起草模式(或可以釋放由相應(yīng)的組準(zhǔn)備的內(nèi)容以向其他會(huì)話參與者發(fā)布)。在一些實(shí)施例中,為了退出組起草模式,所有的組成員必須同意發(fā)布編輯或內(nèi)容,而在一些其他實(shí)施例中,大多數(shù)組成員必須同意發(fā)布編輯或內(nèi)容, 并且在另一些實(shí)施例中,一個(gè)或多個(gè)資深組成員確定何時(shí)發(fā)布編輯或內(nèi)容。在組起草模式中,當(dāng)會(huì)話的相應(yīng)參與者對(duì)會(huì)話進(jìn)行編輯時(shí),向與組成員相關(guān)聯(lián)的服務(wù)器提供更新的會(huì)話。在一些實(shí)施例中,對(duì)會(huì)話的編輯被提供到與非組成員相關(guān)聯(lián)的服務(wù)器,但是延遲編輯的顯示。在一些實(shí)施例中,不向與非組成員相關(guān)聯(lián)的服務(wù)器提供對(duì)會(huì)話的編輯,直到結(jié)束起草模式。而且,在“組”起草模式中,接收來自參與者(作者)和一個(gè)或多個(gè)組成員的對(duì)會(huì)話的編輯,更新會(huì)話,并且向與相應(yīng)的參與者和其他組成員相關(guān)聯(lián)的一個(gè)或多個(gè)服務(wù)器提供更新的會(huì)話。在第一時(shí)間/步驟1010中,第一作者/參與者(例如,作為組A(Team Α)的成員的 Joe)在窗口 1012中準(zhǔn)備消息。批準(zhǔn)(approval)選項(xiàng)1014 (例如,使用用于批準(zhǔn)(approved) 的勾號(hào)和用于不批準(zhǔn)(not approved)的叉號(hào)1016)示出第一作者還沒有批準(zhǔn)消息。當(dāng)?shù)谝粎⑴c者批準(zhǔn)消息時(shí),這可以被表示為在選項(xiàng)1014中的勾號(hào)1033。第一作者輸入內(nèi)容1011, 并且插入符號(hào)1018指示在內(nèi)容中的第一作者的當(dāng)前文本輸入或編輯位置。在一些操作模式中,當(dāng)?shù)谝蛔髡咻斎雰?nèi)容1011時(shí),使得該內(nèi)容可被與第一用戶同一組的成員看到。在第二時(shí)間/步驟1020中,第二參與者(也作為組A (Team Α)的成員的I^t)編輯內(nèi)容1011(在這個(gè)示例中,將"$100〃改變?yōu)椤?$110"),以產(chǎn)生更新的內(nèi)容1021。第二插入符號(hào)10 示出在內(nèi)容中的第二參與者的文本輸入或編輯位置。與第二參與者相關(guān)聯(lián)的批準(zhǔn)選項(xiàng)1022被顯示在窗口 1012的頂部,并且象與第一參與者相關(guān)聯(lián)的批準(zhǔn)選項(xiàng)1014 那樣起作用,如上所述。當(dāng)?shù)诙⑴c者編輯內(nèi)容時(shí),使得更新的內(nèi)容1021可被同一組的成員看到。在第三時(shí)間/步驟1030中,第一(Joe)和第二(I^t)參與者批準(zhǔn)消息發(fā)布。這通過與批準(zhǔn)選項(xiàng)1014(用于第一參與者Joe)和1022(用于第二參與者I^t)相關(guān)聯(lián)的勾號(hào) 1033指示。然后,將批準(zhǔn)的內(nèi)容(1031)向在會(huì)話中的其他參與者發(fā)布。在第四時(shí)間/步驟1040中,由第一和第二參與者進(jìn)行的編輯被發(fā)布,使得在組A 之外的會(huì)話參與者(例如,組B的成員)現(xiàn)在可以觀看發(fā)布的內(nèi)容1041。在圖10中所示的示例中,所有的基于組的起草和編輯在用于一個(gè)內(nèi)容單元的一個(gè)消息窗口 1012中出現(xiàn)。在其他實(shí)施例中,基于個(gè)體或組的起草可以出現(xiàn)在多于一個(gè)窗口或內(nèi)容單元中,并且可以包括增加新的消息或編輯現(xiàn)有的消息。圖1IA-B是表示根據(jù)本發(fā)明的某些實(shí)施例的、用于編輯、重放和起草在服務(wù)器托管的會(huì)話的方法的流程圖。這些方法被在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)并且由一個(gè)或多個(gè)服務(wù)器的一個(gè)或多個(gè)處理器執(zhí)行的指令控制,如所述。
圖IlA示出用于在服務(wù)器(例如,在圖2的托管的會(huì)話數(shù)據(jù)庫(kù)262中)處托管會(huì)話的方法1100。服務(wù)器托管(110 多個(gè)會(huì)話,每一個(gè)會(huì)話具有被識(shí)別的一組參與者。服務(wù)器從在會(huì)話中的相應(yīng)的參與者接收(1104)內(nèi)容單元(例如,在圖3A中的被存儲(chǔ)為內(nèi)容貢獻(xiàn)326的每一個(gè)內(nèi)容單元),并且向托管在會(huì)話中的參與者的會(huì)話的一個(gè)或多個(gè)服務(wù)器發(fā)送所接收的內(nèi)容單元的至少部分??蛇x地,當(dāng)作者編寫內(nèi)容單元的內(nèi)容時(shí),從由內(nèi)容單元的作者使用的客戶端向其他參與者發(fā)送各鍵擊(1106)。服務(wù)器從除了會(huì)話的相應(yīng)內(nèi)容單元的初始作者之外的至少一個(gè)參與者接收 (1108)對(duì)該相應(yīng)內(nèi)容單元的、包括第一編輯和第二編輯的編輯的序列,以產(chǎn)生修訂的內(nèi)容單元??蛇x地,對(duì)內(nèi)容單元的第一和第二編輯是由在會(huì)話中的不同的第一和第二參與者進(jìn)行的編輯(1110)??蛇x地,或在一些操作模式中,在從會(huì)話的第一參與者接收對(duì)內(nèi)容單元的編輯時(shí), 禁止由在會(huì)話中的其他參與者進(jìn)行對(duì)相應(yīng)內(nèi)容單元的編輯(111 。替代地,使能由在會(huì)話中的多于一個(gè)參與者進(jìn)行的同時(shí)編輯(1113)。如下更詳細(xì)所述,解決在不同的參與者進(jìn)行的同時(shí)編輯之間的任何沖突,并且向所有的會(huì)話參與者發(fā)布(或使得其可獲得)結(jié)果產(chǎn)生的一致的內(nèi)容。在一些實(shí)施例中,準(zhǔn)備第一插入符號(hào)(例如,在圖9A中的用于識(shí)別Joe的插入符號(hào)924)以在與由會(huì)話的第一參與者進(jìn)行的第一編輯對(duì)應(yīng)的位置處顯示(1114),以及準(zhǔn)備第二插入符號(hào)(例如,用于識(shí)別Pat的插入符號(hào)934)以在與由會(huì)話的第二參與者進(jìn)行的第二編輯對(duì)應(yīng)的位置處顯示,并且向一個(gè)或多個(gè)服務(wù)器提供第一和第二編輯與第一和第二插入符號(hào)(或插入符號(hào)位置)。在會(huì)話中的活動(dòng)的參與者(例如,其客戶端當(dāng)前正在顯示會(huì)話的參與者)可以看到與內(nèi)容單元的并發(fā)作者/編輯者相關(guān)聯(lián)的插入符號(hào)。在一些實(shí)施例中,在編輯的序列中的多個(gè)編輯包括不同的鍵擊(1116)。在這些實(shí)施例中,當(dāng)對(duì)會(huì)話的更新/編輯的作者輸入那些更新/編輯時(shí),由在會(huì)話中的活動(dòng)的參與者使用的客戶端基本上同時(shí)地顯示對(duì)會(huì)話的更新/編輯。在一些實(shí)施例中,在編輯的序列中的多個(gè)編輯包括不同的詞(1118)。在這些實(shí)施例中,當(dāng)對(duì)會(huì)話的更新/編輯的作者輸入那些更新/編輯時(shí),由在會(huì)話中的活動(dòng)參與者使用的客戶端基本上同時(shí)地逐詞地顯示更新/編輯。對(duì)于在對(duì)內(nèi)容單元的編輯序列中的每一個(gè)不同的編輯存儲(chǔ)相應(yīng)的時(shí)間戳或序列號(hào)(1120),包括用于對(duì)內(nèi)容單元的至少第一和第二編輯的不同的時(shí)間戳或序列號(hào)。使用修訂的內(nèi)容單元來更新(122 會(huì)話,并且自動(dòng)地向托管用于在會(huì)話中的參與者的會(huì)話的一個(gè)或多個(gè)服務(wù)器提供更新的會(huì)話。圖IlB繼續(xù)用于在服務(wù)器托管會(huì)話的方法1100,如圖IlA中所示。在一些實(shí)施例中,對(duì)于在會(huì)話中的每一個(gè)內(nèi)容單元存儲(chǔ)(1130)時(shí)間戳(例如,由圖9A的920、930、940、950等指示并且在圖3B的時(shí)間戳341中存儲(chǔ)的時(shí)間戳1、2、3、4)。向會(huì)話的相應(yīng)參與者發(fā)送(113 表示編輯的序列的數(shù)據(jù),因此使得相應(yīng)的參與者能夠根據(jù)編輯的序列來觀看對(duì)會(huì)話的改變。在一些實(shí)施例或操作模式中,允許相應(yīng)的參與者以時(shí)間順序觀看(1134)對(duì)會(huì)話 (或會(huì)話的用戶指定部分)的改變,例如,即使該改變?cè)跁?huì)話中彼此隔開。換句話說,在一些操作模式中,在客戶端應(yīng)用中的重放功能以時(shí)間順序顯示對(duì)會(huì)話的改變的序列。例如,在圖9B中,重放會(huì)話以示出作為由在會(huì)話中的參與者增加和編輯內(nèi)容的結(jié)果的對(duì)會(huì)話的改變。在一些實(shí)施例或操作模式中,允許相應(yīng)的參與者例如使用向后972和向前974按鈕導(dǎo)航通過在會(huì)話中的改變來以時(shí)間順序來觀看(1136)在會(huì)話的邏輯部分中的改變的序列。換句話說,在一些操作模式中,在客戶端應(yīng)用中的重放功能以時(shí)間順序來顯示在會(huì)話的邏輯部分中的改變的序列。這允許參與者看到在會(huì)話中的感興趣的特定部分中的改變的序列,而不看到在不相關(guān)的部分中的改變。例如,其改變被顯示的會(huì)話的邏輯部分可以是會(huì)話的單個(gè)內(nèi)容單元(1138)。替代地,其改變被示出(當(dāng)使用重放功能時(shí))的會(huì)話的邏輯部分是會(huì)話的多個(gè)用戶選擇的內(nèi)容單元。在一些實(shí)施例中,允許會(huì)話的相應(yīng)的參與者觀看(1140)由會(huì)話的另一個(gè)相應(yīng)參與者對(duì)會(huì)話的改變,以例如如圖9A中所示觀看由第一參與者Joe或第二參與者Pat進(jìn)行的所有改變。在一些實(shí)施例中,服務(wù)器延遲(114 提供由在起草模式中操作的相應(yīng)的參與者對(duì)會(huì)話的編輯,并且向其他參與者(例如,向托管其他參與者的會(huì)話的服務(wù)器,并且向由那些其他參與者使用的客戶端)提供更新的會(huì)話,直到相應(yīng)的參與者退出起草模式或釋放他 /她已經(jīng)進(jìn)行的會(huì)話編輯/更新。例如,不向組B提供圖10的編輯1011、1021,直到在組A 的成員(JoeAat)批準(zhǔn)編輯,并且結(jié)束起草模式。在一些實(shí)施例中,在用于會(huì)話的參與者會(huì)話狀態(tài)372(圖3B)中存儲(chǔ)起草模式信息或起草批準(zhǔn)信息或狀態(tài)。在一些實(shí)施例中,當(dāng)相應(yīng)的參與者(其是組成員)使用組起草模式來對(duì)會(huì)話進(jìn)行編輯時(shí),服務(wù)器向與另一個(gè)組成員相關(guān)聯(lián)的服務(wù)器提供(1144)更新的會(huì)話(例如,Joe可以看到Pat的編輯,并且反之亦然),并且延遲向與非組成員相關(guān)聯(lián)的服務(wù)器提供由相應(yīng)的參與者對(duì)會(huì)話進(jìn)行的編輯(例如,在起草模式期間組B不能看到組A的編輯)。在結(jié)束起草模式后,服務(wù)器向與非組成員相關(guān)聯(lián)的服務(wù)器提供包括由相應(yīng)的參與者對(duì)會(huì)話進(jìn)行的編輯的更新的會(huì)話。替代地,在起草模式期間進(jìn)行的會(huì)話編輯被同時(shí)提供到與所有的會(huì)話參與者相關(guān)聯(lián)的服務(wù)器,但是改變被標(biāo)注為起草模式改變,因此不被提供到在進(jìn)行改變的參與者的組之外的參與者,直到退出起草模式或(例如,由參與者或由參與者的組)批準(zhǔn)或釋放會(huì)話更新。在一些實(shí)施例中,當(dāng)在第一會(huì)話中的一組參與者啟動(dòng)在組起草模式中的會(huì)話的編輯時(shí),創(chuàng)建獨(dú)立的會(huì)話。組成員起草在獨(dú)立的會(huì)話內(nèi)的內(nèi)容,并且當(dāng)組結(jié)束起草時(shí),獨(dú)立的會(huì)話或其一部分被合并回第一會(huì)話內(nèi),在這個(gè)點(diǎn),使得新的或編輯的內(nèi)容可被在第一會(huì)話中的其他參與者獲得。并發(fā)控制上述的合作編輯模塊736(圖7)允許多個(gè)參與者(客戶端)同時(shí)編輯會(huì)話,并且提供沖突檢測(cè)和解決方案以確定參與者的編輯是否沖突(即,滿足預(yù)定義的傳統(tǒng)標(biāo)準(zhǔn))。在相應(yīng)的客戶端處,用戶使用“樂觀用戶界面”輸入和編輯會(huì)話內(nèi)容,該“樂觀用戶界面”假定在由客戶端裝置的用戶和同一會(huì)話中的其他參與者進(jìn)行的內(nèi)容輸入和編輯之間沒有沖突, 直到由向客戶端提供會(huì)話托管服務(wù)的會(huì)話服務(wù)器告知有沖突。參見圖15,在會(huì)話中的一個(gè)或多個(gè)參與者在它們的本地客戶端對(duì)會(huì)話進(jìn)行編輯 (1510),該本地客戶端向會(huì)話服務(wù)器提供用戶編輯(151 ,該會(huì)話服務(wù)器向客戶端提供會(huì)話服務(wù)。在會(huì)話服務(wù)器系統(tǒng)處接收由每一個(gè)參與者進(jìn)行的用戶編輯(1520)。
當(dāng)兩個(gè)(或更多)會(huì)話參與者(在此為了容易識(shí)別稱為“競(jìng)爭(zhēng)參與者”,這與當(dāng)前未對(duì)會(huì)話進(jìn)行沖突的編輯的任何其他參與者相對(duì))進(jìn)行沖突的改變(編輯)時(shí),沖突的編輯滿足預(yù)定義的沖突標(biāo)準(zhǔn),并且對(duì)由競(jìng)爭(zhēng)的參與者進(jìn)行的編輯執(zhí)行變換操作,使得在每一個(gè)客戶端上的會(huì)話的狀態(tài)是一致的。換句話說,響應(yīng)于競(jìng)爭(zhēng)參與者已經(jīng)進(jìn)行了沖突的編輯(即,滿足預(yù)定義的沖突標(biāo)準(zhǔn)的編輯)的確定來執(zhí)行變換操作。而且,會(huì)話服務(wù)器通過下述方式來減少它需要執(zhí)行的變換操作的數(shù)量將在每一個(gè)客戶端進(jìn)行的編輯的序列合并為編輯的合并序列(1522),然后對(duì)由競(jìng)爭(zhēng)的參與者進(jìn)行的編輯的合并序列執(zhí)行變換操作 (1524)。結(jié)果產(chǎn)生的編輯的變換序列中的至少一個(gè)與其得自于的編輯的對(duì)應(yīng)的合并序列不同。編輯的相應(yīng)的變換序列與序列信息(15M,1534)被發(fā)送到競(jìng)爭(zhēng)參與者的客戶端(和任何其他活動(dòng)參與者),以使得每一個(gè)客戶端能夠應(yīng)用本地進(jìn)行的編輯和以正確的順序接收的編輯的變換序列,以便再現(xiàn)會(huì)話的正確的當(dāng)前狀態(tài)(1536)。當(dāng)兩個(gè)(或更多)會(huì)話參與者進(jìn)行非沖突改變(編輯)時(shí),會(huì)話服務(wù)器仍然將在每一個(gè)客戶端進(jìn)行的編輯的序列合并為編輯的合并序列(1522)。編輯的每一個(gè)合并的序列被分配時(shí)間戳和/或序列號(hào)(參見圖3A的會(huì)話日志324的上面的說明),并且被發(fā)送到會(huì)話參與者的客戶端(1522,1530),使得所有的參與者具有會(huì)話狀態(tài)的一致記錄。相應(yīng)的客戶端應(yīng)用所接收的合并編輯序列以更新本地存儲(chǔ)的會(huì)話狀態(tài)(1532)。在其正在顯示會(huì)話的每一個(gè)客戶端根據(jù)本地進(jìn)行的編輯和從會(huì)話服務(wù)器接收的其他參與者的編輯的合并的序列來更新其會(huì)話的顯示(1538)。在客戶端需要特殊處理的特殊情況如下。如果在客戶端接收到編輯的變換序列時(shí),使用客戶端的參與者已經(jīng)進(jìn)行了與在所接收的編輯的變換序列中記錄的改變沖突或潛在沖突的另外的改變,則客戶端對(duì)所接收的編輯序列執(zhí)行第二變換,當(dāng)服務(wù)器接收到在客戶端作出的另外的改變時(shí)在服務(wù)器預(yù)期要對(duì)所接收的編輯序列進(jìn)行變換。作為對(duì)所接收的編輯序列的第二變換和由服務(wù)器對(duì)在客戶端進(jìn)行的編輯應(yīng)用的變換的結(jié)果,使得會(huì)話狀態(tài)在參與的用戶的客戶端上和在托管服務(wù)器上一致。換句話說,客戶端中的每一個(gè)包括要被應(yīng)用到所接收的在其他客戶端進(jìn)行的編輯的操作變換指令,該操作變換指令考慮將由服務(wù)器對(duì)在那些客戶端操作進(jìn)行的編輯執(zhí)行的變換。會(huì)話在沿著路徑的每一個(gè)步驟的狀態(tài)通過對(duì)應(yīng)的序列號(hào)表示,該對(duì)應(yīng)的序列號(hào)被客戶端和會(huì)話托管服務(wù)器使用來保證在客戶端和服務(wù)器處進(jìn)行的變換被協(xié)同或同步,并且產(chǎn)生一致的會(huì)話狀態(tài)(1536)。注意,在繼續(xù)的基礎(chǔ)上向會(huì)話服務(wù)器發(fā)送本地進(jìn)行的編輯(151 ,因此,在所接收的編輯的變換的序列后進(jìn)行的編輯也被發(fā)送到會(huì)話服務(wù)器,并且產(chǎn)生合并的編輯序列和產(chǎn)生變換的編輯序列(如果需要)的處理繼續(xù)。結(jié)果,在每一個(gè)客戶端處的會(huì)話的狀態(tài)反映了由活動(dòng)的參與者進(jìn)行的編輯的交織序列,其中,編輯的序列的一些是已經(jīng)被變換使得在由會(huì)話參與者使用的每一個(gè)客戶端處實(shí)現(xiàn)一致狀態(tài)的變換序列。如上所述,在一些實(shí)施例中,在托管會(huì)話的會(huì)話服務(wù)器系統(tǒng)130和當(dāng)必要時(shí)由接收與在客戶端進(jìn)行的干擾編輯沖突的變換編輯的那些客戶端執(zhí)行會(huì)話的并發(fā)控制操作。被合并到合并的編輯序列(1522)內(nèi)的編輯的數(shù)量至少部分地依賴于參與者輸入編輯的速率??赡苡绊懕缓喜⒌木庉嫷臄?shù)量的另一個(gè)因素是其他參與者是否同時(shí)在編輯同一內(nèi)容。例如,當(dāng)沒有由其他參與者進(jìn)行的競(jìng)爭(zhēng)編輯時(shí),可以合并相對(duì)長(zhǎng)的編輯序列。然而, 當(dāng)其他參與者正在進(jìn)行競(jìng)爭(zhēng)編輯時(shí),合并相對(duì)短的編輯序列(例如,限于在N秒的時(shí)間段中進(jìn)行的編輯,其中,N通常小于或等于0.5)。在其他實(shí)施例中,參與者進(jìn)行的編輯(包括內(nèi)容輸入以及先前輸入的內(nèi)容的修訂和對(duì)共享的元數(shù)據(jù)的改變)被立即發(fā)送到在會(huì)話中的其他活動(dòng)參與者——如果有的話,而不執(zhí)行任何合并。當(dāng)檢測(cè)到?jīng)_突時(shí),對(duì)于每一個(gè)單獨(dú)的編輯操作(在托管會(huì)話服務(wù)器或在另一個(gè)服務(wù)器處)產(chǎn)生變換,然后將其轉(zhuǎn)發(fā)到其他活動(dòng)的參與者。如上所述,當(dāng)自與會(huì)話狀態(tài)序列號(hào)對(duì)應(yīng)的時(shí)間起所接收的變換的編輯與在本地客戶端進(jìn)行的編輯沖突時(shí),在接收客戶端處執(zhí)行對(duì)相應(yīng)的接收的變換編輯進(jìn)行的第二級(jí)變換。為了將被定義為在編輯輸入和其在其他參與者的客戶端處的出現(xiàn)之間的延遲的時(shí)延保持得低,由參與者進(jìn)行的編輯通常盡可能快地被發(fā)送到其他活動(dòng)參與者,而與編輯序列合并無關(guān)。在“實(shí)況沖突(live conflict) ”期間(當(dāng)兩個(gè)或更多的參與者正在修訂會(huì)話的相同部分時(shí))的編輯的快速變換和轉(zhuǎn)發(fā)使得向參與者精確地通知在實(shí)況沖突期間的演進(jìn)的會(huì)話狀態(tài)。因?yàn)楹喜⒉僮骱腿缓髮⑺鼈冏儞Q到活動(dòng)的參與者將增加時(shí)延,所以在實(shí)況沖突期間,或者不使用操作合并,或?qū)⒉僮骱喜H用于很小的時(shí)間窗口。另一方面,為了在會(huì)話日志324(圖3C)中記錄會(huì)話歷史以重放,合并在短時(shí)間段中執(zhí)行的操作的序列。如上所述,會(huì)話日志記錄385可以包括當(dāng)多于一個(gè)作者同時(shí)或在重疊的時(shí)間期間正在編輯同一會(huì)話時(shí)用于識(shí)別對(duì)會(huì)話狀態(tài)的改變的多個(gè)作者的作者列表390。而且,當(dāng)在參與者之間沒有沖突時(shí),從編輯序列的開始直到用戶選擇了“完成”圖標(biāo)或按鈕的由參與者進(jìn)行的編輯的整個(gè)序列被合并為單個(gè)編輯序列以存儲(chǔ)在單個(gè)會(huì)話日志記錄385(圖3C)中。圖12圖示過程圖,該過程圖示出在從兩個(gè)參與者接收的多個(gè)潛在沖突的編輯之間的并發(fā)控制的應(yīng)用。在圖12中所示的示例示出包括XML標(biāo)簽和內(nèi)容的ASCII文本的變換操作。在第一參與者(客戶端)和第二參與者(客戶端)處執(zhí)行操作。從會(huì)話的第一參與者接收對(duì)會(huì)話的相應(yīng)內(nèi)容單元的編輯的第一序列,并且將編輯的第一序列轉(zhuǎn)換為編輯的第一合并序列(1212)。從會(huì)話的第二參與者接收對(duì)會(huì)話的相應(yīng)內(nèi)容單元的編輯的第二序列,并且將編輯的第二序列轉(zhuǎn)換為編輯的第二合并序列(1216)。編輯的第一合并序列(121 被變換以產(chǎn)生編輯的第一變換序列(1232),并且編輯的第二合并序列被變換以產(chǎn)生編輯的第二變換序列(122 。編輯的第一變換序列 (1232)被發(fā)送到第二參與者,并且編輯的第二變換序列(122 被發(fā)送到第一參與者。在第一客戶端,第一合并序列(121 被應(yīng)用到初始會(huì)話狀態(tài)D1,以產(chǎn)生中間會(huì)話狀態(tài)D2,并且然后,編輯的第二變換序列(122 被應(yīng)用到會(huì)話狀態(tài)D2,以產(chǎn)生新的會(huì)話狀態(tài)D4。在第二客戶端,編輯的第二合并序列(1216)被應(yīng)用到初始會(huì)話狀態(tài)Dl以產(chǎn)生中間會(huì)話狀態(tài)D3,然后編輯的第一變換序列(123 被應(yīng)用到中間會(huì)話狀態(tài)D3,以產(chǎn)生與在第一客戶端產(chǎn)生的相同的新的會(huì)話狀態(tài)D4。因此,生成編輯的變換序列1232和1222,使得當(dāng)它們?cè)诒镜剡M(jìn)行的編輯(對(duì)應(yīng)于那個(gè)客戶端的編輯的合并序列)的應(yīng)用后被應(yīng)用到會(huì)話狀態(tài)時(shí),在兩個(gè)客戶端中的會(huì)話狀態(tài)會(huì)聚為一致的狀態(tài)。在圖12的示例中,每一個(gè)ASCII文本字符具有大小1,并且每一個(gè)開始和結(jié)束XML 標(biāo)簽具有大小1。在圖12的示例中,“刪除文本”指的是操作的文本刪除組件,并且“刪除元素”指的是元素刪除操作。伴隨文本或元素刪除操作的數(shù)字指的是元素刪除的大小?!安迦朐亍庇糜谙驎?huì)話單元增加XML標(biāo)簽,并且“插入文本”用于插入文本。內(nèi)容更新操作(編輯)的合并序列的變換考慮在會(huì)話單元中的每一個(gè)操作的位置,并且也考慮重復(fù)操作(例如,完成刪除同一文本的操作),或更一般而言,使得其他競(jìng)爭(zhēng)操作無實(shí)際意義的操作。初始會(huì)話狀態(tài)Dl 1210包括第一字符串Dl = <example>abcdefg</example)第二(或修訂的)會(huì)話狀態(tài)D4 1240包括第二字符串D4 = <example>a<tagName attrl = “value 1,,attr2 = "value2,,>A<nested>B</nested>C</tagName>fg</example>中間會(huì)話狀態(tài)D2 1220包括第三字符串D2 = <example>ab<tagName attrl = "value 1,,Attr2 = "value2,,>A<nested>B</nested>C</tagName>fg</example>中間會(huì)話狀態(tài)D3 1330包括第四字符串D3 = <example>aefg</example)編輯的第一合并序列1212提供了下面的編輯skip 3insert element start with tag name “tagName,,andattributes [attrl = "valueΓ', attr2 = "value2,,]insert text "A,,insert element start with tag name "nested,,andattributesinsert text “B”insert element endinsert text “C”insert element enddelete text 3(例如,文本 cde)當(dāng)編輯的第一合并序列1212被應(yīng)用到初始會(huì)話狀態(tài)Dl 1210時(shí),結(jié)果是中間會(huì)話狀態(tài)D21220,如上所述。虛線框1214指示狀態(tài)D2的部分,其中,由編輯的第一合并序列 1212對(duì)于Dl進(jìn)行改變。編輯的第二變換序列1222提供了下面的編輯skip 2delete text 1編輯的第二變換序列1222從中間會(huì)話狀態(tài)D2刪除字母“b”1224。這個(gè)操作的結(jié)果是第二(或修訂)的會(huì)話狀態(tài)D4 1240.編輯的第二合并序列1216提供下面的編輯skip 2delete text 3 (例如,刪除 “bed”)編輯的第二合并序列1216從第一會(huì)話狀態(tài)Dl刪除字母“bed”。向第一會(huì)話狀態(tài) Dl應(yīng)用編輯的第二合并序列1216的結(jié)果是中間會(huì)話狀態(tài)D3 1230。編輯的第一變換序列1232提供下面的編輯skip 2
insertelementstartwith tag name *tagName,,and
attributes[attr1 = ‘'value l,,,attr2= “value2”]
inserttext “k,,
insertelementstartwith tag name *nested,,and
attributes
inserttext “B’,
insertelementend
inserttext uC,
insertelementend
deletetext 1
編輯的第一變換序列1232通過增加在圖12上的虛線1234所示的材料來改變中
間會(huì)話狀態(tài)D3。這個(gè)操作的結(jié)果是第二會(huì)話狀態(tài)D4。注意,編輯序列的合并使得(由不同用戶進(jìn)行的)沖突編輯的檢測(cè)更容易,由此減少并發(fā)控制所需的計(jì)算資源量。例如,當(dāng)編輯的合并序列的變換將改變至少一個(gè)編輯操作的位置時(shí),檢測(cè)到?jīng)_突編輯。例如,當(dāng)執(zhí)行編輯的第一合并序列改變?cè)诰庉嫷牡诙喜⑿蛄兄械闹辽僖粋€(gè)編輯操作的位置時(shí),檢測(cè)到?jīng)_突編輯。又如,當(dāng)執(zhí)行編輯的第二合并序列改變?cè)诰庉嫷牡谝缓喜⑿蛄兄械闹辽僖粋€(gè)編輯操作的位置時(shí),檢測(cè)到?jīng)_突編輯。當(dāng)編輯的第一和第二合并序列(由兩個(gè)不同的參與者)包括重疊的刪除操作時(shí),也檢測(cè)到?jīng)_突編輯。變換存在重疊的刪除操作(即,與由另一個(gè)參與者進(jìn)行的編輯操作重疊)的編輯的合并序列產(chǎn)生變換的刪除操作,該變換的刪除操作刪除比編輯的合并序列的相應(yīng)的刪除操作少的相應(yīng)內(nèi)容單元的元素。在一些實(shí)施例中,當(dāng)操作的第一和第二合并序列包括具有冗余操作的重疊操作時(shí),編輯的第一變換序列不包括該冗余操作。在一些實(shí)施例中,不同的會(huì)話(或內(nèi)容單元)版本編號(hào)與在編輯操作的每一個(gè)合并序列前或后的相應(yīng)的會(huì)話(或內(nèi)容單元)的狀態(tài)相關(guān)聯(lián)。類似地,不同的版本編號(hào)與在編輯操作的每一個(gè)變換序列前和后的相應(yīng)的會(huì)話(或內(nèi)容單元)的狀態(tài)相關(guān)聯(lián)。在一些實(shí)施例中,不同的時(shí)間戳與會(huì)話(或內(nèi)容單元)的每一個(gè)不同的版本編號(hào)相關(guān)聯(lián)。圖13圖示從第一參與者接收的對(duì)內(nèi)容單元的獨(dú)立的編輯操作的序列和從在會(huì)話中的第二參與者接收的獨(dú)立的編輯操作的序列。用于這個(gè)序列的起點(diǎn)是第一內(nèi)容單元狀態(tài)1310,包括文本“AB⑶ER;”。從第一參與者接收編輯的第一序列,包括1316 :insert “X,,at 6,產(chǎn)生文本 ABCDEFXG1318 :insert "Y" at 1,產(chǎn)生文本 AYBCDEFXG1350 :delete 3-5,產(chǎn)生文本 AYBEFXG從第二參與者接收編輯的第二變換序列,并且將其在第一參與者應(yīng)用,包括1352 :delete 3-4,產(chǎn)生文本 AYBFXG1354 insert "Μ" at 5,產(chǎn)生文本 AYBFXMG1356 insert "N" at 3,產(chǎn)生文本 MBNFXMG這是最后的內(nèi)容單元狀態(tài)1370。
再一次,參見包括文本“AB⑶ER;”的開始狀態(tài)1310,從第二參與者接收編輯的第二序列,包括1312 :delete 3-5,產(chǎn)生文本 ABCFG1314 :insert “Μ” at 4,產(chǎn)生文本 ABCFMG1330 insert “N” at 3,產(chǎn)生文本 ABCNFMG從第一參與者接收編輯的第一變換的序列,并且將在第二參與者處應(yīng)用,包括1332 insert "X"at 5,產(chǎn)生文本 ABCNFXMG1334 insert "Y" at 1,產(chǎn)生文本 AYBCNFXMG1336 :delete 3-5,產(chǎn)生文本 MBNFXMG這是最后的內(nèi)容單元狀態(tài)1370,并且是與使用編輯的第一序列和編輯的第二變換序列獲取的內(nèi)容單元相同的內(nèi)容單元。因?yàn)榇嬖诙鄠€(gè)獨(dú)立的編輯,所以也存在多個(gè)變換(由從內(nèi)容單元狀態(tài)1310向內(nèi)容單元狀態(tài)1370的多個(gè)箭頭/路徑所示)。在這個(gè)實(shí)施例中,需要對(duì)于每一個(gè)路徑計(jì)算每一個(gè)變換,這消耗處理器資源并且花費(fèi)時(shí)間。圖14圖示1400對(duì)從第一參與者接收的內(nèi)容單元的合并編輯操作的序列和從在會(huì)話中的第二參與者接收的合并編輯操作的序列和對(duì)于其的變換。用于這個(gè)序列的起點(diǎn)是第一內(nèi)容單元狀態(tài)1410,包括文本“AB⑶ΕΚΤ’并且對(duì)應(yīng)于圖13的開始內(nèi)容單元狀態(tài)1310。從第一參與者接收編輯的第一合并序列,包括1416 :skip 1,insert “Y”,skip 1,delete 2,skip 2,insert X,產(chǎn)生文本 AYBEFXG,內(nèi)容單元狀態(tài)1450。從第二參與者接收編輯的第二變換的合并序列,并且將其在第一參與者應(yīng)用,包括1452 :skip 3,delete 1,insert “N”,skip 2,insert M,產(chǎn)生文本 AYBNFXMG,終點(diǎn) 1470。再一次參見開始內(nèi)容單元1410,包括文本“AB⑶ER;”,從第二參與者接收編輯的第二合并序列,包括1412 :skip 3,delete 2,insert “N”,skip 1,insert “M”,產(chǎn)生文本 ABCNFMG,內(nèi)容單元狀態(tài)1430。從第一參與者接收編輯的第一變換的合并序列,并且將在第二參與者應(yīng)用,包括1432 :skip 1,insert “Y”,skip 1,delete 1,skip 2,insert “X”,產(chǎn)生文本 AYBNFXMG,它是最后的內(nèi)容單元狀態(tài)1470。這是最后的內(nèi)容單元狀態(tài)1470,其作為通過應(yīng)用編輯的第一合并序列和編輯的第二變換的合并序列而獲得的狀態(tài)。因?yàn)閷为?dú)的編輯(例如,如圖13中那樣)合并為在圖14中的編輯的序列,所以存在與圖13的(由從點(diǎn)1310向點(diǎn)1370的一對(duì)箭頭/路徑所示)作比較使用圖14的實(shí)施例要求的變換更少。在這個(gè)實(shí)施例中,必須對(duì)每一個(gè)路徑計(jì)算一個(gè)變換,這是比圖13的實(shí)施例小的處理負(fù)擔(dān)。使用編輯的合并序列的圖14的實(shí)施例因此提供了降低計(jì)算要求的優(yōu)點(diǎn)ο其他應(yīng)用可以與托管會(huì)話的服務(wù)器相關(guān)聯(lián)的另一個(gè)應(yīng)用包括上下文拼寫檢查器和校正應(yīng)用。這樣的應(yīng)用可以用于找出常見的誤拼,并且消除有意限定的詞的歧義。這樣的應(yīng)用可以使用錯(cuò)誤模型來確定是否正確地拼寫或使用作品。該模型可以基于字母逆轉(zhuǎn)、語(yǔ)音相似性、在會(huì)話或字母中的位置或使用其他手段來找到常見錯(cuò)誤。該應(yīng)用可以提供不斷地基于上下文的文本校正。在一些實(shí)施例中,該應(yīng)用提供用戶頻繁使用或用戶已經(jīng)限定的詞的特定于用戶的覆蓋。在一些實(shí)施例中,該應(yīng)用可以插入具有被認(rèn)為錯(cuò)誤地拼寫了某詞的建議的標(biāo)簽,使得任何參與者(不僅作者)可以在必要的情況下找到和校正該詞??梢耘c托管會(huì)話的服務(wù)器相關(guān)聯(lián)的另一種應(yīng)用包括使用基于上下文的消歧的上下文名稱顯示。在一些實(shí)施例中,這種消歧可以在顯示名稱時(shí)提供空間效率。例如,可以僅使用名字或圖片來顯示親密朋友或工作同事,而可以使用全名、頭銜等來顯示陌生人??梢允褂靡唤M規(guī)則(由系統(tǒng)或由用戶或由兩者定義)來確定顯示誰和以什么方式??梢耘c托管會(huì)話的服務(wù)器相關(guān)聯(lián)的另一種應(yīng)用包括語(yǔ)言翻譯(機(jī)器翻譯)應(yīng)用。 這種機(jī)器翻譯應(yīng)用可以使用拼寫檢查和/或?qū)ι舷挛拿舾械脑~典來在語(yǔ)言之間翻譯。在一些實(shí)施例中,這些(和其他)應(yīng)用使用應(yīng)用協(xié)議接口(API)來與托管會(huì)話的服務(wù)器交互。在一些實(shí)施例中,該應(yīng)用允許參與者保留那個(gè)參與者可以與其他參與者共享的、用于那個(gè)參與者的個(gè)人應(yīng)用的命名空間。已經(jīng)相對(duì)于特定實(shí)施例描述了用于說明目的的上述描述。然而,上面的說明性描述不意欲是窮盡性的或?qū)⒈景l(fā)明限于所公開的精確的形式。許多修改和改變?cè)谏厦娴慕虒?dǎo)中是可能的。實(shí)施例被選擇和描述以便最佳地描述本發(fā)明的原理和其實(shí)際應(yīng)用,由此使得其他本領(lǐng)域內(nèi)的技術(shù)人員能夠最佳地利用本發(fā)明和具有適合于所考慮的特定用途的各種修改的各個(gè)實(shí)施例。
權(quán)利要求
1.一種托管電子消息的方法,包括在具有一個(gè)或多個(gè)處理器和用于存儲(chǔ)用于由所述一個(gè)或多個(gè)處理器執(zhí)行的程序的存儲(chǔ)器的服務(wù)器系統(tǒng)處,托管多個(gè)會(huì)話,每一個(gè)會(huì)話具有識(shí)別的一組參與者,所述托管包括, 對(duì)于相應(yīng)的會(huì)話向所述會(huì)話的所述參與者提供所述會(huì)話的內(nèi)容,包括從所述會(huì)話的多個(gè)參與者中的每一個(gè)接收內(nèi)容,并且向所述識(shí)別的一組參與者中的其他參與者發(fā)送所接收的內(nèi)容;以及在另外的參與者被增加到所述會(huì)話時(shí),向所述另外的參與者提供包括向所述識(shí)別的一組參與者提供的所有內(nèi)容的所述會(huì)話的內(nèi)容,并且將所述另外的參與者增加到所述識(shí)別的一組參與者中。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括對(duì)于所述服務(wù)器系統(tǒng)的相應(yīng)的用戶維護(hù)其中所述用戶是參與者的會(huì)話的列表,當(dāng)所述相應(yīng)的會(huì)話的狀態(tài)改變時(shí)更新在所述列表中的每一個(gè)這樣的會(huì)話的狀態(tài),以及向所述用戶發(fā)送列表,所述列表包括其中所述用戶是參與者的所述會(huì)話的列表的至少一部分,發(fā)送到所述用戶的列表包括關(guān)于所列出的會(huì)話的狀態(tài)fe息。
3.根據(jù)權(quán)利要求1-2任何一項(xiàng)所述的方法,包括對(duì)于所述服務(wù)器系統(tǒng)的訂戶維護(hù)其中所述訂戶是參與者的會(huì)話的列表,當(dāng)所述相應(yīng)的會(huì)話的狀態(tài)改變時(shí)更新在所述列表中的每一個(gè)這樣的會(huì)話的狀態(tài),以及向所述訂戶發(fā)送列表,所述列表包括其中所述訂戶是參與者的所述會(huì)話的列表的至少一部分,發(fā)送到所述訂戶的列表包括關(guān)于所列出的會(huì)話的狀態(tài)信息,其中所述服務(wù)器系統(tǒng)是托管的會(huì)話系統(tǒng)。
4.根據(jù)權(quán)利要求1-3任何一項(xiàng)所述的方法,其中,提供所述會(huì)話的內(nèi)容包括提供存在信息,所述存在信息包括從其接收到內(nèi)容的所述多個(gè)參與者中的每一個(gè)的在線存在。
5.根據(jù)權(quán)利要求1-4任何一項(xiàng)所述的方法,進(jìn)一步包括對(duì)于每一個(gè)相應(yīng)的會(huì)話,為每一個(gè)相應(yīng)參與者維護(hù)所述相應(yīng)的會(huì)話關(guān)于所述相應(yīng)參與者的狀態(tài),并且向相應(yīng)參與者提供所述相應(yīng)的會(huì)話關(guān)于所述相應(yīng)參與者的所述狀態(tài)。
6.根據(jù)權(quán)利要求5所述的方法,其中,提供所述相應(yīng)的會(huì)話關(guān)于所述相應(yīng)參與者的所述狀態(tài)包括提供所述相應(yīng)的會(huì)話的內(nèi)容關(guān)于所述相應(yīng)參與者的讀取狀態(tài)。
7.根據(jù)權(quán)利要求5-6任何一項(xiàng)所述的方法,其中,提供所述相應(yīng)的會(huì)話關(guān)于所述相應(yīng)參與者的所述狀態(tài)包括提供由用于所述相應(yīng)的會(huì)話的所述相應(yīng)參與者指定的標(biāo)簽——如果有的話。
8.根據(jù)權(quán)利要求5-7任何一項(xiàng)所述的方法,其中,提供所述相應(yīng)的會(huì)話關(guān)于所述相應(yīng)參與者的所述狀態(tài)包括根據(jù)來自所述參與者的指令來提供元數(shù)據(jù)以忽略所述相應(yīng)的會(huì)話。
9.根據(jù)權(quán)利要求5-8任何一項(xiàng)所述的方法,其中,提供每一個(gè)會(huì)話關(guān)于相應(yīng)參與者的所述狀態(tài)包括提供與所述狀態(tài)對(duì)應(yīng)的格式化信息,當(dāng)顯示所述會(huì)話或其部分時(shí)使用所述格式化信息。
10.根據(jù)權(quán)利要求1-9任何一項(xiàng)所述的方法,其中,提供內(nèi)容包括將所述會(huì)話的內(nèi)容格式化為與關(guān)聯(lián)于相應(yīng)參與者的客戶端裝置已經(jīng)被配置來接收的一個(gè)或多個(gè)內(nèi)容類型兼容,并且向所述客戶端裝置發(fā)送所格式化的內(nèi)容。
11.根據(jù)權(quán)利要求10所述的方法,其中,格式化內(nèi)容包括下述中的至少一個(gè)壓縮與所述內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù),提供與所述內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù)的子集,以及去除與所述內(nèi)容相關(guān)聯(lián)的多媒體數(shù)據(jù)。
12.根據(jù)權(quán)利要求1-11任何一項(xiàng)所述的方法,進(jìn)一步包括在所述服務(wù)器系統(tǒng)從參與者接收搜索請(qǐng)求,并且響應(yīng)于所述搜索請(qǐng)求向所述參與者提供搜索結(jié)果,所述搜索結(jié)果包括來自所述多個(gè)會(huì)話中的至少一個(gè)的內(nèi)容。
13.根據(jù)權(quán)利要求1-12任何一項(xiàng)所述的方法,進(jìn)一步包括在所述服務(wù)器系統(tǒng)從參與者接收搜索請(qǐng)求,并且響應(yīng)于所述搜索請(qǐng)求向所述參與者提供搜索結(jié)果,所述搜索結(jié)果包括與所述搜索請(qǐng)求匹配的一個(gè)或多個(gè)會(huì)話的列表。
14.根據(jù)權(quán)利要求1-13任何一項(xiàng)所述的方法,進(jìn)一步包括在所述服務(wù)器系統(tǒng)為每一個(gè)相應(yīng)參與者存儲(chǔ)與所述相應(yīng)參與者相關(guān)聯(lián)的聯(lián)系人列表。
15.根據(jù)權(quán)利要求1-14任何一項(xiàng)所述的方法,進(jìn)一步包括在向參與者提供內(nèi)容之前, 驗(yàn)證所述參與者被授權(quán)來接收所述內(nèi)容。
16.根據(jù)權(quán)利要求1-15任何一項(xiàng)所述的方法,其中,相應(yīng)的會(huì)話的一組參與者包括所述服務(wù)器系統(tǒng)的一個(gè)或多個(gè)訂戶和通過電子郵件地址識(shí)別的電子郵件參與者。
17.根據(jù)權(quán)利要求1-16任何一項(xiàng)所述的方法,其中,相應(yīng)的會(huì)話的一組參與者包括所述服務(wù)器系統(tǒng)的一個(gè)或多個(gè)訂戶和其上張貼了所述會(huì)話的內(nèi)容的網(wǎng)絡(luò)日志。
18.一種托管的會(huì)話系統(tǒng),包括服務(wù)器系統(tǒng),所述服務(wù)器系統(tǒng)包括一個(gè)或多個(gè)處理器;存儲(chǔ)器;以及在所述存儲(chǔ)器中存儲(chǔ)的用于由所述一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序,所述一個(gè)或多個(gè)程序包括用于托管多個(gè)會(huì)話的指令,每一個(gè)會(huì)話具有識(shí)別的一組參與者,所述用于托管的指令包括,對(duì)于相應(yīng)的會(huì)話用于向所述會(huì)話的所述參與者提供所述會(huì)話的內(nèi)容的指令,包括用于從所述會(huì)話的多個(gè)參與者中的每一個(gè)接收內(nèi)容并且向所述識(shí)別的一組參與者中的其他參與者發(fā)送所接收的內(nèi)容的指令;以及用于在另外的參與者被增加到所述會(huì)話時(shí)向所述另外的參與者提供包括向所述識(shí)別的一組參與者提供的所有內(nèi)容的所述會(huì)話的內(nèi)容,并且用于將所述另外的參與者增加到所述識(shí)別的一組參與者中的指令。
19.根據(jù)權(quán)利要求18所述的托管的會(huì)話系統(tǒng),其中,所述服務(wù)器系統(tǒng)是托管會(huì)話的一組服務(wù)器系統(tǒng)中的一個(gè),每一個(gè)相應(yīng)的服務(wù)器系統(tǒng)與不同的用戶子集相關(guān)聯(lián),并且所述服務(wù)器系統(tǒng)包括指令,所述指令當(dāng)被所述一個(gè)或多個(gè)處理器執(zhí)行時(shí)使得所述服務(wù)器系統(tǒng)在所述服務(wù)器系統(tǒng)處托管由與所述服務(wù)器系統(tǒng)相關(guān)聯(lián)的相應(yīng)的用戶子集啟動(dòng)的會(huì)話。
20.根據(jù)權(quán)利要求18-19任何一項(xiàng)所述的托管的會(huì)話系統(tǒng),其中,用于向所述參與者提供所述會(huì)話的內(nèi)容的所述指令包括用于向多個(gè)所述參與者提供所述會(huì)話的統(tǒng)一視圖的指令。
21.一種托管的會(huì)話系統(tǒng),包括一個(gè)或多個(gè)處理器;以及存儲(chǔ)器,存儲(chǔ)用于由所述一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序; 所述系統(tǒng)包括用于執(zhí)行權(quán)利要求1-17任何一項(xiàng)所述的方法的裝置。
22.—種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中存儲(chǔ)有指令,所述指令當(dāng)被在服務(wù)器系統(tǒng)中的一個(gè)或多個(gè)處理器執(zhí)行時(shí)使得所述服務(wù)器系統(tǒng)托管多個(gè)會(huì)話,每一個(gè)會(huì)話具有識(shí)別的一組參與者,并且對(duì)于每個(gè)相應(yīng)的會(huì)話 向所述會(huì)話的所述參與者提供所述會(huì)話的內(nèi)容,包括從所述會(huì)話的多個(gè)參與者中的每一個(gè)接收內(nèi)容,并且向所述多個(gè)參與者中的其他參與者發(fā)送所接收的內(nèi)容;以及在另外的參與者被增加到所述會(huì)話時(shí),向所述另外的參與者提供包括向所述識(shí)別的一組參與者提供的所有內(nèi)容的所述會(huì)話的內(nèi)容,并且將所述另外的參與者增加到所述識(shí)別的一組參與者中。
23.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),存儲(chǔ)被配置來由服務(wù)器系統(tǒng)的一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序,所述一個(gè)或多個(gè)程序包括要由所述一個(gè)或多個(gè)處理器執(zhí)行使得執(zhí)行權(quán)利要求1-17任何一項(xiàng)所述的方法的指令。
24.一種托管電子消息的方法,包括在具有一個(gè)或多個(gè)處理器和存儲(chǔ)用于由所述一個(gè)或多個(gè)處理器執(zhí)行的程序的存儲(chǔ)器的服務(wù)器系統(tǒng)處,托管多個(gè)會(huì)話,所述托管包括,對(duì)于相應(yīng)的會(huì)話向與所述會(huì)話的參與者相關(guān)聯(lián)的多個(gè)客戶端提供所述會(huì)話的內(nèi)容,包括向每一個(gè)客戶端提供所述客戶端已經(jīng)被配置來接收的所述會(huì)話的全部?jī)?nèi)容;從所述會(huì)話的相應(yīng)參與者接收內(nèi)容,并且向與其他參與者相關(guān)聯(lián)的客戶端發(fā)送所接收的內(nèi)容的至少一部分;以及在另外的參與者被增加到所述會(huì)話時(shí),向與所述另外的參與者相關(guān)聯(lián)的客戶端提供與所述另外的參與者相關(guān)聯(lián)的所述客戶端已經(jīng)被配置來接收的所述會(huì)話的所有內(nèi)容。
25.一種托管的會(huì)話系統(tǒng),包括 服務(wù)器系統(tǒng),所述服務(wù)器系統(tǒng)包括 一個(gè)或多個(gè)處理器;存儲(chǔ)器;以及一個(gè)或多個(gè)程序,其被存儲(chǔ)在所述存儲(chǔ)器中,以由所述一個(gè)或多個(gè)處理器執(zhí)行,所述一個(gè)或多個(gè)程序包括用于托管多個(gè)會(huì)話的指令,包括,對(duì)于相應(yīng)的會(huì)話用于向與所述會(huì)話的參與者相關(guān)聯(lián)的多個(gè)客戶端提供所述會(huì)話的內(nèi)容的指令,包括向每一個(gè)客戶端提供所述客戶端已經(jīng)被配置來接收的所述會(huì)話的全部?jī)?nèi)容;用于從所述會(huì)話的相應(yīng)參與者接收內(nèi)容,并且向與其他參與者相關(guān)聯(lián)的客戶端發(fā)送所接收的內(nèi)容的至少一部分的指令;以及用于在另外的參與者被增加到所述會(huì)話時(shí),向與所述另外的參與者相關(guān)聯(lián)的客戶端提供與所述另外的參與者相關(guān)聯(lián)的所述客戶端已經(jīng)被配置來接收的所述會(huì)話的所有內(nèi)容的指令。
26.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中存儲(chǔ)有指令,所述指令當(dāng)被在服務(wù)器系統(tǒng)中的一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得所述服務(wù)器系統(tǒng) 托管多個(gè)會(huì)話,包括,對(duì)于相應(yīng)的會(huì)話向與所述會(huì)話的參與者相關(guān)聯(lián)的多個(gè)客戶端提供所述會(huì)話的內(nèi)容,包括向每一個(gè)客戶端提供所述客戶端已經(jīng)被配置來接收的所述會(huì)話的全部?jī)?nèi)容;從所述會(huì)話的相應(yīng)參與者接收內(nèi)容,并且向與其他參與者相關(guān)聯(lián)的客戶端發(fā)送所接收的內(nèi)容的至少一部分;以及在另外的參與者被增加到所述會(huì)話時(shí),向與所述另外的參與者相關(guān)聯(lián)的客戶端提供與所述另外的參與者相關(guān)聯(lián)的所述客戶端已經(jīng)被配置來接收的所述會(huì)話的所有內(nèi)容。
27.根據(jù)權(quán)利要求沈所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,所述服務(wù)器系統(tǒng)是托管會(huì)話的一組服務(wù)器系統(tǒng)中的一個(gè),每一個(gè)相應(yīng)的服務(wù)器系統(tǒng)與不同的用戶子集相關(guān)聯(lián),并且所述服務(wù)器系統(tǒng)包括指令,所述指令當(dāng)被在所述服務(wù)器系統(tǒng)中的所述一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得所述服務(wù)器系統(tǒng)在所述服務(wù)器系統(tǒng)處托管由與所述服務(wù)器系統(tǒng)相關(guān)聯(lián)的相應(yīng)的用戶子集啟動(dòng)的會(huì)話。
全文摘要
一種服務(wù)器系統(tǒng)托管多個(gè)會(huì)話,每一個(gè)會(huì)話具有識(shí)別的一組參與者。對(duì)于相應(yīng)的會(huì)話,服務(wù)器系統(tǒng)向會(huì)話的參與者提供會(huì)話的內(nèi)容。服務(wù)器從會(huì)話的多個(gè)參與者中的每一個(gè)接收內(nèi)容,并且向多個(gè)參與者中的其他參與者發(fā)送所接收的內(nèi)容。在另外的參與者被增加到會(huì)話時(shí),服務(wù)器向另外的參與者提供包括向識(shí)別的一組參與者提供的所有內(nèi)容的會(huì)話的內(nèi)容,并且將另外的參與者增加到識(shí)別的一組參與者中。
文檔編號(hào)G06F15/16GK102362270SQ201080013718
公開日2012年2月22日 申請(qǐng)日期2010年3月23日 優(yōu)先權(quán)日2009年3月23日
發(fā)明者吉恩斯·埃爾斯特魯普·拉斯穆森, 拉爾斯·埃爾斯特魯普·拉斯穆森 申請(qǐng)人:沃克韋科技美國(guó)有限責(zé)任公司