掌桥专利:专业的专利平台
掌桥专利
首页

渐进式API响应

文献发布时间:2023-06-19 11:14:36


渐进式API响应

背景技术

本说明书涉及社交消息接发平台,并且特别地,涉及用于增量地接收并且绘出来自社交消息接发平台的对内容请求的响应的片段的技术。

社交消息接发平台和网络连接的个人计算设备允许用户跨多个设备实时地创建和共享内容。

流行的社交消息接发平台通常向用户提供功能性以既有同步地也有异步地向其他用户起草和发布消息。流行的社交消息接发平台包括Facebook、Pinterest和Twitter。(“Facebook”是Facebook,Inc.的商标,“Pinterest”是Pinterest,Inc.的商标,“Twitter”是Twitter,Inc.的商标)。

通常,当计算设备上的客户端软件向社交消息接发平台发送内容请求时,在向设备的用户呈现响应中的任何响应之前,该客户端软件必须等待接收对该请求的完全响应,

发明内容

本说明书描述了一种技术,该技术使客户端能够接收并且绘出来自社交消息接发平台的对内容请求的响应的片段。

一种示例系统包括被配置为实现社交消息接发平台的服务器、用户设备、以及运行在用户设备上的社交消息接发平台的客户端软件。该客户端软件被配置为向服务器发送内容请求。该客户端软件从用户设备上的网络栈的传输层增量地在多个片段中接收来自服务器的对内容请求的响应。该多个片段构成整个响应。该响应包括多个内容项和描述多个内容项的元数据。每个内容项是可绘出的并且由一个或多个数据对象定义。在片段被接收时,客户端软件增量地将片段中的多个内容项绘出到显示缓冲区中。这包括将多个内容项以由元数据确定的次序放置在显示缓冲区中。显示缓冲区是用户设备的存储器中的数据结构。客户端软件然后将显示缓冲区的全部或者部分显示在用户设备的显示器上。

本说明书结合系统、装置以及其他程序组件使用术语“被配置为”。对于一个或多个计算机的系统被配置为执行特定的操作或动作意味着该系统已经在其上安装了软件、固件、硬件或其组合,这些软件、固件、硬件或其组合在操作中使该系统执行该操作或动作。对于一个或多个计算机程序被配置为执行特定的操作或动作意味着该一个或多个程序包括以下指令:该指令在由数据处理装置执行时,使得该装置执行操作或动作。对于专用逻辑电路被配置为执行特定的操作或动作意味着该电路具有执行该操作或动作的电子逻辑。

本申请中所描述的主题可以在特定实施例中被实现,以便实现以下优势中的一个或多个优势。低带宽连接上的用户设备可以在整个响应被接收到之前渐进地绘出响应中的内容项。这是有优势的,因为在低带宽的连接上,接收整个响应可能花费若干往返,即,TCP连接递送整个响应的有效载荷所花费的往返的数目。

同时,高带宽连接上的用户设备可以在单个往返中接收并且绘出小的响应和大的响应两者。换而言之,无论用户的带宽,本说明书中所描述的主题优化响应时间。

本说明书的主题的一个或多个实施例的细节在附图和以下描述中阐述。该主题的其他特征、方面以及优势将从描述、附图和权利要求书变得明显。

附图说明

图1是示例社交消息接发平台的图解。

图2是用于组织对内容请求的响应的示例过程的流程图。

图3是用于增量地接收和绘出对内容请求的响应的片段的示例过程的流程图。

图4是用于接收和绘出跨越响应的两个以上片段的内容项的示例过程的流程图。

各个附图中相同的附图标记和标志指示相同的元素。

具体实施方式

图1图示了示例在线社交消息接发平台100和示例用户设备104a-104n,示例用户设备104a-104n被配置为通过一个或多个有线或无线的数据通信网络120与该平台通信。如稍后将描述的,被实现在客户端软件106a-106n中的渐进式绘出模块108a-108n被配置为增量地接收并且绘出来自平台服务器的内容项(例如,消息)。

平台的用户102a-102n使用在其上安装了客户端软件的用户设备104a-104n来使用平台。使用其相应的用户设备上相应的客户端软件,用户可以与社交消息接发平台交互。

用户可以是平台上账户的账户持有者,或者账户的经授权的用户。平台可以具有个成百万的个人、企业或其他实体的账户。

在一些实现中,平台允许由不是账户持有者或者未登陆到该平台的账户的用户使用该平台。如果平台允许由这样的用户使用,则该平台可以通过将用户与暂时的账户或标识符相关联来允许这样的用户发布消息或者使用该平台的其他功能性。

用户设备可以是任何互联网连接的设备,例如,膝上型或桌面计算机、智能电话、或者电子平板。用户设备可以通过移动网络、通过互联网服务供应商(ISP)、或者以其他方式被连接到互联网

每个用户设备被配置为具有软件,该软件被称为客户端或者客户端软件106a-106n,其在操作中可以访问平台,以使得用户可以发布和接受消息、查看和编策用户的流、以及查看内容项的列表并且与之交互。在任何特定的用户设备上,客户端可以是网络浏览器或者由网络浏览器绘出的HTML(超文本标记语言)文档。或者客户端可以是或者包括JavaScript代码或Java代码。或者客户端也可以是专用软件,例如,被特别设计来与平台一起工作的被安装的app或者被安装的应用。或者客户端可以是或者包括例如短消息服务(SMS)接口、即时消息接发接口、基于电子邮件的接口、或者基于API功能的接口。

客户端在用户设备的显示器上的图形用户界面的窗口中显示所有或部分的显示缓冲区,包括来自平台的消息和流。显示缓冲区是包含被用于驱动用户设备的显示器的数据(例如,位图)的存储器的一部分。显示缓冲区中的消息和流可以是以被绘出的位图形式,或者它们也可以是以部分地被绘出或者被预处理的形式,当它们移动到显示视口(viewport)时,该部分地被绘出或者被预处理的形式可以在飞行中(on the fly)被绘出。

客户端的图形用户界面可以包括滚动元素或滚动功能性。滚动元素是一个控件,该空间接收来自客户端的用户的输入。例如,如果用户设备是具有鼠标的台式计算机,则用户可以点击和拖动滚动元素。如果用户设备是智能电话,则用户可以简单地使用手指滑动用户设备的屏幕。响应于单击和拖动或者滑动,客户端改变显示缓冲区的哪个部分由客户端显示。

客户端包括渐进式绘出模块108a-108n。渐进式绘出模块被配置为在内容项的片段被接收时增量地接收并且渐进地绘出那些片段。

在线社交消息接发平台在一个或多个位置中的一个或多个计算机上被实现,这些计算机作为支持来自许多不同种类的用户设备的通过有线或无线网络120的连接一个或多个服务器而操作。该平台可能具有数百万的帐户,并且在任何给定时刻,在客户端与平台之间数十万至数万个连接可以被建立或者在使用中。

平台和客户端被配置为使用户能够使用平台将消息122发布到平台,并且使用平台来接收由其他用户发布的消息124。

在一些实现中,平台为用户提供设施来直接向平台的一个或多个其他用户发送消息,这允许发送方和接收方维持消息的私密交换。

平台被配置为在主页馈送(home feed)消息流中向用户提供内容,通常是消息。该消息一般将是来自用户正在追随(follow)的账户的消息,这意味着接收者已经注册以接收由被追随账户发布的消息,以及可选地这样的账户已经参与的内容,例如,已拥护(endorse)。可选地,平台被配置为在接收者用户的主页馈送消息流中包括平台确定接收者可能感兴趣的消息,例如,关于特定的当前兴趣的话题的消息,如由平台用户发布的关于该话题的消息的数目表现的,或者关于接收者明显感兴趣的话题而被发布的消息,如由接收者已经发布或者参与的消息表现的,以及经选择的广告、公共服务声明、宣传内容等。

平台被配置为使用户能够实时交换消息,既,在最小延迟的情况下。平台还被配置为使用户能够响应更早被发布的消息,大约数小时或数天甚至更长。该平台被配置为在短时间内向一个或多个其他用户显示被发布的消息,以便促进用户之间的本质上的直播对话。

平台还被配置为允许用户搜索平台上的内容。搜素可以从多个已追随的或公开的账户返回满足一个或多个搜索标准(例如,一个或多个搜索术语或关键短语)的消息。平台还被配置为允许用户搜索其他用户的账户。

因此,平台的基本消息接发功能性至少包括发布新消息,根据客户端请求提供消息流,管理账户,管理账户、消息和流之间的连接,以及从客户端接收参与数据,该参与数据指示客户端的用户已经如何参与消息以及可能地其他内容。平台还索引内容项以及表征用户对内容的访问的访问数据,并且可以向账户持有者提供经索引的数据。

通常,被发布到平台的消息包含表示由消息的作者提供的内容的数据。消息可以是存储内容数据的容器数据类型的实例。可以被存储在消息中的数据的内容包括例如文本、图形、图像、视频以及计算机代码(例如,统一资源定位符(URL))。消息还可以包括可以协助分类消息或者将消息联系到话题的关键短语(例如,哈希标签)。消息还可以包括可以或不可以由消息作者账户持有者可编辑的元数据,取决于平台准许什么。消息元数据的示例包括著作时间和日期以及当用户设备提交消息时其地理位置。在一些实现中,客户端向平台提供什么元数据通过由隐私设置确定,该隐私设置由用户或账户持有者控制。

由一个账户持有者创作的消息可以引用其他账户、其他消息或两者。例如,作为对由另一账户创作的另一消息的和回复,消息可以被创作。消息也可以由用户创作作为对最初由该用户发布的消息的回复。消息还可以是对由另一账户创作并从另一账户被接收的消息的重新发表。通常,在消息中被引用的账户可以作为消息中可见的内容(例如,账户的名称)出现,并且也可以作为消息中的元数据出现。作为结果,被引用的账户在平台中可以是交互式的。例如,用户可以与出现在其消息流中的账户名称交互,以导航到那些账户的消息流。平台还允许用户将特定的消息指定为私密的;私密的消息将仅在创作的账户和接收者账户的消息流中出现。

通常,消息是微博客发布,其以若干方式不同与电子邮件消息,例如,微博客发布的作者不一定需要指定、或者甚至知晓谁将是将是消息的接收者。

流是平台上满足一个或多个消息标准的消息的流。流可以由流标准定义,以包括由一个或多个账户发布的消息。例如,针对请求的账户持有者的流的内容可以包括以下一项或多项:(i)由该账户持有者创作的消息;(ii)由所请求的账户持有者追随的其他账户创作的消息;(iii)由引用所请求的账户持有者的其他账户创作的消息;或者(iv)由第三方赞助以包括在账户持有者的消息流中的消息。流的消息可以根据著作的时间和日期按时间顺序被排序,也可以按反向时间顺序排列。流还可以以其他方式被排序,例如,根据计算性地被预测的与账户持有者的相关性,或者根据时间和相关性得分的某种组合。

流可以潜在地包括大量消息,为处理效率和请求的账户持有人的查看方便两者起见,账户通常标识一旦流被生成就将向请求的客户端发送的满足流标准的消息的子集。流中的消息的剩余被维持在流存储库中,并且可以通过客户端请求而被访问。

通过例如前端服务器,平台服务器110a-110m上的递送模块112a-112m构造消息流并且向请求的客户端提供这些消息流。响应于针对流的请求,相应的递送模块或者实时地构造流,或者从流服务器访问已经被生成的流的一些或全部。递送模块将被生成的流存储在流存储库中。账户持有者可以请求他们自己的流中的任何流、或者他们基于安全性设置而被准许访问的任何其他账户的流。如果流包括大量消息,则递送模块通常标识将向请求的客户端发送的消息的子集,在该情况下消息的剩余被维持在流存储库中并且响应于客户端请求而被发送。

递送模块可以以这样的方式来组织对内容请求的响应:响应的片段可以由客户端增量地接收、绘出并且显示。将参考图2更消息地描述该过程。

图2是用于组织对内容请求的响应的示例过程200的流程图。该过程可以由图1的在线社交消息接发平台的平台服务器执行。更具体地,该过程可以由平台服务器上的递送模块执行。

递送模块获取响应于来自客户端的内容请求的内容项和描述那些内容项的元数据(210)。

递送模块将描述内容项的元数据放置在响应的初始片段中(220)。元数据可以包括针对每个内容项的序列标识符。序列标识符指定内容项在用户设备的显示缓冲区中相对于其他内容项应当被绘出的位置。因为元数据在响应的初始片段中,所以客户端可以该客户端接收到响应中的所有内容项之前,在显示缓冲区中的指定位置中绘出内容项。

递送模块将内容项放置在元数据之后(230)。更具体地,其将绘出每个内容项所必需的数据放置在定义内容项的一个或多个数据对象中、或者定义响应中内容项之前的内容项的数据对象中。通过以这种方式组织数据,递送模块确保客户端到该客户端接收任何给定的内容项的时间为止,接收到其绘出该内容项需要的所有数据。因此,客户端可以在所有内容项被接收之前,绘出并且显示一个或多个内容项。

图3用于增量地绘出内容项的示例过程300的流程图。该过程可以由用户设备上的客户端执行。

客户端向主机服务器发送针对内容的请求(310)。

主机服务器向客户端发送结构化的响应。在感兴趣的场景中,客户端接收多个片段中的响应,这些片段一起构成整个响应(320)。客户端在用户设备上的网络栈(例如,从传输层)向客户端提供整个响应之前,从网络栈获取片段。

网络栈的传输层是软件的若干层中的一个层,这些层一起向运行在用户设备上的应用提供数据通信服务。特别地,传输层实现为应用提供主机到主机通信服务的一组协议。传输层协议的一个示例是传输控制协议(TCP)。另一示例是用户数据报协议(UDP)。取决于被使用的特定协议,由客户端获取的片段由一个或多个分段或者一个或多个数据报组成。

响应的片段包含内容项和描述内容项的元数据。每个内容项可绘出用于显示并且由一个或多个数据对象定义。例如,特定的内容项可以由JavaScript对象表示法(“JSON”)对象。JSON是用于序列化组织化的数据的文本格式。其使用人类可读文本来传输由属性-值对和阵列数据类型组成的数据对象。

描述内容项的元数据可以包括针对每个内容项的序列标识符。针对特定内容项的序列标识符指定该内容项在显示缓冲区中相对于响应中的其他内容项、以及相对于在显示缓冲区中先前被绘出的响应中的其他内容项的地方。例如,序列标识符可以指定内容项应当被绘出在显示缓冲区中在第一内容项“下方”并且在第二内容项“上方”。在一些实现中,序列标识符是基于或者是与内容项相关联的时间戳。该时间戳可以指示内容项相对于其他内容项被创建的时间。在这种情况下,内容项可以按时间顺序或反向时间顺序被放置在显示缓冲区中。

备选地,针对内容项的序列标识符可以基于以下估计:用户将有多可能喜欢该内容项或者与该内容项交互。例如,社交消息接发平台可以确定,相比第二内容项,特定的用户更可能喜欢第一内容项或者与第一内容项交互。在这样的情况下,针对第一内容项的序列标识符可以指定其应被放置在第二内容项“上方”,因此用户将更可能看见它,或者首先看见它。主机服务器可以通过分析用户先前与类似内容项的交互来确定用户将喜欢特定内容项或者与特定内容项交互的可能性。

当片段被获取时,客户端增量地将片段中的内容项以由元数据确定的显示缓冲区中的次序绘出到显示缓冲区中(330)。

内容项中的每个内容项单独地可绘出。换而言之,绘出响应中的每个内容项所必需的数据被包含在定义内容项的一个或多个数据对象中、或者在响应中被发现更早的数据中(例如,现在的片中更早的或者在响应的先前被接收的片段中)。因此客户端可以在其接收到整个响应之前绘出单独的内容项。

在一些实现中,客户端接收响应的初始片段中的元数据,并且除了针对响应中每个内容项的相应的序列标识符以外还包括响应中的内容项的总计数。使用该信息,客户端可以绘出初始片段中的内容项,并且在显示缓冲区中包括针对响应的后续片段中的每个内容项的相应的占位符。稍后,客户端可以在绘出来自后续片段的内容项时替换占位符。客户端可以在显示缓冲区中对应的内容项将出现之处(例如,由内容项的序列标识符定义的地方)创建占位符。

在绘出内容项中,客户端通常标识数据对象或定义内容项的对象的开头,并且随后标识数据对象或定义内容项的对象的结尾。在一些情况下,数据对象或者定义特定内容项的对象完全被包含在相应的单个片段中。在其他情况下,它们跨越两个以上片段。

最终,客户端将显示缓冲区的所有或部分显示在用户设备的显示器上(340)。在显示缓冲区具有占位符的实现中,客户端可以显示那些占位符以向用户指示一些内容项仍然必须被绘出。当被显示时,占位符优选地具有固定的垂直高度,而传入的内容项通常具有可变的垂直高度。当客户端以内容项替换占位符时,客户端可以通过在远离视口的方向上扩展显示缓冲区的大小来确保视口中的项不会垂直移位。即是说,如果占位符在视口上方,则客户端可以使显示缓冲区向上扩大。如果占位符在视口下方,则客户端可以使显示缓冲区向下扩大。客户端可以基于用户输入(例如,基于对客户端的用户界面的滚动输入)来确定将显示显示缓冲区的什么部分。

在一些实现中,客户端插入并且显示单个占位符而不是多个邻接的占位符。

图4是用于绘出跨越响应的两个以上片段的内容项的示例过程400的流程图。过程400可以由在用户设备上运行的客户端执行。

客户端获取响应的下一片段(410)。客户端确定片段是否包括新内容项的初始部分(420)。客户端可以通过在片段中搜索数据对象标识符来做出该确定。例如,如果内容项由JSON对象定义,则客户端可以在片段中搜索指示JSON对象开头的前花括号。如果片段不包括新内容项的初始部分,则客户端获取响应的下一片段(410)。

如果片段确实包括新内容项的初始部分,则客户端确定所获取的片段(即,当前片段)和先前所获取的片段是否包括整个新内容项(430)。即是说,客户端确定其是否已经获取了新内容项的所有部分。客户端可以在片段中搜索数据对象标识符以做出该确定。

如果客户端确定其尚未获取新内容项的所有部分,则其获取响应的下一片段(440),并且再次确定该下一片段和先前所获取的片段是否包括整个新内容项(430)。因为内容项可以跨越响应的两个以上片段,所以客户端可能会重复该过程数次。

如果客户端确定其已经获取了新内容项目的所有部分,则其组装那些部分(450)。客户端可以在接收到这些部分时组装它们,或者客户端可以在其接收到所有部分后一次组装它们所有。在一些情况下,内容项可能完全被包含在响应的单个片段中。在这样的情况下,不需要组装。

客户端在用户设备上的显示缓冲区中绘出被组装的内容项(460)。此后,客户端确定当前片段是否包括新内容项的任何部分(420),因为单个片段可以包含多个内容项。如果否,则客户端获取响应的下一片段(410)。

在一些情况下,虽然客户端增量地接收和绘出数据,但是响应可能会部分地失败。例如,在客户端仅接收到二十个内容项之后,具有一百个内容项的响应可能会失败。例如,如果传输层协议是UDP,则这样的故障可能发生。UDP不要求通信通道,因此容易受到底层网络的不可靠性的影响。

当这发生时,在一些实施例中,内联地示出错误,即,错误被显示在剩余的八十个内容项不然会已被显示处。客户端的用户可以在图形用户界面中与该错误消息交互,以重试加载剩余的八十个内容项。

如果客户端接收到畸形的内容项,即,如果客户端接收到具有丢失的数据的内容项,则客户端可以静默地丢弃该内容。

本说明书中所描述的主题的实施例以及动作和操作可以被实现在数字电子电路中、有形地体现的计算机软件或固件中、计算机硬件中,包括在本说明书中所公开的结构及其结构性等效体,或者其中的一个或多个的组合中。本说明书中所描述的主题的实施例可以被实现为一个或多个计算机程序,即,用于由数据处理装置执行或者控制数据处理装置的操作的、被编码在有形的非瞬态存储介质上的计算机程序指令的一个或多个模块。备选地或附加地,程序指令可以被编码在人工生成的传播的信号上,例如,机器生成的电、光或电磁信号,该信号被生成以编码信息以供传输到合适的接收器装置来由数据处理装置执行。该计算机存储介质可以是以下或者以下的部分:机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备、或者其中的一个或多个的组合。计算机存储介质不是传播的信号。

术语“数据处理装置”涵盖用于处理数据的所有种类的设备、装置和机器,例如包括可编程处理器、计算机、或者多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPU(图形处理单元)。除了硬件之外,该装置还可以包括创建用于计算机程序的执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或者其中的一个或多个的组合的代码。

计算机程序,也可以被称为或描述为程序、软件、软件应用程序、app、模块、软件模块、引擎、脚本或代码可以以任何形式的编程语言来编写,包括经编译的或经解译的语言、或者声明性或过程性语言;并且其可以以任何形式被部署,包括作为独立程序或者作为适合用于在计算环境中执行的模块、组件、引擎、子例程或者其他单元,该环境可以包括一个或多个位置中的通过数据通信网络被互连的一个或多个计算机。

计算机程序可以、但是不必对应于文件系统中的文件。计算机程序可以被存储在持有其他程序或数据的文件的部分中,例如,被存储在标记语言文档中的一个或多个脚本、专用于问题中的程序的单个文件中、或者多个经协调的文件中,例如,存储一个或多个模块、子程序或代码的部分的文件。

本说明书中所描述的过程和逻辑流可以由一个或多个计算机执行,该一个或多计算机执行一个或多个计算机程序,以通过在输入数据上操作并且生成输出来执行操作。这些过程和逻辑流还可以由专用逻辑电路(例如,FPGA、ASIC或GPU)、或者由专用逻辑电路和一个或多个经编程的计算机的组合执行。

适合用于执行计算机程序的计算机可以基于通用或专用微处理器或者两者,或者基于任何其他种类的中央处理器。通常,中央处理单元将从只读存储器或者随机存取存储器或者两者接收指令和数据。计算机的基本元件是用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可以由专用逻辑电路补充或者并入专用逻辑电路中。

通常,计算机还将包括、或者可操作地耦合,以从一个或多个大容量存储设备接收数据或者向一个或多个大容量存储设备传输数据。大容量存储设备可以是例如磁盘、磁光盘或光盘,或者固态驱动。但是,计算机不必具有这样的设备。此外,计算机可以被嵌入到另一设备中,例如,仅举几例,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器、或者便携式存储设备(例如通用串行总线(USB)闪存驱动)。

为了提供与用户的交互,本说明书中所描述的主题的实施例可以在以下计算机上被实现或者被配置为与该计算机通信:该计算机具有显示设备(例如LCD(液晶显示器)监视器)以向用户显示信息,以及输入设备(例如键盘和指点设备,例如鼠标、轨迹球或触摸板),用户可通过该输入设备向计算机提供输入。其他种类的设备也可以被用于提供与用户的交互,例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且来自用户的输入可以以任何形式被接收,包括声学、语音或触觉输入。另外,计算机可以通过向由用户使用的设备发送文档和从由用户使用的设备接收文档来与用户交互,例如,通过响应于从用户设备上的网络浏览器所接收的请求向该网络浏览器发送请求,或者通过与用户设备(例如,智能电话或电子平板)上运行的app交互。同样,计算机可以通过向个人设备(例如,运行消息接发应用的智能电话)文本消息或其他形式的消息并且作为回报从用户接收响应的消息来与用户交互。

本说明书中所描述的主题的实施例可以在包括后端组件(例如,作为数据服务器)、或包括中间件组件(例如,应用服务器)的计算系统中、或包括前端组件(例如,具有图形用户界面的客户端计算机、web浏览器、或者用户可以通过其与本说明书中所描述的主题的实现交互的app)的计算系统中被实现、或者在一个或多个这样的后端、中间件、或前端组件的任何组合中被实现。系统的组件可以通过数字数据通信的任何形式或介质(例如,通信网络)而被互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如互联网。

该计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过通信网络交互。客户端和服务器之间的关系是凭借在相应的计算机上运行并且与彼此具有客户端-服务器关系的计算机程序产生的。在一些实施例中,服务器向用户设备传输数据(例如,HTML页面),例如,用于向与充当客户端的与该设备交互的用户显示数据并且从该用户接收用户输入的目的。在用户设备处生成的数据(例如,用户交互的结果)可以从该设备在服务器从被接受。

除了上述实施例之外,以下实施例也是创新的:

实施例1是由运行在用户设备上的社交消息接发平台的客户端软件执行的方法,该方法包括:

向服务器发送内容请求,该服务器包括一个或多个计算机和一个或多个存储设备的服务器,该服务器被配置为实现社交消息接发平台;

从用户设备上的网络栈的传输层增量地在多个片段中接收来自服务器的对内容请求的响应,其中多个片段构成整个响应,其中响应包括多个内容项和描述多个内容项的元数据,并且其中每个内容项是可绘出的并且由一个或多个数据对象定义;

在片段被接收时,增量地将片段中的多个内容项绘出到显示缓冲区中,包括将多个内容项以由元数据确定的次序放置在显示缓冲区中,显示缓冲区是用户设备的存储器中的数据结构;以及

将显示缓冲区的全部或者部分显示在用户设备的显示器上。

实施例2是实施例1的方法,其中客户端软件是独立app或者在被安装在用户设备上的web浏览器中运行的JavaScript程序。

实施例3是实施例1-2中的任何实施例的方法,其中描述多个内容项的元数据针对每个内容项包括序列标识符,该序列标识符指定该内容项在显示缓冲区中相对于响应中的其他内容项、以及相对于在显示缓冲区中先前被绘出的多个响应中的多个内容项的地方。

实施例4是实施例3的方法,其中针对相应的内容项的序列标识符对应于内容项相对于其他内容项被创建的时间。

实施例5是实施例1-4中的任何实施例的方法,其中元数据在响应的初始片段中被接收并且包括响应中的多个内容项的总计数,并且其中方法还包括:

在显示缓冲区中绘出初始片段中的多个内容项,并且在显示缓冲区中包括针对响应的后续片段中的每个内容项的相应的占位符;以及

在绘出后续片段中的多个内容项时替换相应的占位符。

实施例6是实施例5的方法,其中元数据针对每个内容项还包括序列标识符,并且其中相应的占位符在显示缓冲区中由相应的占位符的对应的内容项的序列标识符指定的地方中被创建。

实施例7是实施例1-6中的任何实施例的方法,其中在片段被接收时增量地绘出片段中的多个内容项包括:

确定第一片段仅包括特定内容项的初始部分;

接收包括特定内容项的其余部分的第二片段;

组装特定内容项的初始部分和其余部分;以及

在显示缓冲区中绘出经组装的内容项。

实施例8是实施例7的方法,其中一个或多个数据对象是JSON对象,并且其中在片段被接收时增量地绘出片段中的多个内容项包括针对每个内容项:

标识定义内容项的JSON对象的开头;并且

标识定义内容项的JSON对象的结尾。

实施例9是实施例1-8中的任何实施例的方法,其中响应的片段中的每个片段包括通过传输层协议向客户端软件提供的一个或多个传输层分段。

实施例10是实施例1-9中的任何实施例的方法,其中在每个响应中,绘出响应中的每个内容项所必需的数据被包含在定义内容项的一个或多个数据对象中、或者在定义响应中先前被接收的多个内容项的一个或多个数据对象中。

实施例11是实施例1-10中的任何实施例的方法,其中服务器是远程服务器。

实施例12是一种系统,包括:

包括一个或多个计算机和一个或多个存储设备的服务器,该服务器被配置为实现社交消息接发平台;

用户设备;以及

运行在用户设备上的社交消息接发平台的客户端软件,

其中用户设备被配置为执行实施例1-11中的任何一个实施例的方法。

实施例13是存储指令的一个或多个存储介质,该指令当由一个或多个计算机执行时可操作以使得该一个或多个计算机执行实施例1-11中的任何一个实施例的方法。

实施例14是一种系统,包括:

被配置为实现社交消息接发平台的一个或多个计算机和一个或多个存储设备,该一个或多个存储设备存储指令,该指令在由一个或多个计算机执行时使得该一个或多个计算机执行操作,包括:

接收来自社交消息接发平台的客户端软件的内容请求,该客户端软件在用户设备上运行;

获取(i)对应于内容请求的多个内容项,(ii)描述多个内容项的元数据,以及(iii)绘出多个内容项所必需的数据,其中描述多个内容项的元数据针对每个内容项包括序列标识符,该序列标识符指定内容项在用户设备的显示缓冲区中相对于其他内容项应当被绘出的位置;

生成对内容请求的响应,包括:

将元数据放置在响应的初始片段中,以及

将绘出每个内容项所必需的数据放置在定义内容项的一个或多个数据对象中、或者在定义响应中在该内容项之前的内容项的一个或多个数据对象中;以及

向客户端软件发送响应。

尽管本说明书包含许多特定的实现细节,但是这些细节不应被解释为对任何发明范围或者所要求保护的范围的限制,而是对可能特定于具体发明的具体实施例的特征的描述。本说明书中在单独的实施例的上下文中所描述的某些特征也可以在单个实施例中组合地被实现。相反,在单个实施例的上下文中所描述的各种特征也可以分别在多个实施例中被实现或者以任何合适的子组合而被实现。此外,尽管以上可以将特征描述为以某些组合行动并且甚至最初是这样要求保护的,但是在一些情况下所要求保护的组合一个或多个特征可以从组合中被切除,并且权利要求可以针对子组合或子组合的变型。

类似地,虽然在附图中描绘了操作并且以具体次序在权利要求中叙述了这些操作,但是这不应被理解为达到期望的结果要求以所示出的具体次序或者以顺序次序来执行这样的操作,或者执行所有所说明的操作。在某些情况下,多任务和并行处理可能是有优势的。此外,以上所描述的实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都要求这种分离,并且应理解,所描述的程序组件和系统通常可以一起被集成在单个软件产品中,或者被打包成多个软件产品。

已经描述了主题的特定实施例。其他实施例在所附权利要求的范围内。例如,权利要求中所叙述的动作可以以不同的次序被执行并且仍然达成期望的结果。作为一个示例,附图中所描绘的过程不一定需要所示出的具体次序或者顺序次序来实现期望的结果。在某些情况下,多任务处理和并行处理可能是有优势的。

技术分类

06120112852115