一种实时同步方法和装置与流程

文档序号:12694556阅读:257来源:国知局
一种实时同步方法和装置与流程

本发明涉及通信技术领域,特别是涉及一种实时同步方法和装置。



背景技术:

目前,在许多应用场景中要求客户端和服务器持续同步,以便客户端及时获得服务器侧的最新数据。例如:社交网络、实时竞拍、股价查询等应用场景都要求客户端可以及时获得服务器侧更新的数据。然而,关于实时同步的相关开源技术较少,如果要基于终端APP(Application,应用程序)提供实时同步服务,需要单独开发一套动态、可扩展的实时同步系统,但是成本较高。

现有的实时同步基本通过轮询的方式实现。以实时竞拍为例,终端侧的客户端根据竞拍状态的改变调用终端API(Application Programming Interface,应用程序编程接口)轮询服务器,从服务器获取最新的竞拍数据,以便同步更新终端侧的用户界面,并且,在此过程中,客户端还需适时地获取服务端的时间,将客户端本地的时间同步为与服务器相同,进而实现客户端的计时系统与服务器的时间同步。

但是,轮询为单工通信,轮询需要客户端不断地向服务器发出HTTP(HyperText Transfer Protocol,超文本传输协议)请求,服务器仅在更新数据之后向客户端返回最新的数据。客户端大量轮询服务器,而服务器并不是总有数据更新,这样就造成客户端向服务器发送了大量的不必要的请求,造成浪费流量的同时给服务器增加了压力;而且客户端和服务器分别进行倒计时,如果客户端从服务器获取时间的过程中,出现网络信号质量较差、数据传输拥堵、客户端对时间的处理响应速度慢等问题,将会使客户端和服务器之间出现时间误差,客户端和服务器时间不同步,数据实时性较差。



技术实现要素:

本发明一种实时同步方法和装置,用以解决现有同步方式会造成客户端向服务器发送了大量的不必要的请求且实时性差的问题。

针对上述技术问题,本发明是通过以下技术方案来解决的:

本发明提供了一种实时同步方法,在客户端侧执行,所述方法包括:通过Websocket协议和服务器建立长连接;基于所述长连接,向所述服务器发送针对数据对象的订阅请求;接收所述服务器根据所述订阅请求返回的所述数据对象的更新信息以及随所述更新信息一同返回的所述服务器的当前时间信息,以使所述客户端和所述服务器数据同步且时间同步。

其中,所述方法还包括:如果距离上一次接收到所述服务器返回的更新信息的时间达到预设时长,则每隔预设时间段向所述服务器发送一次心跳包,以便保持所述长连接有效。

其中,所述方法还包括:在向所述服务器发送心跳包之后,如果未接收到所述服务器针对所述心跳包返回的应答包,则重新通过Websocket协议和服务器建立长连接。

本发明提供了一种实时同步方法,在服务器侧执行,所述方法包括:通过Websocket协议和客户端建立长连接;基于所述长连接,接收所述客户端针对数据对象的订阅请求;根据所述订阅请求,在更新所述数据对象对应的信息之后,将所述数据对象的更新信息返回给所述客户端,并将当前时间信息随所述更新信息一同返回给所述客户端,以使所述客户端和所述服务器数据同步且时间同步。

其中,所述方法还包括:在接收到所述客户端发送的心跳包之后,针对所述心跳包向所述客户端返回应答包。

本发明还提供了一种实时同步装置,设置在客户端侧,所述装置包括:第一连接模块,用于通过Websocket协议和服务器建立长连接;第一发送模块,用于基于所述长连接,向所述服务器发送针对数据对象的订阅请求;第一接收模块,用于接收所述服务器根据所述订阅请求返回的所述数据对象的更新信息以及随所述更新信息一同返回的所述服务器的当前时间信息,以使所述客户端和所述服务器数据同步且时间同步。

其中,所述第一发送模块,还用于:在距离上一次接收到所述服务器返回的更新信息的时间达到预设时长的情况下,每隔预设时间段向所述服务器发送一次心跳包,以便保持所述长连接有效。

其中,所述第一连接模块还用于:在所述第一发送模块向所述服务器发送心跳包之后,如果所述第一接收模块未接收到所述服务器针对所述心跳包返回的应答包,则重新通过Websocket协议和服务器建立长连接。

本发明还提供了一种实时同步装置,设置在服务器侧,所述装置包括:第二连接模块,用于通过Websocket协议和客户端建立长连接;第二接收模块,用于基于所述长连接,接收所述客户端针对数据对象的订阅请求;第二发送模块,用于根据所述订阅请求,在更新所述数据对象对应的信息之后,将所述数据对象的更新信息返回给所述客户端,并将当前时间信息随所述更新信息一同返回给所述客户端,以使所述客户端和所述服务器数据同步且时间同步。

其中,所述第二发送模块,还用于在接收到所述客户端发送的心跳包之后,针对所述心跳包向所述客户端返回应答包。

本发明有益效果如下:

本发明的客户端和服务器基于Websocket协议建立长连接,客户端和服务器基于该长连接可以进行双工通信,避免客户端对服务器进行无效轮询。在长连接建立之后,客户端通过订阅的方式从服务器获得数据对象的更新信息以及服务器的当前时间信息,获得的更新信息和时间信息更具时效性,进而可以实现客户端和服务器之间的数据同步和时间同步。

附图说明

图1是根据本发明第一实施例的实时同步方法的流程图;

图2是根据本发明第二实施例的实时同步方法的流程图;

图3是根据本发明第三实施例的实时同步方法的示意图;

图4是根据本发明第四实施例的实时同步方法的流程图;

图5是根据本发明第五实施例的实时同步装置的结构图;

图6是根据本发明第六实施例的实时同步装置的结构图。

具体实施方式

本发明基于Websocket协议,在客户端和服务器之间建立长连接;基于该长连接,服务器向客户端发送数据对象的更新信息,保证客户端和服务器之间的数据同步;基于该长连接服务器向客户端发送服务器的当前时间信息,包含客户端和服务器之间的时间同步。

WebSocket是HTML5的一种协议。WebSocket可以实现客户端与服务器之间的全双工通信(full-duplex),使客户端和服务器进行实时通信。进而通过本发明减少了客户端对服务器的无效轮询,避免了客户端向服务器发送大量的不必要的请求,并且解决了客户端和服务器之间实时性差的问题。

以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

实施例一

本实施例提供一种在客户端侧执行的实时同步方法。图1是根据本发明第一实施例的实时同步方法的流程图。本实施例的执行主体为客户端。该客户端例如为浏览器客户端。

步骤S110,基于Websocket协议和服务器之间建立长连接。

长连接是指通信双方在一个连接上可以连续发送多个数据包。进一步地,该长连接为套接字Socket连接。

长连接的建立过程为客户端和服务器的握手过程。客户端向服务器发起握手请求,服务器对该握手请求进行响应,客户端和服务器之间的长连接建立完成。进一步地,该建立过程可以借助HTTP(HyperText Transfer Protocol,超文本传输协议)请求来完成。

步骤S120,基于所述长连接,向所述服务器发送针对数据对象的订阅请求。

数据对象是指具有一组不同性质或者属性的事物。该事物可以是实体对象的抽象。例如:数据对象为一辆汽车,可以通过该汽车的属性来描述该汽车。

订阅请求用于请求服务器在数据对象的信息发生改变时返回该数据对象变化后的更新信息,以便使客户端和服务器之间的数据是同步的。在订阅请求中携带数据对象的信息,如数据对象的ID。

例如:用户打开实时竞拍界面,查看正在竞拍中的车辆信息,如竞拍价格,这时可以向服务器发送订阅请求,在竞拍价格变化之后,由服务器负责将该变化后的竞拍价格反馈给客户端,使客户端可以显示最新的竞拍价格。

步骤S130,接收所述服务器根据所述订阅请求返回的所述数据对象的更新信息以及随所述更新信息一同返回的所述服务器的当前时间信息,以使所述客户端和所述服务器数据同步且时间同步。

服务器的当前时间信息可以是服务器的系统时间或者服务器的计时时间。

在接收到数据对象的更新信息之后,根据该更新信息,对客户端侧的该数据对象的当前信息进行更新并显示,保证客户端和服务器的数据一致性。进一步地,在显示数据对象的信息时,可以采用模块化显示方式,即将显示页面划分成多个显示区域,每个区域始终用于显示一类内容。例如:第一显示区域用于显示时间的相关信息,第二显示区域用于显示数据对象的相关信息。

在接收到服务器的当前时间信息后,根据服务器的当前时间信息对客户端的当前时间信息进行校准,使客户端的当前时间和服务器的当前时间相同,保证客户端和服务器的时间一致性。客户端的当前时间信息可以是客户端侧的系统时间或者客户端的计时时间(定时时间)。

在长连接建立之后,为了保持该长连接有效,客户端每隔预定时间向服务器发送心跳包,服务器在接收到心跳包之后向客户端发送应答包。客户端如果在预定时间段内没有收到应答包,则说明长连接已经断开,需要进行重连接,这时客户端基于Websocket协议重新和服务器之间建立长连接。进一步地,如果距离上一次接收到所述服务器返回的更新信息的时间达到预设时长,则每隔预设时间段向所述服务器发送一次心跳包,以便保持所述长连接有效。在向所述服务器发送心跳包之后,如果未接收到所述服务器针对所述心跳包返回的应答包,则判定该长连接断开,重新通过Websocket协议和服务器建立长连接。

在本实施例中,客户端和服务器基于长连接可以进行双工通信,避免客户端对服务器进行无效轮询。

在本实施例中,在长连接建立之后,通过订阅的方式从服务器获得数据对象的更新信息以及服务器的当前时间信息,获得的更新信息和时间信息更具时效性,进而可以实现客户端和服务器之间的数据同步和时间同步。进一步地,在本实施例中,服务器在向客户端返回更新信息时将当前时间信息一同返回,根据服务器的当前时间信息对客户端的当前时间进行校准,保证客户端和服务器之间的时间同步。

实施例二

本实施例提供一种在服务器侧执行的实时同步方法。图2是根据本发明第二实施例的实时同步方法的流程图。本实施例的执行主体为服务器。

步骤S210,通过Websocket协议和客户端建立长连接。

服务器基于Websocket协议与客户端建立长连接。服务器接收客户端发送的握手请求,对该握手请求进行响应,进而建立长连接。

步骤S220,基于所述长连接,接收所述客户端针对数据对象的订阅请求。

步骤S230,根据所述订阅请求,在更新所述数据对象对应的信息之后,将所述数据对象的更新信息返回给所述客户端,并将当前时间信息随所述更新信息一同返回给所述客户端。

根据所述订阅请求针对的数据对象,监控该数据对象的信息是否发生改变,如果发生改变,则将改变后的信息发送给客户端,即将该数据对象的更新信息返回给客户端,以便客户端和服务器两侧的数据同步。

为了使客户端和服务器的时间同步,可以在向客户端返回更新信息时,将服务器的当前时间信息一同返回给客户端。

为了保持长连接有效,在长连接建立之后,会接收到客户端发送的心跳包,在接收到客户端发送的心跳包之后,针对该心跳包向客户端返回应答包。

在本实施例中,服务器接受客户端对数据对象的更新信息的订阅,进而在数据对象的信息发生更新时,主动将更新信息发送给客户端,并且将当前时间信息一同发送给客户端,使客户端侧的数据对象信息和时间信息和服务器保持同步。

实施例三

下面对本发明的实时同步方法进行进一步地的说明。

图3是根据本发明第三实施例的实时同步方法的示意图。

Login,表示打开客户端。该客户端例如是浏览器客户端。进一步地,在浏览器客户端中打开所需的网页,显示该网页的界面。

Open,表示启动套接字Socket。

Connect,表示通过WebSocket协议建立客户端与服务器的长连接。

Subscribe,表示客户端向服务器发送针对数据对象的订阅请求,以便服务器根据该订阅请求在该数据对象的信息发生改变(更新),能够及时主动地将该改变后的信息发送给客户端。

Heartbeat,表示心跳监测。客户端每隔预定时间段向服务器发送一次心跳包(ping),服务器在接收到该心跳包之后返回应答包(pong)。

倒三角重连机制,用于通过计时器timer对长连接的闲置时间进行计时。闲置时间是指距离上一次接收到服务器返回的信息的时间长度。如果闲置时间达到预设时长,则启动心跳监测,如果客户端的网络监测模块netjudger判定服务器未返回应答包,则Reconnect重新连接服务器。

在客户端侧,如果距离上一次接收到服务器返回的信息的时间到达预设时长(如60s),则客户端每隔预定时间段向服务器发送心跳包,服务器在接收到该心跳包之后返回应答包,这样可以判断客户端和服务器之间的长连接是否异常,如果异常,则客户端重新和服务器建立长连接。客户端如果在一段时间内接收到心跳包对应的应答包,则长连接正常,反之长连接异常。上述信息可以是更新信息也可以是其他信息。长连接异常例如是:网线被拔掉、网络阻塞等网络故障问题。

Close,表示监测长连接断开的次数,如果客户端和服务器之间的长连接断开的次数超过次数阈值,则判断基于该长连接未收到服务器的应答包的时间是否超过预设应答时间阈值,如果是,则主动断开该长连接,在需要从服务器获得更新信息以及服务器的当前时间信息时,再由Reconnect重新和服务器建立长连接。

如果数据对象的数量为多个,则可以建立消息订阅队列Subscribe queue,将多个数据对象的信息存入该消息订阅队列,并顺次为消息订阅队列中的每个数据对象向服务器订阅更新消息。

实施例四

由于实时竞拍场景对数据同步和时间同步的要求较高,下面针对实时竞拍场景,对本发明的实时同步方法进行进一步的描述。本实施例在浏览器客户端侧执行,数据对象为车辆。本实施例的执行主体为客户端。

图4是根据本发明第四实施例的实时同步方法的流程示意图。

步骤1,打开浏览器客户端,进入竞拍界面,并和服务器建立长连接。

步骤2,从服务器侧拉取所有车辆信息。

车辆信息包括:车辆品牌、车辆型号、过户类型(公务车辆、普通车辆)、起拍价格等信息。

步骤3,对车辆信息进行检测,识别需要竞拍的车辆以及竞拍顺序。

步骤4,按照竞拍顺序获取车辆信息并显示,同时向服务器订阅该车辆信息的变化。

对车辆信息中的竞拍日期和竞拍时间进行检测,识别当日需要竞拍的车辆以及竞拍顺序;在当日需要竞拍的车辆中,根据竞拍时间对车辆信息进行排序,从第一个需要竞拍的车辆开始,顺序获取车辆信息并在竞拍界面中进行显示。

可以将需要竞拍的多个车辆的车辆信息存储在消息订阅队列中,每从消息订阅队列中获取一个车辆信息,就向服务器订阅该车辆信息的变化。

步骤5,接收服务器发送的该车辆信息对应的竞拍状态并显示。

竞拍状态包括等待中和竞拍中。等待中为竞拍中之前的竞拍状态。

等待中是指该车辆信息对应的车辆尚未开始竞拍。

竞拍中是指该车辆信息对应的车辆已经开始竞拍。

步骤6,判断该竞拍状态是否为竞拍中;如果是,则执行步骤7;如果否,则执行步骤5。

步骤7,启动定时器并显示定时器的定时信息。

定时器为倒计时定时器。进一步地,在客户端内核中通常提供计时功能,通过该计时功能创建当前竞拍车辆的对应的定时器。

定时信息用于提示用户距离拍卖该车辆信息对应的车辆结束的时间。例如:距离结束时间还有1分钟50秒。

步骤8,接收服务器发送的该车辆信息的变化以及服务器的计时时间。

服务器的计时时间为距离拍卖该车辆信息对应的车辆结束的时间。

车辆信息的变化包括:车辆竞拍价格的变化。

服务器在发送车辆信息的变化以及服务器的计时时间时,可以使用乐观锁,为车辆信息的变化以及服务器的计时时间时添加版本号,以保证在数据同步和时间同步的过程,客户端使用正确的数据进行数据更新。

步骤9,根据该车辆信息的变化对该车辆信息进行更新并显示更新后的车辆信息,并且根据服务器的计时时间对定时器的定时信息进行校准并显示校准后的定时信息。

客户端和服务器在竞拍开始出价后,实时同步服务器的竞拍价格、计时时间等信息到客户端,保证客户端和服务器的数据同步和时间同步。避免客户端定期轮询服务器询问车辆信息的变化和计时时间的问题,因此在本实施例中,客户端能够及时快速得到服务器端最新数据。

为了避免在竞拍中客户端和服务器之间的长连接异常造成的竞拍失败的问题,客户端可以选择定时器定时到预定时刻时,如定时器倒计时到15S和3S时,客户端和服务器建立短连接,从服务器获取车辆信息的变化和当前的计时时间,断开该短连接并对客户端侧的车辆信息和计时时间进行更新。

步骤10,定时器结束之后,从服务器获取竞拍结果并显示。

竞拍结果包括:最终竞拍价格和成交信息。

由于参与竞拍的客户端数量可能较多,所以为了避免给服务器的处理造成压力,可以在定时器结束后的预定时间(如2s)从服务器获取竞拍结果并显示。

步骤11,判断需要竞拍的车辆是否都竞拍结束;如果是,则结束流程,如果否,则跳转到步骤4。

在本实施例中,采用BidView方式显示车辆信息、竞拍状态、定时信息和竞拍结果,即采用模块化显示方式,将竞拍界面划分成多个显示区域,每个区域用于显示一类内容。这样,不同车辆的车辆信息、竞拍状态、定时信息和竞拍结果可以在竞拍界面的不同显示区域分别进行加载和渲染,在其中一个显示区域对应的信息需要更新时,无需重新加载整个界面,仅加载发生变化的部分显示区域即可,进而实现了竞拍界面的复用性。

在本实施例中,如果服务器中的数据可以采用分布式缓存的方式进行存储。例如分布存储在多个缓存服务器中,这样可以满足好了客户端快速链接的需求。如果将数据分布存储在多个缓存服务器中,则客户端需要和数据对象的信息所在的缓存服务器建立长连接,以便实时获得最新的数据。

实施例五

本实施例提供一种设置在客户端的实时同步装置。图5是根据本发明第五实施例的实时同步装置的结构图。

该设置在客户端侧的实时同步装置包括:

第一连接模块510,用于通过Websocket协议和服务器建立长连接。

第一发送模块520,用于基于所述长连接,向所述服务器发送针对数据对象的订阅请求。

第一接收模块530,用于接收所述服务器根据所述订阅请求返回的所述数据对象的更新信息以及随所述更新信息一同返回的所述服务器的当前时间信息,以使所述客户端和所述服务器数据同步且时间同步。

在一个实施例中,第一发送模块520,还用于在距离上一次接收到所述服务器返回的更新信息的时间达到预设时长的情况下,每隔预设时间段向所述服务器发送一次心跳包,以便保持所述长连接有效。

在另一实施例中,第一连接模块510还用于在所述第一发送模块向所述服务器发送心跳包之后,如果第一接收模块530未接收到所述服务器针对所述心跳包返回的应答包,则重新通过Websocket协议和服务器建立长连接。

本实施例所述的装置的功能已经在图1~图4所示的方法实施例中进行了描述,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。

实施例六

本实施例提供一种设置在服务器侧的实时同步装置的结构图。图6是根据本发明第六实施例的实时同步装置的结构图。

该设置在服务器侧的实时同步装置,包括:

第二连接模块610,用于通过Websocket协议和客户端建立长连接。

第二接收模块620,用于基于所述长连接,接收所述客户端针对数据对象的订阅请求。

第二发送模块630,用于根据所述订阅请求,在更新所述数据对象对应的信息之后,将所述数据对象的更新信息返回给所述客户端,并将当前时间信息随所述更新信息一同返回给所述客户端,以使所述客户端和所述服务器数据同步且时间同步。

在一个实施例中,第二发送模块630,还用于在接收到所述客户端发送的心跳包之后,针对所述心跳包向所述客户端返回应答包。

本实施例所述的装置的功能已经在图1~图4所示的方法实施例中进行了描述,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1