具体实施方式
描述了本发明的方法、系统、用户界面和其他方面。参考本发明的某些实施例,其示例被图示在附图中。虽然结合实施例描述了本发明,但是可以明白,不意欲将本发明限于这些特定实施例。相反,本发明意欲覆盖在本发明的精神和范围内的替代品、修改和等同物。因此,要在说明性而不是限制性的意义上看待说明书和附图。
而且,在下面的说明中,给出了多个具体细节以提供对本发明的彻底理解。然而,对于本领域内的普通技术人员显然,可以在没有这些具体细节的情况下实施本发明。在另外一些情况下,未详细描述本领域内的普通技术人员公知的方法、过程、部件和网络,以避免使本发明的方面模糊。
图1是图示根据本发明的某些实施例的示例性分布式计算机系统100的框图。计算机系统100包括多个客户端110。客户端110(在此也称为客户装置或客户端系统)的用户是在由一组会话服务器130(有时称为会话服务器系统)托管的会话中的参与者112。客户端100可以是用于使能如下所述的行为的多种计算装置(例如,因特网售货亭、个人数字助理、蜂窝电话、游戏装置、台式计算机、膝上型计算机、手持计算机、平板计算机或其组合)的任何一种。。每一个客户端110耦合到网络120,网络120可以是多种网络(例如,因特网、内联网、局域网、广域网、无线网络、有线网络、光学网络或这样的网络的组合)的任何一种。更一般地,客户端100和会话服务器130经由一个或多个通信网络120彼此耦合。
相应的客户端110-B执行客户端应用114,客户端应用114便利从客户端110对于相应的托管会话服务器130的访问。客户端应用114可以包括图形用户界面。例如,客户端应用可以是web浏览器或其他浏览器应用,诸如Firefox(Mozilla Foundation的商标)、Internet Explorer(微软公司的商标)、Safari(苹果公司的商标)或Chrome(谷歌公司的商标)。
虽然系统100可以具有单个会话服务器130,但是在其他实施例中,系统100可以具有多个会话服务器130。例如,多个会话服务器130A和130-B可以分别被诸如提供商116-A和116-B的不同的服务提供商托管。在一些实施例中,提供商是用于提供会话服务的因特网服务提供商(ISP)。替代地,提供商的一些或全部可以是专用会话提供商。当系统100包括多个会话服务器130时,会话服务器130可以直接地或通过局域网(LAN)或经由网络120耦合在一起。
会话服务器130托管在参与者112之间的会话。更具体地,每一个会话服务器130代表一组用户托管会话。这些用户中的至少一些是托管的会话系统100的用户,因此具有用户帐户。如下更详细所述,会话参与者中的一些不必是托管会话系统的用户。当任何参与者将新的内容加到会话或任何参与者向会话进行任何其他改变时,向托管在会话中的参与者的会话的所有会话服务器130发送更新。那些托管服务器继而向在会话中的参与者使用的客户端110发送该更新。会话更新可以较为瞬时地(例如,在一两秒内)被发送到在会话中的活动参与者的客户端110。可选地,在线并且登录到会话系统100但是当前未观看会话或当前未参与会话的消极参与者112的客户端110接收已经更新会话的信息,而不接收对于会话的更新。在至少一些实施例中,当参与者“打开”会话(选择它来观看)时,更新的会话被从托管用于那个用户的会话的会话服务器130下载到参与者的客户端。
图2是图示会话服务器130与客户端系统210和220的示例性实施例的系统200的框图。系统200包括在会话服务器130和包括客户端210的多个客户端之间耦合的如上所述通信网络120。客户端210对应于图1的相应的客户端110,并且在此有时被称为“参与者客户端”,因为客户端110/210的用户是在由会话服务器130托管的一个或多个会话中的参与者。系统200包括至少一个参与者客户端210。参与者客户端210可选地包括浏览器212,诸如web浏览器或用于便利参与者与相应的会话服务器130的交互的其他客户端应用。浏览器212通常包括(或控制)用于执行在网页或由浏览器212呈现的其他文档中嵌入的软件的虚拟机(例如,Java虚拟机)。在一些实施例中,浏览器212执行至少部分地嵌入网页内的会话应用214。网页(可以被称为“托管的会话网页”)被从诸如会话服务器130的服务器下载到客户端210,并且包括被在客户端210中的浏览器212的虚拟机执行的可执行指令。浏览器212和会话应用214一起形成图1的客户端应用114。会话应用214便利参与者与会话服务器130的交互。
在其他一些实施例中,会话应用214是浏览器应用212的插件或扩展。
系统200可选地包括非订户客户端220。非订户客户端220使得在会话系统中没有帐户的用户能够至少以有限的方式来参与托管的会话中。可以以多种方式来限制在托管的会话中的参与,例如,通过允许非订户客户端的用户读取会话的内容,并且允许用户贡献新内容,但是不允许非订户客户端的用户使用其他特征,诸如编辑已经在会话中的内容、响应由其他参与者先前贡献的内容的特定部分和重放会话。
非订户客户端220以与由其用户是托管的会话系统的订户的客户端210使用的方式不同的方式来访问会话服务器系统130。非订户客户端220的示例是具有网络日志客户端228的网络日志(“博客”)服务器226。如下所述,托管的会话可以包括作为在会话中的参与者的网络日志228(也称为网络日志客户端),在该情况下,在网络日志中发布托管的会话的内容。所发布的会话在由网络日志服务器226托管的网络日志228上是可见的。更具体地,当网络日志228作为参与者被加到会话时,会话的内容被托管会话的会话服务器130发送到(也称为“张贴到”)网络日志228。在作为参与者增加网络日志228时,向会话增加的新内容也被托管会话的会话服务器130发送到网络日志228。观看网络日志228的内容(例如,通过访问在网络日志服务器226上托管的与网络日志228相关联的URL)的用户(例如,另一个客户端110的用户,图1)可以观看在网络日志上发布的会话的内容。
非订户客户端220的另一个示例是具有电子邮件客户端222的电子邮件服务器224。来自托管会话的内容可以被发送到一个或多个电子邮件服务器224的一个或多个电子邮件客户端222。具体地说,当电子邮件客户端222的用户作为参与者被加到会话时,会话的内容(和随后被加到会话的内容)被托管会话的会话服务器130发送到电子邮件客户端222。
网络日志和电子邮件服务器也是“自动客户端”的示例。自动客户端的其他示例包括可以被调用来向托管的会话的其他参与者提供服务的服务,诸如归档服务、翻译服务、拼写检查服务和语法检查服务。
在一些实施例中,电子邮件客户端222和网络日志客户端228可以读取内容但是不能向托管的会话提供内容,因此仅是观看者。然而,在一些其他实施例中,向至少一些“电子邮件参与者”(即,电子邮件客户端的用户)或“网络日志参与者”(即,网络日志客户端)提供编写能力(用于向会话提供内容的能力)。
在一些实施例中,会话服务器130包括:前端或会话引擎246,用于管理会话和与客户端的通信;以及一个或多个辅助服务(模块、应用或服务器)250,用于管理与会话相关的服务。在一些实施例中,辅助服务250包括拼写检查252、语言翻译或本地化256和管理对于会话的附件258。会话服务器130也包括在线存在服务248,用于使得用户能够知道其他用户(例如,托管的会话系统的其他订户)的在线状态,如下面参考图6详细所述。服务器130包括下面参考图4详细所述的用户数据库270。
前端或会话引擎246利用(或替代地包括)更新、访问和/搜索/查询引擎260,用于向会话提供参与者访问,并且提供在会话中的搜索功能。在一些实施例中,一个或多个会话索引264是逆索引,用于将在会话中的词和词语映射到其中它们出现的会话。该一个或多个会话索引264用于找到匹配指定的搜索查询的在托管会话数据库262中的会话。当向在会话数据库262中的会话增加内容时,使用那个内容来更新该一个或多个会话索引264,以便使得通过搜索查询的执行能够访问所增加的内容。下面参考图3更详细地描述了会话数据库262。
可选地,会话服务器130包括SMTP网关242,用于便利与一个或多个电子邮件服务器224的电子邮件通信。
在下面的描述中,订户是会话服务器130(例如,在提供会话服务的一组会话服务器130中的任何会话服务器130)维护其用户记录或简档的用户(参见图4中的402,如下所述)。
如下更详细所述,在一些实施例中,会话服务器130对于相应的用户/订户维护其中该用户/订户是参与者的会话的列表414(图4)。当相应的每一个这样的会话的状态改变时,会话服务器130更新在用户的会话列表414中的该每一个这样的会话的状态(会话状态438-1,图4)。当(例如,响应于来自用户的搜索/查询)会话服务器130向用户发送所请求的会话的列表(通常包括其中用户是参与者的完整的会话集的子集)时,该列表包括用于列出的会话的状态信息。在返回的列表中的状态信息通常是会话状态438的子集,因为当显示会话的列表时仅需要会话状态的一部分(例如,在还没有被用户观看的会话中是否存在任何内容)。
图3A是图示用于会话数据库262的示例性数据结构的框图。虽然大多数会话具有共享会话的所有内容的单个的一组参与者,在此被称为会话容器,但是一些会话具有更复杂的结构。具体地说,第一会话可以导致由在第一会话中的参与者的各种子集进行的任何数量的“侧会话”,并且可以甚至包括另外的参与者。例如,会话容器可以被两个或更多组的参与者(例如,组A和组B)使用来协商约定或共同编辑文档或演示文稿等。为了适应所有参与者的需要,在所有参与者之间开始初始会话(有时称为主会话),然后,大量产生“私人会话”取代初始会话以使得在每一个组中的参与者能够与该组的其他参与者秘密地交流,同时仍然可以访问初始会话的所有内容。通常,每一个私人会话具有一组参与者,该一组参与者排除在主会话中的至少一个参与者。可选地,私人会话可以包括不是在主会话中的参与者的一个或多个附加参与者(例如,顾问)。每一个参与者仅可以访问其中他们是参与者的会话的内容。通常,在组A上的参与者可以访问组A私人会话和主会话的内容,并且在组B上的参与者可以访问组B私人会话和主会话的内容。
图3A是支持简单会话(即,没有相关的私人会话的单个会话)以及会话容器的示例性数据结构的框图,该会话容器包括多个会话(有时被称为主会话和一个或多个子会话)。
会话数据库262包括多个会话容器记录302-1至302-N,每一个包含用于会话容器的数据。当相应的会话容器仅具有一个会话时,在对应的会话容器记录302中的唯一信息用于单个会话,如通过一个会话记录310表示。更一般地,会话容器记录302包括一个或多个会话记录310-1至310-C。每一个会话记录310包含用于相应的会话的数据,包括:
●会话容器识别符329,其唯一地识别在会话系统110/200中的会话容器,该会话容器对应于会话记录310所位于的会话容器记录302;
●会话识别符330,其与会话容器识别符329相组合来唯一地识别在会话系统100/200中的会话,该会话对应于会话记录310(即,会话仅可以与单个会话容器相关联);
●会话元数据322;
●会话日志324(有时称为历史日志);以及
●一个或多个内容贡献326-1至326-n;以及
●历史日志360。
会话元数据322是用于与会话记录310对应并且通过会话识别符310识别的会话的元数据。在一些实施例中,会话元数据322包括会话建立时间戳331(用于指示建立会话的日期和时间)和用于会话的参与者的列表332(在图3B中更详细地所述)。元数据322可以可选地包括其他元数据,诸如:与会话相关联的元数据识别标签325(例如,系统和/或用户分配的标签,其是“公共”的,因此可用于在会话中的所有参与者);以及与会话记录310相关联的相应会话的其他特性。
当会话容器包含多于一个会话时,会话容器的用于主会话的参与者列表332通常包括在会话容器中的所有会话中的所有参与者。然而,在一些实施例中,在会话容器中的私人会话(即,除了主会话之外的会话)可以具有不是主会话的参与者的另外的参与者。因此,在会话容器中的私人会话的每一个通常具有参与者列表332,该参与者列表332包括在同一会话容器中的主会话中的参与者的至少一个,并且可选地包括不是在同一会话容器中的主会话中的参与者的一个或多个参与者。
另外,当会话容器包含多于一个会话时,对于私人会话的每一个而不是对于主会话提供父ID/插入位置333。父ID/插入位置333识别私人会话的父以及在所识别的父会话中的位置,当被私人会话的参与者观看时,应当在该位置插入私人会话的内容。通常,私人会话的父是会话容器的主会话,但是在一些情况下,私人会话的父可以是在会话容器中的会话的分级(或图形)中的较高的另一个父会话。当私人会话的参与者观看包括该私人会话的会话容器时,将看到父会话和私人会话两者的内容(假定,参与者也是父会话的参与者)。在其中用户是私人会话的参与者但是不是在父会话中的参与者的不常见的情况下,用户仅看到在它们是参与者的会话容器中的会话的内容。
在一些实施例中,会话逻辑324(图3C)记录对会话的所有改变,包括对会话的内容的改变以及对会话的参与者组和其他特性的改变。当参与者请求观看在一个或多个时间点的会话的状态或会话的内容单元时,访问会话日志324。例如,会话日志324可以用于重建或查看对于会话的内容单元进行的编辑的序列。这有时被称为会话的“重放”。可以以多种方式来执行会话的重放,包括在时间上向前或在时间上向后,并且示出仅对于会话的一部分或对于整个会话的更新。
在会话中的相应的内容贡献326(也称为内容单元或“评论”)可以是消息,很像电子邮件消息或即时消息。在会话中的其他内容贡献326可以是文档(例如,报告、会议日程等)、图片、演示文稿、音频文件、视频文件或实际上任何其他类型的电子文档或内容。在一些实施例中,在电子邮件消息和对于会话的其他类型的内容贡献之间存在很少——如果有的话——的区别。在一些实施例中,在用于每一个内容贡献326的会话记录310中的数据包括:
●内容识别符342(例如,用于唯一地识别内容贡献的值,全局地在会话系统中或是本地地在特定的会话中);
●内容单元元数据346,用于识别内容贡献326的特性;
●可选地,一个或多个附件344(例如,图片、视频、文档、文件、归档、音频、动画、链接等);以及
●内容贡献326的内容349(例如,文本、图像、文档内容等)。
在一些实施例中,用于内容单元326的内容单元元数据346包括:
●第一时间戳341-1,用于表示第一次建立(向会话增加)内容单元的日期和时间;以及对应的序列号343-1,其对应于当第一次建立内容单元时的会话的状态;
●最后时间戳341-2,用于表示编辑内容单元的最后日期和时间;以及对应的序列号343-2,其对应于当进行对于内容单元的最后编辑时的会话的状态;(例如)当重放对内容单元的改变时或当重放对包括内容单元的会话的一部分的改变时,具有第一和最后时间戳和序列号是有益的;以及
●内容单元的贡献者或作者的识别符352(例如,参与者地址),其可选地由每一个作者对内容单元的第一贡献的顺序排序;虽然大多数内容单元具有单个作者,但是可以合作地编写内容单元,在该情况下,内容单元具有多个作者。
在一些实施例中,用于内容单元326的元数据346也包括下述的一个或多个:
●父识别符354提供父内容单元的识别符或指向其的指针,对于该父内容单一,这个内容贡献是响应或答复;
●位置350提供在会话中的这个内容单元的位置的指示符;位置350可以用于控制当显示会话的两个或更多内容单元时如何显示内容单元;以及
●可选地,这个内容贡献的同级358(即,对于同级内容单元的识别符或指针,该同级内容单元是对这个内容单元的父的其他响应或答复)。
通常,用于内容单元326的元数据346包括至少一个值(例如,位置350或父识别符354),该至少一个值识别或表示内容单元326在会话中的位置。
会话索引264(参见图2)通过索引的搜索使能对于在会话数据库262中的会话的快速访问。
图3B是图示在会话记录310的会话元数据322(图3A)中的参与者列表332的数据结构的框图。参与者列表332包括多个参与者记录362,在相应的会话中的每一个参与者一个参与者记录。在一些实施例中,每一个参与者记录362包括下面的信息或下面的信息的子集:
●会话识别符371;
●参与者地址372,其也可以被称为参与者识别符;参与者地址唯一地识别在会话系统100(图1)中的会话中的所有参与者中的参与者;
●每个用户会话状态373;例如,会话状态373可以指示这个会话相对于与参与者记录362对应的相应参与者而言的读取/未读取状态374;会话状态372可以包括关于参与者已经查看了在会话中的哪些内容贡献和哪些还没有被查看的信息。
●用于会话参与者的会话状态373可以包括标记376;可选地,标记376可以包括忽略标记377(有时也称为静音标记),该忽略标记377如果存在则指示参与者已经指令会话系统不向参与者通知对会话的更新;
●会话参与者的会话状态373可以包括由这个参与者向这个会话分配的专用标签(有时称为“文件夹”或“文件夹指定”)378,该专用标签仅由这个参与者使用(例如,当搜索会话时,该参与者可以包括作为查询词语中的一个的专用标签);专用标签可以被参与者应用来帮助组织它们的会话并且使得容易至少部分地基于已经向它们应用了什么标签来定位会话;注意,标记325是在会话中的所有参与者可获得的公共信息,而每一个参与者的专用标签是那个参与者专用的。
●用于会话参与者的会话状态373可以包括视点指针379,该指针指示当前被参与者查看的会话的部分(和如果用户正在输入或编辑内容单元则在相应的内容单元内的用户的光标的位置)或如果参与者当前未显示或查看会话则为由参与者最后查看的会话的部分;
●可选地,与相对于这个特定会话而言的这个相应的参与者相关的其他元数据。
在相应的参与者的每一个用户会话状态373中的另一个可选标记376是提醒标记。当在每一个用户会话状态373中包括时,每一个用户会话状态373也包括:对应的时间戳,用于指示提醒参与者关注会话或其一部分的日期和时间(或用于指示日期/时间范围的时间戳对);可选地,用户ID,用于识别启动提醒的用户(在一些实施例中,用户不仅向他们本身,而且向会话中的其他参与者发送提醒);以及,可选地,内容范围指示符,用于指定作为提醒的主题的会话的一部分。
在相应的参与者的每一个用户会话状态373中的另一个可选标记376是ping(探索)标记。当另一个参与者已经向该参与者(通常是在线参与者)发送了ping(它是一种形式的通知或即时消息)时,或当该参与者已经向另一个参与者发送ping时,ping标记被包括在每一个用户会话状态373中。ping标记当存在时向客户端应用指示要显示ping通知(例如,弹出框)。
在每一个参与者记录362中的大多信息(例如,会话状态373)对那个参与者是专用的,而不与会话的其他参与者或在会话系统中的其他用户共享。在一些实施例中,在会话中积极地编辑内容单元或输入下一个文本的每一个参与者的光标位置(参见379,图3B)被发布给该会话的其他参与者并且可被其看到,除非相应的参与者已经选择抑制它们的光标位置的发布,在该情况下,不将参与者的会话状态373的那个方面考虑为对该参与者是专用的。当存在编辑同一会话的多个活动的参与者时,用于活动的参与者的每一个的光标位置信息被发送到活动参与者的客户端(经由它们的托管会话服务器)。在相应的参与者的客户端处,当光标位置彼此接近得足以使得同时显示时,同时显示多个光标位置(对应于多个不同的参与者)。
如上所述,在一些实施例中,对于每一个相应的会话记录310,服务器140对于每一个相应的参与者362维护相应会话的关于该相应的参与者的会话状态373。服务器130向相应的参与者(例如,向正在向该参与者显示会话的客户端)提供相应会话的关于该相应的参与者的状态。在一些实施例中,这包括:向该参与者(例如,向正在被该参与者使用的客户端)提供关于该参与者的相应的会话的内容单元的读取状态(即,用于指示哪些内容单元(在它们当前的状态中)已经被参与者读取或查看,以及哪些还没有)。在一些实施例中,提供相应会话的关于相应的参与者的会话状态373包括:提供由相应的参与者为相应的会话指定的标签378。
在一些实施例中,提供相应会话的关于相应的参与者的状态373包括:根据来自参与者的指令来提供用于忽略相应的会话的元数据(例如,忽略标记377)。这向参与者提供了根据规则来管理会话的选项,实际上用于归档会话,并且减少在会话观看者中的拥塞。例如,当参与者使用系统定义的标签“忽略”或“静音”来标注会话时,设置参与者的忽略状态标记377(用于标注的会话),并且其后,很像归档的消息或会话那样处理会话(代表该特定的参与者)。会话的其他参与者如果他们未使用“忽略”标签标注会话则可以继续看到在他们的活动会话的列表中的会话。
在一些实施例中,每一个托管的会话的每一个参与者的每一个用户会话状态373被存储在会话数据库262中,如图3A中所示。在其他实施例中,每一个托管的会话的每一个参与者的每一个用户会话状态373被存储在用户数据库400中,如下所述。在其他实施例中,每一个用户会话状态373信息(用于每一个托管的会话的每一个参与者)被存储在与会话数据库262和用户数据库400分离的独立数据库或服务器(有时称为“用户补充”数据库或服务器)中。可选地,可以在用户数据库400和会话数据库262中存储指向在用户补充数据库中的每一个用户会话状态373信息(例如,记录)的指针。替代地,不存储这样的指针,并且,在根据需要的基础上从用户补充数据库检索用于相应的会话的特定用户的每一个用户会话状态373以通常用于向参与会话的客户端发送,并且根据由该参与者执行的操作(例如,读取内容、输入结束内容、标记内容等)来更新该每一个用户会话状态373。
如下更详细所述,在一些实施例中,会话服务器130对于每一个相应的订户存储与该相应的订户相关联的联系人列表(在图4中所述的416)。在一些实施例中,在用户数据库270(图2)或400(图4)中存储联系人列表。
当向客户端发送会话以向用户显示时,该客户端仅接收用于该会话的会话记录310(图3A)的一部分。例如,在一些实施例中,被发送到客户端并且被存储在客户端的会话记录310的部分排除会话日志324和其他参与者的会话状态373(除了还没有阻止他们的光标位置的发送的、在会话中的其他当前活动参与者的光标位置)。在一些实施例中,仅当在客户端110的参与者已经请求会话或会话的用户指定部分的重放或已经请求查看在过去的特定时间或点处的会话的状态时,向该客户端发送会话日志324。
图3C是图示根据一些实施例的用于会话日志324的数据结构的框图。会话日志324包括日志记录385-1至385-C(有时称为日志条目)的时间排序的序列。相应的日志记录385包括:内容ID 386,用于识别由在日志记录385中记录的会话编辑更新的内容单元(如果有的话);元数据388,其与在日志记录中记录的会话编辑相关;对于由在日志记录中记录的会话编辑加到会话的任何附件的引用394(例如,一个或多个指针或文件名);以及在日志记录中记录的会话编辑或改变396的列表。元数据388包括相对于在用于同一会话的其他日志记录中的会话编辑而言的、唯一地识别在日志记录中的会话编辑的顺序的时间戳389和/或序列号。元数据388也识别在日志记录中的会话编辑的作者(也称为贡献者)列表390和在日志记录385中记录的会话编辑的开始位置392。虽然作者列表390对于大多数日志记录385仅包括一个作者,但是当多个作者在短时间期间或在重叠的时间段期间向内容单元进行编辑或贡献内容时,单个相对应的日志记录385包括对于由那个日志记录385记录的内容单元中的改变有贡献的所有作者的列表390。在一些实施例中,开始位置392作为用于会话编辑396的第一编辑或更新操作的偏移或位置设置被包含到会话编辑396,并且在那些实施例中,日志记录没有独立的开始位置392字段。
图4是图示根据本发明的某些实施例的、用于用户数据库400的数据结构的框图。数据库400包括多个用户记录402。在一些实施例中,每一个用户记录402包括:
●用于托管的会话系统的订户的用户识别符410;
●用户元数据412,包含关于或用于用户的信息;
●其中用户是参与者的会话414的列表;
●用户的联系人列表416(通常,对应于用户并且对于用户而言是个人的联系人416的列表);
●可选地,由用户定义的标签418,用于标注或分类会话;
●可选地,被用户使用来与会话服务器进行通信的客户端装置的客户端装置识别符和/或类型420,或替代地,用户在过去与会话服务器相结合地使用的客户端装置的识别符和类型;在一些实施例中,可以使用客户端的类型(例如,台式机、蜂窝电话等)来确定向用户发送来自会话的什么内容;
●可选地,当参与会话422时用户的偏好422;
●可选地,与用户相关联的逆索引424;
●用户的当前在线状态426(例如,离线、在线、忙、离开等);
●用于用户的认证信息428(例如,用户名、密码和可选的用于用户认证的其他值);
●可选地,与用户相关的其他数据,诸如一个或多个博客URL 430、电子邮件地址432等。
与用户相关联的会话列表414包括多个用户会话记录434,每一个记录与其中用户是参与者的会话相关。每一个用户会话记录434包括:
●会话识别符436,用于识别相应的会话,以及
●每一个用户会话状态信息438,其可以与在会话记录310的参与者记录362中的会话状态373相同(或是指向该会话状态373的指针)。如上所述,在一些实施例中,每一个用户会话状态信息被存储在独立的数据库或服务器(有时称为用户补充数据库或服务器)中,在该情况下,用户会话记录434包括会话识别符436,而不是每一个用户会话状态信息438。
如上所述,在一些实施例中,所述系统包括用于系统的每一个用户的独立的每一个用户逆索引424;每一个这样的索引424是将其中用户是参与者的会话的词语、标签、标记等映射到包含那些词语、标签、标记等的会话(并且可选地,映射到具有会话的内容单元或在会话内的位置)。这些每一个用户索引使能其中用户是参与者的会话的快速索引和快速搜索。在一些实施例中,另外的索引(有时称为“大波”索引)用于对于具有大量(例如,超过阈值数量,诸如500或100)参与者的“大波”会话提供快速索引和访问。在这些实施例中,不在每一个用户逆索引424中对于“大波”会话的内容加索引,而是在一个或多个“大波”索引中对于“大波”会话的内容加索引。类似地,在其中用户组作为组参与会话的一些实施例中,附加的每组索引用于对那些会话加索引,并且提供那些会话的快速搜索;并且,其中相应的用户仅作为组成员参与的会话(如果有的话)不被包括在用户的每一个用户逆索引424中。因此,当用户执行对于满足用户指定的查询的会话的搜索时,可以搜索多个索引,在该情况下,来自多个索引的搜索结果被合并,然后将搜索结果返回到进行请求的用户。
在一些实施例中,服务器130向会话的所有参与者提供会话的相同内容,并且向每一个在线参与者提供关于在同一会话中的其他参与者的在线存在信息。在一些实施例中,服务器允许会话的参与者禁止向在会话中的其他参与者发布他们的在线存在信息。在一些实施例中,服务器允许会话的参与者选择性地使能向在会话中的其他参与者发布他们的在线存在信息(例如,允许仅向由参与者指定的用户发布参与者的在线存在;或替代地,禁止向由参与者具体指定的用户发布参与者的在线存在)。
在一些实施例中,服务器130向每一个参与者提供相同的内容,将会话的内容格式化为与关联于相应的参与者的客户端装置110已经被配置来接收的一个或多个内容类型兼容,并且向客户端装置发送格式化的内容。
在一些实施例中,当向某些客户端(例如,蜂窝电话或PDA)递送会话的内容时,会话服务器130通过压缩与内容相关联的多媒体数据(例如,以减少带宽要求)来格式化该内容。在一些实施例中,服务器向客户端提供与内容相关联的多媒体数据(例如,缩略图或短音频/视频剪辑)的子集。在一些实施例中,会话服务器去除与向客户端递送的内容(例如,剥去多媒体并且仅提供文本)相关联的多媒体数据。
在一些实施例中,会话服务器130在向用户提供来自会话的内容之前使用认证信息428来认证用户。
在一些实施例中,会话服务器130向在用于相应的用户的用户记录402中(例如,通过博客URL 430)指定的网络日志(例如,网络日志服务器226或网络日志客户端228)发送来自其中该用户是参与者的会话的内容。当在会话中的相应参与者是自动客户端时,会话的内容被发送到自动客户端。自动客户端可以是网络日志、电子邮件服务器或帐户或诸如翻译服务或拼写检查服务等的服务提供商。
图5A-5E是用于表示根据本发明的某些实施例的、用于在服务器处托管会话的方法的流程图。这些方法被在计算机可读存储介质中存储并且由一个或多个服务器的一个或多个处理器执行的指令控制。在图5A-5E中所示的操作的每一个可以对应于在计算机存储器或计算机可读存储介质中存储的指令。计算机可读存储介质可以包括磁或光盘存储装置、诸如闪速存储器的固态存储装置或其他非易失性存储装置。在计算机可读存储介质上存储的计算机可读指令是以源代码、汇编语言代码、对象代码或被一个或多个处理器执行或解译的其他指令格式的。
图5A示出用于在服务器处托管会话的方法500。服务器托管(502)多个会话,每一个会话具有被识别的一组参与者。服务器通常是在托管的会话系统中托管会话的多个服务器中的一个。
服务器向会话的所有参与者提供(506)来自会话的相同内容。在一些实施例中,服务器也向在会话中的其他参与者提供(508)在会话中的多个参与者的每一个的在线存在信息。服务器从会话的多个参与者的每一个接收(510)内容,并且向多个参与者中的其他参与者发送所接收的内容。
服务器在另外的参与者被增加到会话时向该另外的参与者提供与向所述被识别的一组参与者提供的相同的会话内容,并且向被识别的一组参与者增加该另外的参与者。如上所述,当该另外的参与者正在使用能够接收会话的整体内容的客户端时,会话的整体内容被发送到由该另外的参与者当前正在使用的客户端。在一些实施例中,“会话的整体内容”包括在向会话增加该另外的参与者之前由在会话的先前参与者增加的全部内容以及在增加另外的参与者时在会话中包括的任何自动产生的内容(例如,由服务器系统产生的内容)。结果,甚至在会话已经开始后长时间被加到会话的参与者接收在参与者被加到会话之前向会话贡献的内容。应当明白,保护与在会话中的参与者相关联的个人数据和/或由参与者向会话增加的内容的隐私经常是参与者的关心问题。因此,在一些实施例中,以多种方式的任何一种来处理这样的隐私问题,该多种方式包括但是不限于以下的一种或多种:使得参与者能够参与“私人会话”(如上面参考图3A更详细所述);使得参与者能够在“组起草模式”中编辑起草消息(如下面参考图10更详细所述);允许参与者决定退出自动共享他们的内容(例如,通过限制对由相应的参与者增加的内容的访问,使得它仅可以被已经由相应的参与者特定批准的其他参与者访问);以及限制参与者在没有一个或多个其他参与者对于相应的会话的批准的情况下向相应的会话增加另外的参与者的能力(例如,在向相关的会话增加新的参与者之前,要求其他参与者的一半或全部其他参与者的批准)。
在一些实施例中,服务器将会话的内容格式化(514)为与和相应的参与者相关联的客户端已经被配置来接收的一个或多个内容类型兼容,并且向客户端装置发送格式化的内容。在一些实施例中,服务器通过执行下述中的至少一个来格式化来自会话的内容:压缩与内容相关联的多媒体数据;提供与内容相关联的多媒体数据的子集;以及去除与内容相关联的多媒体数据(例如,去除视频和音频数据,但是留下文本内容)。
在一些实施例中,服务器从参与者接收(518)搜索请求(经常被称为查询或搜索查询),并且响应于搜索请求向参与者提供搜索结果,该搜索结果包括来自多个会话中的至少一个的内容。作为替代或补充,响应于所接收的搜索请求,服务器向参与者提供(520)包括匹配搜索请求的一个或多个会话的列表的搜索结果。在一些实施例中,查询引擎260(图2)使用会话内容的逆索引264来处理搜索请求,以识别与搜索请求匹配的会话或在一个或多个会话内的内容。
图5B示出图5A的方法500的继续部分。服务器对于每一个相应的参与者存储(530)相应会话关于相应的参与者的状态,并且向相应的参与者(例如,向当前被参与者使用来观看会话的客户端)提供相应的会话关于相应的参与者的状态。在一些实施例中,这包括:向参与者(例如,向参与者使用的客户端)提供(532)相应的会话的内容单元关于参与者的读取状态(即,指示哪些内容单元已经被参与者读取或观看和哪些没有)。在一些实施例中,提供(534)相应会话关于相应的参与者的状态包括:提供由用于相应的会话的相应参与者指定的标签——如果有的话。
在一些实施例中,根据来自特定参与者的指令,针对该参与者为会话维护的元数据包括(536)用于忽略相应的会话的元数据。例如,可以向会话服务器的搜索引擎260(图2)提供忽略元数据。在一些实施例中,服务器提供(538)与会话状态对应的格式化信息,当显示会话或其部分时使用该格式化信息。在一些实施例中,该格式化信息包括下述中的一个或多个:颜色(例如,文本、背景、边界的颜色)、字体、缩进、位置(例如,上标或下标)等。
在一些实施例中,服务器对于每一个相应的参与者存储(540)与相应的参与者相关联的联系人列表。
在一些实施例中,在向参与者提供内容之前,服务器(使用认证信息428)验证(542)参与者被授权来接收会话的内容。
在一些实施例中,服务器维护(544)相应的会话的一组参与者,包括服务器系统的一个或多个订户和由电子邮件地址识别的电子邮件参与者。
在一些实施例中,服务器维护(546)相应的会话的一组参与者,包括由服务器托管的会话系统的一个或多个订户和其上张贴了会话的内容的网络日志。
图5C示出图5A的方法500的继续部分。在一些实施例中,服务器对于(由包括该服务器的一组服务器托管的会话系统的)相应用户维护(550)其中用户是参与者的会话的列表。当相应的会话的状态改变时,服务器更新在列表中的每一个这样的会话的状态。在来自用户(例如,来自被用户使用的客户端)的请求时,服务器向用户发送包括其中用户是参与者的会话的列表的至少一部分的列表,该列表包括列出的会话的状态信息。在一些实施例中,服务器对其维护(552)会话列表的每一个相应用户是托管的会话系统的订户。
图5D示出托管电子消息的方法560。服务器托管(562)多个会话。服务器向与会话的参与者相关联的多个客户端提供(564)会话的内容,包括向每一个客户端提供客户端已经被配置来接收的会话的所有内容。
服务器从会话的相应的参与者接收(566)内容,并且向与会话的其他参与者相关联的客户端发送所接收的内容的至少一部分。服务器也在向会话增加另外的参与者时向与该另外的参与者相关联的客户端提供(568)与该另外的参与者相关联的客户端已经被配置来接收的会话的所有内容。
图5E示出托管电子消息的方法570。对于其中每一个与不同的用户子集相关联的多个服务器中的至少一个,服务器托管(572)由相应的用户子集启动的会话。服务器从会话的相应参与者接收(574)内容,并且使得该内容可被会话的其他参与者获得。对于与其他会话服务器相关联的参与者,该内容被发送到那些其他会话服务器。当参与者登录并且请求会话的内容时,该内容被发送到该参与者。
服务器也在向会话增加另外的参与者时向与该另外的参与者相关联的客户端提供(576)会话的所有内容,或者替代地,提供(576)与该另外的参与者相关联的客户端已经被配置来接收的会话的所有内容。在一些实施例中,服务器向多个参与者提供(578)会话的统一视图。
图6是根据本发明的某些实施例的、具有多个链接的会话服务器130的会话系统600的框图。图6图示会话服务器130彼此的逻辑耦合和会话服务器130与客户端的逻辑耦合,以监控和报告系统用户的在线状态(存在)。网络600包括会话服务器130-A、130-B和130-C。会话系统600可以包括比在图6中所示的更多或更少的会话服务器。每一个会话服务器130托管一组用户138的会话。(例如,每一个会话服务器130可以托管由几百或甚至几千用户启动的会话。)会话服务器130-A被分配用户138-A;会话服务器130-B被分配用户138-B;并且会话服务器130-N被分配用户138-N。每一个会话服务器130包括相应的状态监视器134(134-A、134-B、134-N)和相应的状态收集器136(136-A、136-B、136-N)。
每当用户改变在线状态(例如,通过登录到会话系统而从离线改变为在线)时,相应的状态监视器134(例如,被分配给该用户的会话服务器130中的状态监视器)检测在状态上的改变。在用户被分配到的会话服务器处的状态监视器134接收消息或将在那个用户的在线状态上的改变检测为“在线”(或“活动”、“忙”或适当的任何状态)。而且,在会话服务器处的状态收集器136收集在那个用户的联系人列表416中的联系人的在线状态。在用户的联系人列表中的一些联系人可以被分配到同一会话服务器,而在用户的联系人列表中的其他联系人被分配到其他会话服务器。
用户被分配到的会话服务器的状态收集器136收集用户的联系人的在线状态,包括向其他会话服务器分配的那些,并且将所收集的状态信息的至少一部分向用户(即,向被用户当前使用的客户端装置或系统)转发。在一些实施例中,状态收集器向其他会话服务器广播对用户的联系人的状态信息的请求,并且联系人被分配到的会话服务器响应于该请求。在其他一些实施例中,状态收集器确定联系人被分配到的会话服务器,并且向那些会话服务器发送对状态信息的请求。在一些实施例中,通过参考所有用户的索引,可以确定用户到会话服务器的分配,所有用户的索引可以被存储在所有的会话服务器或其子集中。
例如,如果分配到会话服务器130-A的用户138-A中的用户A1将在线状态从离线改变为在线,则在被用户A1使用的客户端处的客户端应用向会话系统600发送声明用户A1在线的消息。在会话服务器130-A处的状态监视器134-A接收该消息,并且将用户A1的状态更新为在线。其他会话服务器的状态监视器134或者不接收这个消息,或忽略它,因为用户A1未被分配到那些其他会话服务器。在会话服务器130-A处的状态收集器136-A获得用户A1的联系人的列表(例如,通过访问用户A1的联系人列表416)。利用那个联系人列表,状态收集器136-A从该联系人被分配到的会话服务器收集状态信息。因此,如果联系人被分配到会话服务器130-A,则状态收集器136-A访问在会话服务器130-A处存储的联系人的状态信息。如果联系人被分配到会话服务器130-B,则服务器130-A与会话服务器132-0进行通信,以获得状态信息。如果相应的联系人被分配到会话服务器130-C,则发生类似的过程。
图7是图示根据本发明的一个实施例的会话服务器700(有时也称为会话系统)的框图。会话服务器700包括一个或多个处理单元(CPU)702、一个或多个网络或其他通信接口704、存储器706和用于互连这些部件的一条或多条通信总线708。通信总线708可以包括互连系统部件并且控制其间的通信的电路(有时称为芯片集)。会话服务器700可选地包括(但是通常不包括)具有显示装置和键盘的用户接口。
存储器706包括高速随机存取存储器,诸如DRAM、SRAM、DDRRAM或其他随机存取固态存储器装置;并且可以包括非易失性存储器,诸如一个或多个磁盘存储装置、光盘存储装置、闪速存储装置或其他非易失性固态存储装置。存储器706可以可选地包括远离CPU 702定位的一个或多个存储装置。存储器706,或替代地在存储器706内的非易失性存储器装置,包括计算机可读存储介质。在一些实施例中,存储器706或存储器706的计算机可读存储介质存储下面的程序、模块和数据结构或其子集:
●操作系统710,其包括用于处理各种基本系统服务并且用于执行硬件相关的任务的过程;
●网络通信模块712,其用于将会话服务器700经由一个或多个通信网络接口704和一个或多个通信网络连接到其他计算机,该一个或多个通信网络例如是因特网、其他广域网、局域网和城域网等;以及
●会话引擎714,其向多个用户提供在服务器700上的托管的会话服务;在一些实施例中,会话引擎714对应于图2的元件246。
会话引擎714可以包括下面的模块或其子集:
●搜索/访问模块716(在一些实施例中,这对应于图2的元件260),用于执行会话数据库726的搜索;会话数据库726的搜索可以包括用户指定的搜索718以及服务器指定的搜索720(例如,对于在用户的收件箱中的会话的搜索);
●用户数据库722(在一些实施例中,这对应于图2的元件270和图4的元件400),用于存储与系统的用户相关的信息;
●用户数据库管理模块724,用于管理用户数据库722(例如,用于建立新的用户记录,并且用于更新现有的用户记录);
●会话数据库726(在一些实施例中,这对应于图2和图3的元件262);
●会话管理模块728,用于管理会话数据库726;以及
●辅助服务模块250;如上所述,可以通过在会话服务器700内的模块或其他服务器提供在托管的会话系统中提供的每一个特定的辅助服务。
在一些实施例中,会话管理模块728包括下面的模块或其子集:
●一组会话更新模块730,用于使用由一个或多个参与者进行的改变来更新会话,该模块包括下述中的一个或多个:增加/删除内容模块732,用于相对于会话增加或去除内容;划分内容贡献模块734,用于将在会话中的内容贡献(图3A中的326)划分为两个和更多的独立内容贡献;合作编辑模块736,用于使能会话或由多个参与者的内容贡献(内容单元)的同时编辑;以及向会话增加新参与者模块738,用于向会话增加新的参与者;
●内容重放模块740,用于重放对于会话或文档(或会话或文档的用户指定部分)的编辑;
●内容格式化模块742,用于格式化内容以匹配客户端的配置;(用于相应用户的客户端的配置可以通过用于相应用户的用户记录402的、图4的元件420指定);
●向电子邮件内容发布模块744,用于向电子邮件地址发布会话的内容;电子邮件地址可以由用于相应用户的用户记录402的、图4的元件432指定;
●向网络日志(“博客”)内容发布模块746,用于向网络日志发布会话的内容;网络日志的URL或者网络位置可以由用于相应用户的用户记录402的、图4的元件430指定;
●删除/归档会话模块748,用于从用户的收件箱或会话观看者删除或归档会话;
●向新的会话复制附件模块750,用于从一个会话向另一个会话复制附件,而不复制会话的其他内容;
●发送会话模块752,用于向客户端或另一个会话服务器发送会话的内容(例如,以向由其他会话服务器服务的用户/客户端递送);以及
●发送会话列表模块754,用于向客户端或另一个会话服务器发送会话的列表(例如,以向由其他会话服务器服务的用户/客户端递送)。
上面识别的元件中的每一个可以被存储在前述存储器装置的一个或多个中,并且对应于用于执行如上所述的功能的一组指令。上面识别的模块或程序(即,指令集)不必被实现为独立的软件程序、过程或模块,因此,在各个实施例中,可以组合或重新布置这些模块的各个子集。在一些实施例中,存储器706可以存储如上面识别的模块和数据结构的子集。而且,存储器706可以存储上面未描述的额外模块和数据结构。
虽然图7示出会话服务器,但是图7更意欲是可以存在于一组服务器中的各种特征的功能说明,而不是在此所述的实施例的结构示意。实际上,并且本领域内的技术人员可以认识到,独立地示出的项目可以被组合,并且一些项目可以被分离。例如,在图7中独立地示出的一些项目可以被实现在单个服务器上,并且单个项目可以被一个或多个服务器实现。用于实现会话服务器系统的服务器的实际数量和如何在它们之间分配特征将随实现方式而不同,并且,可以部分地依赖于在峰值使用时间段期间以及在平均使用时间段期间系统必须处理的数据业务量。
图8是根据本发明的某些实施例的具有参与在托管的会话系统中的一个或多个会话的用户的客户端的框图。客户端800包括一个或多个处理单元(CPU)802、一个或多个网络或其他通信接口804、存储器806和用于互连这些部件的一条或多条通信总线808。通信总线808可以包括互连系统部件并且控制其间的通信的电路(有时称为芯片集)。客户端800通常包括用户接口805。在一些实施例中,用户接口包括显示装置、键盘和指示装置(未示出),而在其他实施例(例如,蜂窝电话或个人数字助理)中,用户接口包括触摸屏显示。
存储器806包括高速随机存取存储器,诸如DRAM、SRAM、DDRRAM或其他随机存取固态存储器装置;并且可以包括非易失性存储器,诸如一个或多个磁盘存储装置、光盘存储装置、闪速存储装置或其他非易失性固态存储装置。存储器806可以可选地包括远离CPU 802定位的一个或多个存储装置。存储器806,或替代地在存储器806内的非易失性存储器装置,包括计算机可读存储介质。在一些实施例中,存储器806或存储器806的计算机可读存储介质存储下面的程序、模块和数据结构或其子集:
●操作系统810,其包括用于处理各种基本系统服务并且用于执行硬件相关的任务的过程;
●网络通信模块812,其用于将客户端800经由一个或多个通信网络接口804和一个或多个通信网络连接到其他计算机,该一个或多个通信网络例如是因特网、其他广域网、局域网和城域网等;以及
●浏览器或其他客户端应用814,用于观看网页和其他内容(包括在托管的会话系统中的会话)并且与其交互;
●会话网页815,从会话服务器(例如,如图7中所示)接收它,并且使用浏览器或其他客户端应用814来显示它;
●会话记录820,其包含从会话服务器下载的会话的内容,该会话的内容的一些或全部可以被显示在会话网页815中;
●会话列表826,它是从会话服务器下载的会话的列表(例如,响应于来自客户端的用户的查询或作为在会话网页815内显示的用户界面的一部分);
●联系人列表828或客户端的用户的联系人列表的一部分;该联系人列表可以与会话系统分离地或与其相结合地被维护;
●可选地,其他数据结构830(例如,由用户定义的标签的列表);以及
●可选地,被客户端800执行的其他应用832。
在一些实施例中,会话网页815包括客户端会话模块818或在网页815中嵌入的其他客户端助理。客户端会话模块818包括被客户端800执行的可执行指令;例如,客户端会话模块818可以包括被作为浏览器814的一部分的虚拟机(例如,Java虚拟机)执行的指令。会话网页815包括会话用户界面,会话用户界面具有图标,该图标当被用户激活时,执行各种任务以使得用户能够请求会话的列表、选择要显示的会话、观看会话的各个部分、参与会话(例如,通过向会话增加内容或编辑会话的内容)、开始新的会话和下载附件等。在会话用户界面中的图标可以作为指向可执行过程的链接和在客户端会话模块818中的指令。在一些实施例中,可以响应于由客户端会话模块818或在网页815中嵌入的其他客户端助理向会话服务器发送的指令来下载上述会话记录820和会话列表826。
会话记录820包括关于相应会话的、如上参考图3A所述的会话记录310的客户端版本或子集。客户端会话记录820包括由客户端需要的会话元数据822(例如,参与者的列表和他们的在线状态)和作为会话的内容的内容贡献824。根据客户端800的实现方式和能力,会话记录820可以可选地包括会话的附件——如果有的话。因此,可以向一些客户端(例如,台式和膝上型计算机)而不向其他(例如,移动电话和个人数字助理)下载附件。在一些实施例中,不下载会话的附件,直到用户请求它们。替代地,在一些实施例中,将一些或所有附件的缩略图和/或摘录(例如,所选择的文本,如果有的话)与会话的主内容一起自动地下载到客户端800,并且,仅在用户请求时向客户端800下载附件的全部内容。
上面识别的模块的每一个对应于用于执行如上所述的功能的一组指令。上面识别的模块或程序(即,指令集)不必被实现为独立的软件程序、过程或模块,因此在各个实施例中,可以组合或重新布置这些模块的各个子集。在一些实施例中,存储器806或存储器806的计算机可读存储介质可以存储如上面识别的模块和数据结构的子集。而且,存储器806或存储器806的计算机可读存储介质可以存储上面未描述的额外模块和数据结构。
图9A和9B图示用于示出由会话的多个参与者对于会话的编辑和那些编辑的重放的一系列窗口。
图9A图示由在会话中的多个参与者对于会话进行的改变。在下面的示例中,在会话中至少有两个参与者“Joe”和“Pat”。
在第一时间/步骤920,第一会话窗口910具有第一参与者(例如,Joe)输入的第一内容单元922,第一参与者是内容922的初始作者。在一些实施例中,会话窗口910包括:缩放(zoom)选项912,用于向会话内更深地缩放;答复(reply)选项914,用于答复内容922;起草(draft)选项916,用于创建起草消息;或设置(setting)选项918,用于改变会话设置。第一插入符号924表示第一参与者键入或编辑内容922的点(在此有时被称为光标位置)。当第一参与者键入内容922、删除内容922或在内容922周围移动时,插入符号924移动,用于指示在用户正在编辑的内容中的位置或内容的一部分。
在一些实施例中,可以将插入符号定义为XML标签或其他标记语言标签或表达。在一些实施例中,参与者、系统管理员等可以选择或定义插入符号内容、风格等。
在第二时间/步骤930,第二参与者(Pat)向内容922提供编辑的序列。第二插入符号934表示第二参与者(也称为第二用户)键入或编辑内容922的点。第二用户向内容922加上文本“建筑物B”932。原始内容(通过Joe)和对于其的编辑(通过Pat)是通过在会话中不同的第一和第二参与者进行的编辑。
在一些实施例中,服务器(例如,用于托管会话)准备在与由会话的第一参与者(Joe)进行的第一编辑对应的位置处显示第一插入符号,并且在与由会话的第二参与者(Pat)进行的第二编辑对应的位置处显示第二插入符号。服务器向一个或多个服务器提供第一和第二编辑和第一和第二插入符号以显示。
在一些实施例中,时间戳或序列号(例如,#1、#2、#3和#4,如所示)可以与对于现有内容的新的内容或编辑相关联。在一些实施例中,如果使用时间戳,则时间戳使用一致的时基,诸如托管服务器的时基。
在第三时间/步骤940,第二用户通过下述方式再一次编辑内容922:删除词“second”并且将其替换为词“third”942。第二插入符号934现在在词“third”旁边,用于指示第二用户正在进行编辑的位置。
在第四时间/步骤950,第一用户Joe在会话窗口910内并且第一消息窗口(其包含第一消息的内容922)之下的新的消息窗口952中创建新的消息,并且向新的消息窗口增加新的内容954。插入符号956表示第一用户(Joe)在新的消息窗口952中键入或编辑内容954的新点。
在一些实施例中,当接收到新内容(例如,内容922)或编辑的序列(例如,编辑932、942)时,使用修订的内容单元来更新会话。在一些实施例中,向用于托管用于在会话中的参与者(例如,Joe、Pat等)的会话的一个或多个服务器提供更新的会话。
在一些实施例中,用于托管会话的服务器检查在第一编辑和第二编辑之间的冲突,并且如果发生冲突,则服务器通知与该冲突相关联的参与者。例如,如果参与者Pat试图编辑Joe当前正在编辑的文本片段,使得编辑彼此冲突(例如,当Joe键入一个词时Pat删除它,或Joe删除其中Pat正在编辑的段落),则发生冲突,并且通知参与者中的一个或两者。在一些实施例中,使用预定义的并发控制过程来自动地解决冲突,如下更详细所述。
图9B图示在图9A中图示的对于会话的编辑的重放。在一些实施例中,以时间顺序,例如根据与编辑相关联的时间戳来重放编辑。在一些其他实施例中,根据与编辑相关联的序列号来重放编辑。会话的参与者可以使用重放机制来观看对于会话的改变。
在一些实施例中,重放会话,以时间顺序示出在会话的用户指定部分(例如,文本块、段落、单个会话单元(评论)等)内的改变。在一些实施例中,重放会话的该用户指定的部分,而不观看对于会话的其他部分的改变。在一个示例中,用户指定的部分是会话的单个内容单元。
在第一重放时间/步骤中,在窗口964中显示内容966。显示向前(forward)选项962,其允许观众在会话重放中前行。
在第二重放时间/步骤中,通过在窗口964中选择向前选项962而获得的内容970示出由第二参与者(Pat)对于会话进行的编辑,增加了词“Building B”。显示向后(back)选项972,其允许参与者在会话重放中向后移动,并且继续显示向前选项962。
在第三重放时间/步骤中,通过在观看第二重放时间/步骤的同时在窗口964中选择向前选项962而获得的内容980示出由第二参与者(Pat)对于会话的进一步的编辑,将词“second”替换为“third”。
在第四重放时间/步骤中,通过在观看第三重放时间/步骤的同时在窗口964中选择向前选项962而获得的内容990示出由第一参与者(Joe)对于会话的进一步的编辑(具有文本的新的窗口992)。重放(replay)选项994允许参与者重放对于会话的更新的序列。在一些实施例中,一个或多个重放选项使得参与者能够执行下面的操作中的一个或多个:重放最近的编辑(例如,在时间或在数字上的最近)、由特定参与者进行的编辑、对于会话的特定部分的编辑等。
在一些实施例中,重放可以仅示出由会话的特定参与者进行的改变。这可以允许参与者查看他的/她的改变或查看另一个参与者的改变。
在一些实施例中,在编辑序列中的编辑包括由在会话中的相应参与者进行键击序列的单独键击。在一些实施例中,在编辑序列中的多个不同的编辑是不同的键击。在一些实施例中,在编辑序列中的多个不同的编辑是不同的词。例如,由参与者Pat进行的编辑932包括不同的词(Building)和不同的字母(B),并且编辑942包括删除操作(删除词“second”)和增加操作(增加词“third”)。在一些实施例中,当用于托管会话的服务器接收到这些不同的编辑中的每一个时,相应更新会话。
图10图示参与者在起草模式中准备消息。虽然在起草模式中,参与者进行编辑,诸如在会话中增加或删除内容,并且该编辑被用于托管会话的服务器接收,但是不被发送到在会话中的其他参与者。仅当参与者例如通过指示他/她结束进行编辑来退出起草模式时,服务器释放参与者的编辑(即,向其他参与者的客户端发送),使得其他参与者可以观看它们。作者(即,在起草模式中工作的参与者)可以准备内容,知道中间改变或想法不被其他参与者看到,直到作者准备好。
在一些实施例中,当一个参与者在起草模式中正在编辑(会话的)内容单元时,禁止由其他参与者进行对该内容单元的编辑。不禁止由其他参与者对同一会话的其他内容单元的编辑。
在一些实施例中,“组起草模式”允许多个参与者(例如,组A的成员)一起工作来准备或编辑内容,并且看到彼此的编辑,同时防止非组参与者看到内容或编辑,直到退出组起草模式。当组成员一起工作来准备要向在会话中的其他参与者发布的内容时,使用组起草模式保护组成员的隐私。
多种不同的机制可以用于退出组起草模式或释放由参与者的组准备的内容。例如,当组成员同意应当发布编辑时,可以退出组起草模式(或可以释放由相应的组准备的内容以向其他会话参与者发布)。在一些实施例中,为了退出组起草模式,所有的组成员必须同意发布编辑或内容,而在一些其他实施例中,大多数组成员必须同意发布编辑或内容,并且在另一些实施例中,一个或多个资深组成员确定何时发布编辑或内容。
在组起草模式中,当会话的相应参与者对会话进行编辑时,向与组成员相关联的服务器提供更新的会话。在一些实施例中,对会话的编辑被提供到与非组成员相关联的服务器,但是延迟编辑的显示。在一些实施例中,不向与非组成员相关联的服务器提供对会话的编辑,直到结束起草模式。
而且,在“组”起草模式中,接收来自参与者(作者)和一个或多个组成员的对会话的编辑,更新会话,并且向与相应的参与者和其他组成员相关联的一个或多个服务器提供更新的会话。
在第一时间/步骤1010中,第一作者/参与者(例如,作为组A(TeamA)的成员的Joe)在窗口1012中准备消息。批准(approval)选项1014(例如,使用用于批准(approved)的勾号和用于不批准(not approved)的叉号1016)示出第一作者还没有批准消息。当第一参与者批准消息时,这可以被表示为在选项1014中的勾号1033。第一作者输入内容1011,并且插入符号1018指示在内容中的第一作者的当前文本输入或编辑位置。在一些操作模式中,当第一作者输入内容1011时,使得该内容可被与第一用户同一组的成员看到。
在第二时间/步骤1020中,第二参与者(也作为组A(Team A)的成员的Pat)编辑内容1011(在这个示例中,将″$100″改变为″$110″),以产生更新的内容1021。第二插入符号1026示出在内容中的第二参与者的文本输入或编辑位置。与第二参与者相关联的批准选项1022被显示在窗口1012的顶部,并且象与第一参与者相关联的批准选项1014那样起作用,如上所述。当第二参与者编辑内容时,使得更新的内容1021可被同一组的成员看到。
在第三时间/步骤1030中,第一(Joe)和第二(Pat)参与者批准消息发布。这通过与批准选项1014(用于第一参与者Joe)和1022(用于第二参与者Pat)相关联的勾号1033指示。然后,将批准的内容(1031)向在会话中的其他参与者发布。
在第四时间/步骤1040中,由第一和第二参与者进行的编辑被发布,使得在组A之外的会话参与者(例如,组B的成员)现在可以观看发布的内容1041。
在图10中所示的示例中,所有的基于组的起草和编辑在用于一个内容单元的一个消息窗口1012中出现。在其他实施例中,基于个体或组的起草可以出现在多于一个窗口或内容单元中,并且可以包括增加新的消息或编辑现有的消息。
图11A-B是表示根据本发明的某些实施例的、用于编辑、重放和起草在服务器托管的会话的方法的流程图。这些方法被在计算机可读存储介质中存储并且由一个或多个服务器的一个或多个处理器执行的指令控制,如所述。
图11A示出用于在服务器(例如,在图2的托管的会话数据库262中)处托管会话的方法1100。服务器托管(1102)多个会话,每一个会话具有被识别的一组参与者。
服务器从在会话中的相应的参与者接收(1104)内容单元(例如,在图3A中的被存储为内容贡献326的每一个内容单元),并且向托管在会话中的参与者的会话的一个或多个服务器发送所接收的内容单元的至少部分。可选地,当作者编写内容单元的内容时,从由内容单元的作者使用的客户端向其他参与者发送各键击(1106)。
服务器从除了会话的相应内容单元的初始作者之外的至少一个参与者接收(1108)对该相应内容单元的、包括第一编辑和第二编辑的编辑的序列,以产生修订的内容单元。可选地,对内容单元的第一和第二编辑是由在会话中的不同的第一和第二参与者进行的编辑(1110)。
可选地,或在一些操作模式中,在从会话的第一参与者接收对内容单元的编辑时,禁止由在会话中的其他参与者进行对相应内容单元的编辑(1112)。替代地,使能由在会话中的多于一个参与者进行的同时编辑(1113)。如下更详细所述,解决在不同的参与者进行的同时编辑之间的任何冲突,并且向所有的会话参与者发布(或使得其可获得)结果产生的一致的内容。
在一些实施例中,准备第一插入符号(例如,在图9A中的用于识别Joe的插入符号924)以在与由会话的第一参与者进行的第一编辑对应的位置处显示(1114),以及准备第二插入符号(例如,用于识别Pat的插入符号934)以在与由会话的第二参与者进行的第二编辑对应的位置处显示,并且向一个或多个服务器提供第一和第二编辑与第一和第二插入符号(或插入符号位置)。在会话中的活动的参与者(例如,其客户端当前正在显示会话的参与者)可以看到与内容单元的并发作者/编辑者相关联的插入符号。
在一些实施例中,在编辑的序列中的多个编辑包括不同的键击(1116)。在这些实施例中,当对会话的更新/编辑的作者输入那些更新/编辑时,由在会话中的活动的参与者使用的客户端基本上同时地显示对会话的更新/编辑。
在一些实施例中,在编辑的序列中的多个编辑包括不同的词(1118)。在这些实施例中,当对会话的更新/编辑的作者输入那些更新/编辑时,由在会话中的活动参与者使用的客户端基本上同时地逐词地显示更新/编辑。
对于在对内容单元的编辑序列中的每一个不同的编辑存储相应的时间戳或序列号(1120),包括用于对内容单元的至少第一和第二编辑的不同的时间戳或序列号。
使用修订的内容单元来更新(1222)会话,并且自动地向托管用于在会话中的参与者的会话的一个或多个服务器提供更新的会话。
图11B继续用于在服务器托管会话的方法1100,如图11A中所示。
在一些实施例中,对于在会话中的每一个内容单元存储(1130)时间戳(例如,由图9A的920、930、940、950等指示并且在图3B的时间戳341中存储的时间戳1、2、3、4)。
向会话的相应参与者发送(1132)表示编辑的序列的数据,因此使得相应的参与者能够根据编辑的序列来观看对会话的改变。
在一些实施例或操作模式中,允许相应的参与者以时间顺序观看(1134)对会话(或会话的用户指定部分)的改变,例如,即使该改变在会话中彼此隔开。换句话说,在一些操作模式中,在客户端应用中的重放功能以时间顺序显示对会话的改变的序列。例如,在图9B中,重放会话以示出作为由在会话中的参与者增加和编辑内容的结果的对会话的改变。
在一些实施例或操作模式中,允许相应的参与者例如使用向后972和向前974按钮导航通过在会话中的改变来以时间顺序来观看(1136)在会话的逻辑部分中的改变的序列。换句话说,在一些操作模式中,在客户端应用中的重放功能以时间顺序来显示在会话的逻辑部分中的改变的序列。这允许参与者看到在会话中的感兴趣的特定部分中的改变的序列,而不看到在不相关的部分中的改变。例如,其改变被显示的会话的逻辑部分可以是会话的单个内容单元(1138)。替代地,其改变被示出(当使用重放功能时)的会话的逻辑部分是会话的多个用户选择的内容单元。
在一些实施例中,允许会话的相应的参与者观看(1140)由会话的另一个相应参与者对会话的改变,以例如如图9A中所示观看由第一参与者Joe或第二参与者Pat进行的所有改变。
在一些实施例中,服务器延迟(1142)提供由在起草模式中操作的相应的参与者对会话的编辑,并且向其他参与者(例如,向托管其他参与者的会话的服务器,并且向由那些其他参与者使用的客户端)提供更新的会话,直到相应的参与者退出起草模式或释放他/她已经进行的会话编辑/更新。例如,不向组B提供图10的编辑1011、1021,直到在组A的成员(Joe,Pat)批准编辑,并且结束起草模式。在一些实施例中,在用于会话的参与者会话状态372(图3B)中存储起草模式信息或起草批准信息或状态。
在一些实施例中,当相应的参与者(其是组成员)使用组起草模式来对会话进行编辑时,服务器向与另一个组成员相关联的服务器提供(1144)更新的会话(例如,Joe可以看到Pat的编辑,并且反之亦然),并且延迟向与非组成员相关联的服务器提供由相应的参与者对会话进行的编辑(例如,在起草模式期间组B不能看到组A的编辑)。在结束起草模式后,服务器向与非组成员相关联的服务器提供包括由相应的参与者对会话进行的编辑的更新的会话。替代地,在起草模式期间进行的会话编辑被同时提供到与所有的会话参与者相关联的服务器,但是改变被标注为起草模式改变,因此不被提供到在进行改变的参与者的组之外的参与者,直到退出起草模式或(例如,由参与者或由参与者的组)批准或释放会话更新。
在一些实施例中,当在第一会话中的一组参与者启动在组起草模式中的会话的编辑时,创建独立的会话。组成员起草在独立的会话内的内容,并且当组结束起草时,独立的会话或其一部分被合并回第一会话内,在这个点,使得新的或编辑的内容可被在第一会话中的其他参与者获得。
并发控制
上述的合作编辑模块736(图7)允许多个参与者(客户端)同时编辑会话,并且提供冲突检测和解决方案以确定参与者的编辑是否冲突(即,满足预定义的传统标准)。在相应的客户端处,用户使用“乐观用户界面”输入和编辑会话内容,该“乐观用户界面”假定在由客户端装置的用户和同一会话中的其他参与者进行的内容输入和编辑之间没有冲突,直到由向客户端提供会话托管服务的会话服务器告知有冲突。
参见图15,在会话中的一个或多个参与者在它们的本地客户端对会话进行编辑(1510),该本地客户端向会话服务器提供用户编辑(1512),该会话服务器向客户端提供会话服务。在会话服务器系统处接收由每一个参与者进行的用户编辑(1520)。
当两个(或更多)会话参与者(在此为了容易识别称为“竞争参与者”,这与当前未对会话进行冲突的编辑的任何其他参与者相对)进行冲突的改变(编辑)时,冲突的编辑满足预定义的冲突标准,并且对由竞争的参与者进行的编辑执行变换操作,使得在每一个客户端上的会话的状态是一致的。换句话说,响应于竞争参与者已经进行了冲突的编辑(即,满足预定义的冲突标准的编辑)的确定来执行变换操作。而且,会话服务器通过下述方式来减少它需要执行的变换操作的数量:将在每一个客户端进行的编辑的序列合并为编辑的合并序列(1522),然后对由竞争的参与者进行的编辑的合并序列执行变换操作(1524)。结果产生的编辑的变换序列中的至少一个与其得自于的编辑的对应的合并序列不同。编辑的相应的变换序列与序列信息(1524,1534)被发送到竞争参与者的客户端(和任何其他活动参与者),以使得每一个客户端能够应用本地进行的编辑和以正确的顺序接收的编辑的变换序列,以便再现会话的正确的当前状态(1536)。
当两个(或更多)会话参与者进行非冲突改变(编辑)时,会话服务器仍然将在每一个客户端进行的编辑的序列合并为编辑的合并序列(1522)。编辑的每一个合并的序列被分配时间戳和/或序列号(参见图3A的会话日志324的上面的说明),并且被发送到会话参与者的客户端(1522,1530),使得所有的参与者具有会话状态的一致记录。相应的客户端应用所接收的合并编辑序列以更新本地存储的会话状态(1532)。在其正在显示会话的每一个客户端根据本地进行的编辑和从会话服务器接收的其他参与者的编辑的合并的序列来更新其会话的显示(1538)。
在客户端需要特殊处理的特殊情况如下。如果在客户端接收到编辑的变换序列时,使用客户端的参与者已经进行了与在所接收的编辑的变换序列中记录的改变冲突或潜在冲突的另外的改变,则客户端对所接收的编辑序列执行第二变换,当服务器接收到在客户端作出的另外的改变时在服务器预期要对所接收的编辑序列进行变换。作为对所接收的编辑序列的第二变换和由服务器对在客户端进行的编辑应用的变换的结果,使得会话状态在参与的用户的客户端上和在托管服务器上一致。换句话说,客户端中的每一个包括要被应用到所接收的在其他客户端进行的编辑的操作变换指令,该操作变换指令考虑将由服务器对在那些客户端操作进行的编辑执行的变换。会话在沿着路径的每一个步骤的状态通过对应的序列号表示,该对应的序列号被客户端和会话托管服务器使用来保证在客户端和服务器处进行的变换被协同或同步,并且产生一致的会话状态(1536)。
注意,在继续的基础上向会话服务器发送本地进行的编辑(1512),因此,在所接收的编辑的变换的序列后进行的编辑也被发送到会话服务器,并且产生合并的编辑序列和产生变换的编辑序列(如果需要)的处理继续。结果,在每一个客户端处的会话的状态反映了由活动的参与者进行的编辑的交织序列,其中,编辑的序列的一些是已经被变换使得在由会话参与者使用的每一个客户端处实现一致状态的变换序列。
如上所述,在一些实施例中,在托管会话的会话服务器系统130和当必要时由接收与在客户端进行的干扰编辑冲突的变换编辑的那些客户端执行会话的并发控制操作。
被合并到合并的编辑序列(1522)内的编辑的数量至少部分地依赖于参与者输入编辑的速率。可能影响被合并的编辑的数量的另一个因素是其他参与者是否同时在编辑同一内容。例如,当没有由其他参与者进行的竞争编辑时,可以合并相对长的编辑序列。然而,当其他参与者正在进行竞争编辑时,合并相对短的编辑序列(例如,限于在N秒的时间段中进行的编辑,其中,N通常小于或等于0.5)。在其他实施例中,参与者进行的编辑(包括内容输入以及先前输入的内容的修订和对共享的元数据的改变)被立即发送到在会话中的其他活动参与者——如果有的话,而不执行任何合并。当检测到冲突时,对于每一个单独的编辑操作(在托管会话服务器或在另一个服务器处)产生变换,然后将其转发到其他活动的参与者。如上所述,当自与会话状态序列号对应的时间起所接收的变换的编辑与在本地客户端进行的编辑冲突时,在接收客户端处执行对相应的接收的变换编辑进行的第二级变换。
为了将被定义为在编辑输入和其在其他参与者的客户端处的出现之间的延迟的时延保持得低,由参与者进行的编辑通常尽可能快地被发送到其他活动参与者,而与编辑序列合并无关。在“实况冲突(liveconflict)”期间(当两个或更多的参与者正在修订会话的相同部分时)的编辑的快速变换和转发使得向参与者精确地通知在实况冲突期间的演进的会话状态。因为合并操作和然后将它们变换到活动的参与者将增加时延,所以在实况冲突期间,或者不使用操作合并,或将操作合并仅用于很小的时间窗口。另一方面,为了在会话日志324(图3C)中记录会话历史以重放,合并在短时间段中执行的操作的序列。如上所述,会话日志记录385可以包括当多于一个作者同时或在重叠的时间期间正在编辑同一会话时用于识别对会话状态的改变的多个作者的作者列表390。而且,当在参与者之间没有冲突时,从编辑序列的开始直到用户选择了“完成”图标或按钮的由参与者进行的编辑的整个序列被合并为单个编辑序列以存储在单个会话日志记录385(图3C)中。
图12图示过程图,该过程图示出在从两个参与者接收的多个潜在冲突的编辑之间的并发控制的应用。在图12中所示的示例示出包括XML标签和内容的ASCII文本的变换操作。在第一参与者(客户端)和第二参与者(客户端)处执行操作。
从会话的第一参与者接收对会话的相应内容单元的编辑的第一序列,并且将编辑的第一序列转换为编辑的第一合并序列(1212)。从会话的第二参与者接收对会话的相应内容单元的编辑的第二序列,并且将编辑的第二序列转换为编辑的第二合并序列(1216)。
编辑的第一合并序列(1212)被变换以产生编辑的第一变换序列(1232),并且编辑的第二合并序列被变换以产生编辑的第二变换序列(1222)。编辑的第一变换序列(1232)被发送到第二参与者,并且编辑的第二变换序列(1222)被发送到第一参与者。在第一客户端,第一合并序列(1212)被应用到初始会话状态D1,以产生中间会话状态D2,并且然后,编辑的第二变换序列(1222)被应用到会话状态D2,以产生新的会话状态D4。在第二客户端,编辑的第二合并序列(1216)被应用到初始会话状态D1以产生中间会话状态D3,然后编辑的第一变换序列(1232)被应用到中间会话状态D3,以产生与在第一客户端产生的相同的新的会话状态D4。因此,生成编辑的变换序列1232和1222,使得当它们在本地进行的编辑(对应于那个客户端的编辑的合并序列)的应用后被应用到会话状态时,在两个客户端中的会话状态会聚为一致的状态。
在图12的示例中,每一个ASCII文本字符具有大小1,并且每一个开始和结束XML标签具有大小1。在图12的示例中,“删除文本”指的是操作的文本删除组件,并且“删除元素”指的是元素删除操作。伴随文本或元素删除操作的数字指的是元素删除的大小。“插入元素”用于向会话单元增加XML标签,并且“插入文本”用于插入文本。内容更新操作(编辑)的合并序列的变换考虑在会话单元中的每一个操作的位置,并且也考虑重复操作(例如,完成删除同一文本的操作),或更一般而言,使得其他竞争操作无实际意义的操作。
初始会话状态D1 1210包括第一字符串:
D1=<example>abcdefg</example>
第二(或修订的)会话状态D4 1240包括第二字符串:
D4=<example>a<tagName attr1=“value1”attr2=“value2”>
A<nested>B</nested>C</tagName>fg</example>
中间会话状态D2 1220包括第三字符串:
D2=<example>ab<tagName attr1=“value1”
Attr2=“value2”>A<nested>B</nested>C</tagName>
fg</example>
中间会话状态D3 1330包括第四字符串:
D3=<example>aefg</example>
编辑的第一合并序列1212提供了下面的编辑:
skip 3
insert element start with tag name“tagName”and
attributes[attr1=“value1”,attr2=“value2”]
insert text“A”
insert element start with tag name“nested”and
attributes
insert text“B”
insert element end
insert text“C”
insert element end
delete text 3(例如,文本cde)
当编辑的第一合并序列1212被应用到初始会话状态D1 1210时,结果是中间会话状态D2 1220,如上所述。虚线框1214指示状态D2的部分,其中,由编辑的第一合并序列1212对于D1进行改变。
编辑的第二变换序列1222提供了下面的编辑:
skip 2
delete text 1
编辑的第二变换序列1222从中间会话状态D2删除字母“b”1224。这个操作的结果是第二(或修订)的会话状态D4 1240。
编辑的第二合并序列1216提供下面的编辑:
skip 2
delete text 3(例如,删除“bcd”)
编辑的第二合并序列1216从第一会话状态D1删除字母“bcd”。向第一会话状态D1应用编辑的第二合并序列1216的结果是中间会话状态D3 1230。
编辑的第一变换序列1232提供下面的编辑:
skip 2
insert element start with tag name“tagName”and
attributes[attr 1=“value 1”,attr2=“value2”]
insert text“A”
insert element start with tag name“nested”and
attributes
insert text“B”
insert element end
insert text“C”
insert element end
delete text 1
编辑的第一变换序列1232通过增加在图12上的虚线1234所示的材料来改变中间会话状态D3。这个操作的结果是第二会话状态D4。
注意,编辑序列的合并使得(由不同用户进行的)冲突编辑的检测更容易,由此减少并发控制所需的计算资源量。例如,当编辑的合并序列的变换将改变至少一个编辑操作的位置时,检测到冲突编辑。例如,当执行编辑的第一合并序列改变在编辑的第二合并序列中的至少一个编辑操作的位置时,检测到冲突编辑。又如,当执行编辑的第二合并序列改变在编辑的第一合并序列中的至少一个编辑操作的位置时,检测到冲突编辑。当编辑的第一和第二合并序列(由两个不同的参与者)包括重叠的删除操作时,也检测到冲突编辑。变换存在重叠的删除操作(即,与由另一个参与者进行的编辑操作重叠)的编辑的合并序列产生变换的删除操作,该变换的删除操作删除比编辑的合并序列的相应的删除操作少的相应内容单元的元素。
在一些实施例中,当操作的第一和第二合并序列包括具有冗余操作的重叠操作时,编辑的第一变换序列不包括该冗余操作。
在一些实施例中,不同的会话(或内容单元)版本编号与在编辑操作的每一个合并序列前或后的相应的会话(或内容单元)的状态相关联。类似地,不同的版本编号与在编辑操作的每一个变换序列前和后的相应的会话(或内容单元)的状态相关联。在一些实施例中,不同的时间戳与会话(或内容单元)的每一个不同的版本编号相关联。
图13图示从第一参与者接收的对内容单元的独立的编辑操作的序列和从在会话中的第二参与者接收的独立的编辑操作的序列。
用于这个序列的起点是第一内容单元状态1310,包括文本“ABCDEFG”。从第一参与者接收编辑的第一序列,包括:
1316:insert“X”at 6,产生文本ABCDEFXG
1318:insert“Y”at 1,产生文本AYBCDEFXG
1350:delete 3-5,产生文本AYBEFXG
从第二参与者接收编辑的第二变换序列,并且将其在第一参与者应用,包括:
1352:delete 3-4,产生文本AYBFXG
1354:insert“M”at 5,产生文本AYBFXMG
1356:insert“N”at 3,产生文本AYBNFXMG
这是最后的内容单元状态1370。
再一次,参见包括文本“ABCDEFG”的开始状态1310,从第二参与者接收编辑的第二序列,包括:
1312:delete 3-5,产生文本ABCFG
1314:insert“M”at 4,产生文本ABCFMG
1330:insert“N”at 3,产生文本ABCNFMG
从第一参与者接收编辑的第一变换的序列,并且将在第二参与者处应用,包括:
1332:insert“X”at 5,产生文本ABCNFXMG
1334:insert“Y”at 1,产生文本AYBCNFXMG
1336:delete 3-5,产生文本AYBNFXMG
这是最后的内容单元状态1370,并且是与使用编辑的第一序列和编辑的第二变换序列获取的内容单元相同的内容单元。
因为存在多个独立的编辑,所以也存在多个变换(由从内容单元状态1310向内容单元状态1370的多个箭头/路径所示)。在这个实施例中,需要对于每一个路径计算每一个变换,这消耗处理器资源并且花费时间。
图14图示1400对从第一参与者接收的内容单元的合并编辑操作的序列和从在会话中的第二参与者接收的合并编辑操作的序列和对于其的变换。
用于这个序列的起点是第一内容单元状态1410,包括文本“ABCDEFG”并且对应于图13的开始内容单元状态1310。
从第一参与者接收编辑的第一合并序列,包括:
1416:skip 1,insert“Y”,skip 1,delete 2,skip 2,insert X,产生文本AYBEFXG,内容单元状态1450。
从第二参与者接收编辑的第二变换的合并序列,并且将其在第一参与者应用,包括:
1452:skip 3,delete 1,insert“N”,skip 2,insert M,产生文本AYBNFXMG,终点1470。
再一次参见开始内容单元1410,包括文本“ABCDEFG”,从第二参与者接收编辑的第二合并序列,包括:
1412:skip 3,delete 2,insert“N”,skip 1,insert“M”,产生文本ABCNFMG,内容单元状态1430。
从第一参与者接收编辑的第一变换的合并序列,并且将在第二参与者应用,包括:
1432:skip 1,insert“Y”,skip 1,delete 1,skip 2,insert“X”,产生文本AYBNFXMG,它是最后的内容单元状态1470。
这是最后的内容单元状态1470,其作为通过应用编辑的第一合并序列和编辑的第二变换的合并序列而获得的状态。
因为将单独的编辑(例如,如图13中那样)合并为在图14中的编辑的序列,所以存在与图13的(由从点1310向点1370的一对箭头/路径所示)作比较使用图14的实施例要求的变换更少。在这个实施例中,必须对每一个路径计算一个变换,这是比图13的实施例小的处理负担。使用编辑的合并序列的图14的实施例因此提供了降低计算要求的优点。
其他应用
可以与托管会话的服务器相关联的另一个应用包括上下文拼写检查器和校正应用。这样的应用可以用于找出常见的误拼,并且消除有意限定的词的歧义。这样的应用可以使用错误模型来确定是否正确地拼写或使用作品。该模型可以基于字母逆转、语音相似性、在会话或字母中的位置或使用其他手段来找到常见错误。该应用可以提供不断地基于上下文的文本校正。在一些实施例中,该应用提供用户频繁使用或用户已经限定的词的特定于用户的覆盖。在一些实施例中,该应用可以插入具有被认为错误地拼写了某词的建议的标签,使得任何参与者(不仅作者)可以在必要的情况下找到和校正该词。
可以与托管会话的服务器相关联的另一种应用包括使用基于上下文的消歧的上下文名称显示。在一些实施例中,这种消歧可以在显示名称时提供空间效率。例如,可以仅使用名字或图片来显示亲密朋友或工作同事,而可以使用全名、头衔等来显示陌生人。可以使用一组规则(由系统或由用户或由两者定义)来确定显示谁和以什么方式。
可以与托管会话的服务器相关联的另一种应用包括语言翻译(机器翻译)应用。这种机器翻译应用可以使用拼写检查和/或对上下文敏感的词典来在语言之间翻译。
在一些实施例中,这些(和其他)应用使用应用协议接口(API)来与托管会话的服务器交互。在一些实施例中,该应用允许参与者保留那个参与者可以与其他参与者共享的、用于那个参与者的个人应用的命名空间。
已经相对于特定实施例描述了用于说明目的的上述描述。然而,上面的说明性描述不意欲是穷尽性的或将本发明限于所公开的精确的形式。许多修改和改变在上面的教导中是可能的。实施例被选择和描述以便最佳地描述本发明的原理和其实际应用,由此使得其他本领域内的技术人员能够最佳地利用本发明和具有适合于所考虑的特定用途的各种修改的各个实施例。