CN107317788A - 实时数据推送方法和装置 - Google Patents
实时数据推送方法和装置 Download PDFInfo
- Publication number
- CN107317788A CN107317788A CN201610266866.6A CN201610266866A CN107317788A CN 107317788 A CN107317788 A CN 107317788A CN 201610266866 A CN201610266866 A CN 201610266866A CN 107317788 A CN107317788 A CN 107317788A
- Authority
- CN
- China
- Prior art keywords
- data
- push
- real time
- cycle
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/40—Support for services or applications
- H04L65/4061—Push-to services, e.g. push-to-talk or push-to-video
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了实时数据推送方法和装置。所述方法的一具体实施方式包括:响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接,获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期,根据所述推送周期周期性地查询所述数据名称对应的实时数据,通过所述连接向客户端推送所述实时数据。该实施方式实现了实时数据的及时推送。
Description
技术领域
本申请涉及计算机技术领域,具体涉及互联网技术领域,尤其涉及实时数据推送方法和装置。
背景技术
对于现代企业,如何能使决策者随时查看实时数据,以便快速地做出更为灵活的商业决策,是企业信息化建设的关键。推送技术的基础思想是将客户端主动查询信息改为服务器主动发送信息。服务器发送一批数据,客户端显示这些数据,同时保证与服务器的连接。
现有的实时数据推送方法通常是使用Ajax(AsynchronousJavascript And XML,异步JavaScript和XML)技术,通过客户端定时期轮询向服务器请求JSON(JavaScript Object Notation,基于JavaScript语言的轻量级的数据交换格式)数据,之后客户端对数据进行解析展现。然而,使用Ajax技术每次通信都需要一个新的HTTP(HyperTextTransfer Protocol,超文本传输协议)请求,服务器与客户端之间建立的不是支持全双工通信的连接,会导致数据延迟的问题,用户无法精确获得真实的实时数据,且开启多个监控界面时,服务器并发访问的压力大,面临高并发请求的问题。
发明内容
本申请的目的在于提出一种改进的实时数据推送方法和装置,来解决以上背景技术部分提到的技术问题。
第一方面,本申请提供了一种实时数据推送方法,所述方法包括:响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接;获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期;根据所述推送周期周期性地查询所述数据名称对应的实时数据;通过所述连接向客户端推送所述实时数据。
在一些实施例中,所述连接包括WebSocket连接;以及所述通过所述连接向客户端推送所述实时数据,包括:通过所述WebSocket连接向客户端推送所述实时数据。
在一些实施例中,所述推送周期为一秒;以及所述根据所述推送周期周期性地查询所述数据名称对应的实时数据,包括:判断是否是获取所述推送请求后首次查询所述数据名称对应的实时数据;如果是,则获取当前时间;响应于当前时间与预先设置的时间点一致,查询所述数据名称对应的实时数据,其中,所述时间点包括当前时间的下一个整秒;如果否,则获取当前时间;判断所述当前时间与上一次查询所述数据名称对应的实时数据的时间的时间差是否为一秒的整数倍;如果是,则查询所述数据名称对应的实时数据。
在一些实施例中,所述推送周期为一秒;以及所述根据所述推送周期周期性地查询所述数据名称对应的实时数据,包括:获取当前时间;判断所述当前时间与预先设置的时间点的时间差是否为一秒的整数倍;如果是,则查询所述数据名称对应的实时数据。
在一些实施例中,所述根据所述推送周期周期性地查询所述数据名称对应的实时数据,包括:判断用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程是否已经启动;如果否则启动用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程;根据所述推送周期周期性地查询所述数据名称对应的实时数据。
第二方面,本申请提供了一种实时数据推送装置,所述装置包括:连接建立单元,配置用于响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接;获取单元,配置用于获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期;查询单元,配置用于根据所述推送周期周期性地查询所述数据名称对应的实时数据;推送单元,配置用于通过所述连接向客户端推送所述实时数据。
在一些实施例中,所述连接包括WebSocket连接;以及所述推送单元,进一步配置用于通过所述WebSocket连接向客户端推送所述实时数据。
在一些实施例中,所述推送周期为一秒;以及所述查询单元,进一步配置用于:判断是否是获取所述推送请求后首次查询所述数据名称对应的实时数据;如果是,则获取当前时间;响应于当前时间与预先设置的时间点一致,查询所述数据名称对应的实时数据,其中,所述时间点包括当前时间的下一个整秒;如果否,则获取当前时间;判断所述当前时间与上一次查询所述数据名称对应的实时数据的时间的时间差是否为一秒的整数倍;如果是,则查询所述数据名称对应的实时数据。
在一些实施例中,所述推送周期为一秒;以及所述查询单元,进一步配置用于:获取当前时间;判断所述当前时间与预先设置的时间点的时间差是否为一秒的整数倍;如果是,则查询所述数据名称对应的实时数据。
在一些实施例中,所述查询单元,进一步配置用于:判断用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程是否已经启动;如果否则启动用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程;根据所述推送周期周期性地查询所述数据名称对应的实时数据。
本申请提供的实时数据推送方法和装置,通过响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接,而后获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期,之后根据所述推送周期周期性地查询所述数据名称对应的实时数据,最后通过所述连接向客户端推送所述实时数据,实现了实时数据的及时推送。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的实时数据推送方法的一个实施例的流程图;
图3是根据本申请的实时数据推送方法的一个应用场景的示意图;
图4是根据本申请的实时数据推送方法的又一个实施例的流程图;
图5是根据本申请的实时数据推送装置的一个实施例的结构示意图;
图6是适于用来实现本申请实施例的服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的实时数据推送方法或实时数据推送装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备101、102、103可以是具有显示屏的电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(MovingPicture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如与终端设备101、102、103建立支持全双工通信的连接,获取终端设备发送的推送请求,其中推送请求包括数据名称以及数据的推送周期,根据推送周期周期性地查询数据名称对应的实时数据,通过上述连接向客户端推送实时数据的服务器。
需要说明的是,本申请实施例所提供的实时数据推送方法一般由服务器105执行,相应地,实时数据推送装置一般设置于服务器105中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请的实时数据推送方法的一个实施例的流程200。所述的实时数据推送方法,包括以下步骤:
步骤201,响应客户端发送的连接请求,与客户端建立支持全双工通信的连接。
在本实施例中,实时数据推送方法运行于其上的电子设备(例如图1所示的服务器)首先接收客户端发送的连接请求,连接请求可以是通过HTTP发送的。同时,连接请求需表明请求建立的连接是支持全双工通信的,即连接使用的是一种双向通信协议。上述全双工通信、双向通信是指在建立连接后,服务器和客户端都能主动的向对方发送或接收数据。随后,上述电子设备响应接收到的连接请求,通常是返回数据表示已经接受到连接请求,连接成功建立。
在本实施例的一些可选的实现方式中,上述连接可以是WebSocket连接。WebSocket连接是指使用WebSocket协议的连接,WebSocket协议可以实现客户端与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯。WebSocket连接建立时,需要通过客户端发出WebSocket连接请求,然后服务器发出回应,这个过程通常称为“握手”(handshaking),客户端和服务器在初始握手时,可以将HTTP协议升级到WebSocket协议。WebSocket连接建立后,客户端和服务器之间形成一条通道,后续可直接进行数据的双向传送,不再需要发起连接和响应。
步骤202,获取客户端发送的推送请求。其中推送请求包括数据名称以及数据的推送周期。
在本实施例中,上述电子设备(例如图1所示的服务器)可以通过步骤201中建立的连接或者其他方式,例如也可以是通过HTTP请求的方式,获取客户端发送的推送请求,其中推送请求包括数据名称以及数据的推送周期。如果推送请求中不包括数据的推送周期,也可以使用缺省的推送周期,例如一秒。
步骤203,根据推送周期周期性地查询数据名称对应的实时数据。
在本实施例中,上述电子设备(例如图1所示的服务器)可以根据步骤202中得到的推送周期,周期性地查询步骤202中得到的数据名称对应的实时数据。通常,实时数据保存在数据库中,例如,Redis数据库,Redis数据库是一个开源的支持网络、可基于内存亦可持久化的日志型、键-值存储(key-value store)数据库,并提供多种语言的API(Application Programming Interface,应用程序编程接口)。查询到的数据可以加入消息队列中,以备推送步骤取用。具体的可以利用Redis数据库中列表“lists”这种数据结构,来实现消息队列。
在本实施例的一些可选的实现方式中,推送周期可以为一秒。推送周期为一秒时,可以首先获取当前时间,之后判断当前时间与预先设置的时间点的时间差是否为一秒的整数倍,如果是,则查询上述数据名称对应的实时数据。
在本实施例的一些可选的实现方式中,上述时间点可以是当前时间的下一个整秒。整秒的概念类似于整点,是指毫秒数为零的时间点。当前时间的下一个整秒计算方式可以是当前时间的秒数加一,毫秒数归零。例如,当前时间是两秒三十毫秒,那么当前时间的下一个整秒即为三秒整。
在本实施例的一些可选的实现方式中,推送周期为一秒时,也可以判断是否是获取上述推送请求后首次查询上述数据名称对应的实时数据;如果是,则获取当前时间;响应于当前时间与预先设置的时间点一致,查询上述数据名称对应的实时数据,其中,上述时间点包括当前时间的下一个整秒;如果否,则获取当前时间;判断上述当前时间与上一次查询上述数据名称对应的实时数据的时间的时间差是否为一秒的整数倍;如果是,则查询上述数据名称对应的实时数据。这样,将上一次查询时间作为基准,在调度的任务本身执行时间不稳定可能会出现超过1s时,可以自动校正下次调用时间。
在使用Java编程语言编写程序时,通过ScheduledExecutor或Timer也可以实现间隔1s的调度。接口Executor是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异步IO和轻量级任务框架,其子接口ScheduledExecutorService添加了对延迟的和定期任务执行的支持。它们属于并发工具包java.util.concurrent,java.util.concurrent是在并发编程中常用的实用工具类。ScheduledExecutor是一个可以重复执行任务的线程池,并且可以指定任务的间隔和延迟时间。但是通过ScheduledExecutor无法实现每次调度在每个整秒即每秒的0毫秒时刻执行。定时器Timer属于java.util.Timer工具类,java.util包中可以找到Timer。Timer可以用来指定某个时间来执行一项任务,或者每隔一定时间间隔反复执行同一个任务。Timer虽然可以设置首次执行时间,但是运行一段时间后,也无法保证在每个整秒执行任务,如果任务本身执行时间不稳定,会出现超过1s的情况,无法自动调整下次执行时间。
步骤204,通过上述连接向客户端推送实时数据。
在本实施例中,上述电子设备(例如图1所示的服务器)可以通过步骤201中建立的连接,向客户端推送步骤203中得到的实时数据。由于步骤201中建立的连接支持全双工通信,所以连接建立后,只需等待触发事件发生,而不需客户端定期向服务器轮询。可以通过添加回调函数来监听触发事件,触发事件发生后服务器能主动向客户端推送数据,而不需要响应于客户端再次发送的请求才能推送数据。例如,触发事件是当前时间点是一个整秒,在服务器与客户端之间已经建立了WebSocket连接的情况下,当服务器判断出当前时间点是一个整秒时,服务器可以直接向客户端推送数据。
继续参见图3,图3是根据本实施例的实时数据推送方法的应用场景的一个示意图。在图3的应用场景中,客户端与服务器建立WebSocket连接后,用户通过客户端发起订阅消息的动作,客户端向服务器发送包括用户所需数据的信息的请求。例如,用户请求当日实时的订单量数据,希望获取实时订单量数据的时间周期是一秒。服务器通过建立的WebSocket连接接收到请求的数据的信息后,在数据库中查询所需数据,并将查询到的数据加入到消息队列中作为待推送数据。最后推送线程向客户端推送上述待推送数据,客户端接收到数据后就会如图3所示,显示当前时间以及当前时间对应的订单量的数据,之后每秒更新数据。
本申请的上述实施例提供的方法通过服务器与上述客户端建立支持全双工通信的连接,使得服务器可以主动向客户端推送数据,每次推送信息时不都需要客户端先发送请求,实现了实时数据的及时推送。
进一步参考图4,其示出了实时数据推送方法的又一个实施例的流程400。该实时数据推送方法的流程400,包括以下步骤:
步骤401,响应客户端发送的连接请求,与客户端建立支持全双工通信的连接。
在本实施例中,实时数据推送方法运行于其上的电子设备(例如图1所示的服务器)首先,接收客户端发送的连接请求,上述连接请求需表明请求建立的连接是支持全双工通信的,即连接使用的是一种双向通信协议。随后,上述电子设备响应接收到的连接请求,通常是返回数据表示已经接受到连接请求,连接成功建立。
步骤402,获取客户端发送的推送请求,其中推送请求包括数据名称以及数据的推送周期。
在本实施例中,客户端可以通过步骤401中建立的连接向上述电子设备发送推送请求,其中上述推送请求包括数据名称以及数据的推送周期。如果推送请求中不包括数据的推送周期,也可以使用缺省的推送周期,例如一秒。
步骤403,判断用于根据上述推送周期周期性地推送上述数据名称对应的实时数据的推送线程是否已经启动。
如果是则进入步骤405,如果否则进入步骤404。
在本实施例中,上述电子设备可以先判断用于根据上述推送周期周期性地推送上述数据名称对应的实时数据的推送线程是否已经启动,如果是,则可以调用查询线程,根据推送周期周期性地查询数据名称对应的实时数据。如果上述推送线程未启动,那么可以启动上述推送线程。
步骤404,启动用于根据上述推送周期周期性地推送上述数据名称对应的实时数据的推送线程。
在本实施例中,上述电子设备启动用于根据上述推送周期周期性地推送上述数据名称对应的实时数据的推送线程,同时,可以记录已经启动了上述线程,以备后续线程状态的查询。在需要时,例如推送线程过多服务器处理压力过大时,也可以选择暂停部分推送线程。
步骤405,根据推送周期周期性地查询数据名称对应的实时数据。
在本实施例中,上述电子设备启动的推送线程会调用查询线程,查询线程根据步骤402中得到的推送周期,周期性地查询步骤402中得到的数据名称对应的实时数据,可以将实时数据放入数据队列中,以供推送线程使用。查询到实时数据后也可以先将其与上一次查询到的实时数据作比较,判断是否存在数据异常的情况,例如变化的幅度与预期值相差过大。如果存在数据异常的情况,可以向系统管理者推送数据异常信息,先不将查询到的数据放入数据队列中,直到数据正常后再将查询到的数据放入数据队列中。
通常,服务器的缓存数据会存于Redis数据库中,例如,一个网购类网站或应用,其每成交一个订单,订单号可以存入一个列表中,可以根据推送周期周期性地查询上述列表中订单号的个数,以此可以订单量数据的实时获取。
在下文中,将以常用的程序设计语言Java为例,阐述如何实现在每一个整秒进行查询:
1、获取当前时间的下一个整秒,将其设置为上次执行时间。可以预先定义一个长整型(long)变量,可将其命名为lastExecTime,用于存放上次执行时间。通过函数System.currentTimeMillis()获取当前时间,currentTimeMillis()为Java编程语言的一种计时方法,从早期版本起它就是标准API的一部分,其中System类代表系统,系统级的很多属性和控制方法都放置在该类的内部,System类位于java.lang包,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。System.currentTimeMillis()返回值时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。当前时间先对1000求余,用当前时间减去上述求余得到的的余数再加1000,将计算结果赋给变量lastExecTime。
2、进入循环,预先定义一个长整型(long)变量,可将其命名为curtTime,用于存放当前时间。将System.currentTimeMillis()返回值赋给变量curtTime。之后判断变量curtTime的值与变量lastExecTime的值之差是否能整除1000,如果能,且当前推送线程没有暂停,则查询数据名称对应的实时数据,并将lastExecTime的值更新为curtTime的值。
步骤406,通过上述连接向客户端推送实时数据。
在本实施例中,上述电子设备可以在步骤404得到实时数据后立即通过步骤401中建立的连接向客户端推送实时数据。
从图4中可以看出,与图2对应的实施例相比,本实施例中的实时数据推送方法的流程400突出了线程管理的步骤。由此,本实施例描述的方案可以通过同时运行多个推送线程,实现不同的实时数据的同时查询,令上述电子设备更高效化,从而实现更全面的实时数据推送。
进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种实时数据推送装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图5所示,本实施例上述的实时数据推送装置500包括:连接建立单元501、获取单元502、查询单元503和推送单元504。其中,连接建立单元501,配置用于响应客户端发送的连接请求,与上述客户端建立支持全双工通信的连接;获取单元502配置用于获取客户端发送的推送请求,其中上述推送请求包括数据名称以及数据的推送周期;查询单元503配置用于根据上述推送周期周期性地查询上述数据名称对应的实时数据;而推送单元504配置用于通过上述连接向客户端推送上述实时数据。
在本实施例中,实时数据推送装置500的连接建立单元501可以首先接收客户端发送的连接请求,连接请求可以是通过HTTP发送的。同时,连接请求需表明请求建立的连接是支持全双工通信的,即连接使用的是一种双向通信协议。上述全双工通信、双向通信是指在建立连接后,服务器和客户端都能主动的向对方发送或接收数据。随后,连接建立单元501响应接收到的连接请求,通常是返回数据表示已经接受到连接请求,连接成功建立。
在本实施例中,获取单元502可以通过连接建立单元501建立的连接获取客户端发送的推送请求,其中上述推送请求包括数据名称以及数据的推送周期。如果推送请求中不包括数据的推送周期,也可以使用缺省的推送周期,例如一秒。
在本实施例中,查询单元503可以根据获取单元502得到的推送周期,周期性地查询获取单元502得到的数据名称对应的实时数据。通常,实时数据保存在数据库中,例如,Redis数据库,Redis数据库是一个开源的支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。查询到的数据可以加入消息队列中,以备推送步骤取用。具体的可以利用Redis数据库中列表“lists”这种数据结构,来实现消息队列,使用push指令存入查询线程查询到的数据,使用pop指令使得推送线程可以获取消息队列中查询线程查询到的数据。
在本实施例中,推送单元504可以通过连接建立单元501建立的连接向客户端推送查询单元503查询到的实时数据。由于连接建立单元501建立的连接支持全双工通信,所以连接建立后,只需等待触发事件发生,而不需客户端定期向服务器轮询,可以通过添加回调函数来监听触发事件,触发事件发生后服务器能主动向客户端推送数据,而不需要响应于客户端再次发送的请求才能推送数据。例如,触发事件是当前时间点是一个整秒,在服务器与客户端之间已经建立了WebSocket连接的情况下,当服务器判断出当前时间点是一个整秒时,服务器可以直接向客户端推送数据。
在本实施例的一些可选的实现方式中,上述连接包括WebSocket连接;以及上述推送单元504,进一步配置用于通过上述WebSocket连接向客户端推送上述实时数据。
在本实施例的一些可选的实现方式中,上述推送周期为一秒;以及上述查询单元503,进一步配置用于:判断是否是获取上述推送请求后首次查询上述数据名称对应的实时数据;如果是,则获取当前时间;响应于当前时间与预先设置的时间点一致,查询上述数据名称对应的实时数据,其中,上述时间点包括当前时间的下一个整秒;如果否,则获取当前时间;判断上述当前时间与上一次查询上述数据名称对应的实时数据的时间的时间差是否为一秒的整数倍;如果是,则查询上述数据名称对应的实时数据。
在本实施例的一些可选的实现方式中,上述推送周期为一秒;以及上述查询单元503,进一步配置用于:获取当前时间;判断上述当前时间与预先设置的时间点的时间差是否为一秒的整数倍;如果是,则查询上述数据名称对应的实时数据。
在本实施例的一些可选的实现方式中,上述查询单元503,进一步配置用于:判断用于根据上述推送周期周期性地推送上述数据名称对应的实时数据的推送线程是否已经启动;如果否则启动用于根据上述推送周期周期性地推送上述数据名称对应的实时数据的推送线程;根据上述推送周期周期性地查询上述数据名称对应的实时数据。
下面参考图6,其示出了适于用来实现本申请实施例的服务器的计算机系统600的结构示意图。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接;获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期;根据所述推送周期周期性地查询所述数据名称对应的实时数据;通过所述连接向客户端推送所述实时数据。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种实时数据推送方法,其特征在于,所述方法包括:
响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接;
获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期;
根据所述推送周期周期性地查询所述数据名称对应的实时数据;
通过所述连接向客户端推送所述实时数据。
2.根据权利要求1所述的方法,其特征在于,所述连接包括WebSocket连接;以及
所述通过所述连接向客户端推送所述实时数据,包括:
通过所述WebSocket连接向客户端推送所述实时数据。
3.根据权利要求1或2所述的方法,其特征在于,所述推送周期为一秒;以及
所述根据所述推送周期周期性地查询所述数据名称对应的实时数据,包括:
判断是否是获取所述推送请求后首次查询所述数据名称对应的实时数据;
如果是,则获取当前时间;响应于当前时间与预先设置的时间点一致,查询所述数据名称对应的实时数据,其中,所述时间点包括当前时间的下一个整秒;
如果否,则获取当前时间;判断所述当前时间与上一次查询所述数据名称对应的实时数据的时间的时间差是否为一秒的整数倍;如果是,则查询所述数据名称对应的实时数据。
4.根据权利要求1或2所述的方法,其特征在于,所述推送周期为一秒;以及
所述根据所述推送周期周期性地查询所述数据名称对应的实时数据,包括:
获取当前时间;
判断所述当前时间与预先设置的时间点的时间差是否为一秒的整数倍;
如果是,则查询所述数据名称对应的实时数据。
5.根据权利要求1或2所述的方法,其特征在于,所述根据所述推送周期周期性地查询所述数据名称对应的实时数据,包括:
判断用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程是否已经启动;
如果否,则启动用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程;根据所述推送周期周期性地查询所述数据名称对应的实时数据。
6.一种实时数据推送装置,其特征在于,所述装置包括:
连接建立单元,配置用于响应客户端发送的连接请求,与所述客户端建立支持全双工通信的连接;
获取单元,配置用于获取客户端发送的推送请求,其中所述推送请求包括数据名称以及数据的推送周期;
查询单元,配置用于根据所述推送周期周期性地查询所述数据名称对应的实时数据;
推送单元,配置用于通过所述连接向客户端推送所述实时数据。
7.根据权利要求6所述的装置,其特征在于,所述连接包括WebSocket连接;以及
所述推送单元,进一步配置用于通过所述WebSocket连接向客户端推送所述实时数据。
8.根据权利要求6或7所述的装置,其特征在于,所述推送周期为一秒;以及
所述查询单元,进一步配置用于:
判断是否是获取所述推送请求后首次查询所述数据名称对应的实时数据;
如果是,则获取当前时间;响应于当前时间与预先设置的时间点一致,查询所述数据名称对应的实时数据,其中,所述时间点包括当前时间的下一个整秒;
如果否,则获取当前时间;判断所述当前时间与上一次查询所述数据名称对应的实时数据的时间的时间差是否为一秒的整数倍;如果是,则查询所述数据名称对应的实时数据。
9.根据权利要求6或7所述的装置,其特征在于,所述推送周期为一秒;以及
所述查询单元,进一步配置用于:
获取当前时间;
判断所述当前时间与预先设置的时间点的时间差是否为一秒的整数倍;
如果是,则查询所述数据名称对应的实时数据。
10.根据权利要求6或7所述的装置,其特征在于,所述查询单元,进一步配置用于:
判断用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程是否已经启动;
如果否则启动用于根据所述推送周期周期性地推送所述数据名称对应的实时数据的推送线程;根据所述推送周期周期性地查询所述数据名称对应的实时数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610266866.6A CN107317788A (zh) | 2016-04-26 | 2016-04-26 | 实时数据推送方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610266866.6A CN107317788A (zh) | 2016-04-26 | 2016-04-26 | 实时数据推送方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107317788A true CN107317788A (zh) | 2017-11-03 |
Family
ID=60184622
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610266866.6A Pending CN107317788A (zh) | 2016-04-26 | 2016-04-26 | 实时数据推送方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107317788A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108156223A (zh) * | 2017-12-06 | 2018-06-12 | 深圳市猫投鹰信息科技有限公司 | 一种基于websocket的消息精准推送系统及方法 |
CN110324384A (zh) * | 2018-03-30 | 2019-10-11 | 北京京东尚科信息技术有限公司 | 数据推送的方法和装置 |
CN115601195A (zh) * | 2022-10-17 | 2023-01-13 | 桂林电子科技大学(Cn) | 基于电力用户实时标签的交易双向推荐系统及其方法 |
CN116233233A (zh) * | 2023-03-13 | 2023-06-06 | 霞智科技有限公司 | 一种基于ws协议的后台推送的开发方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102333128A (zh) * | 2011-10-31 | 2012-01-25 | 河南省电力公司计量中心 | 一种Web实时数据主动推送方法 |
CN103401837A (zh) * | 2013-07-01 | 2013-11-20 | 北京科东电力控制系统有限责任公司 | 一种面向scada系统的实时数据推送方法 |
CN105391536A (zh) * | 2015-10-28 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种客户端和服务端进行通信的方法及装置 |
-
2016
- 2016-04-26 CN CN201610266866.6A patent/CN107317788A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102333128A (zh) * | 2011-10-31 | 2012-01-25 | 河南省电力公司计量中心 | 一种Web实时数据主动推送方法 |
CN103401837A (zh) * | 2013-07-01 | 2013-11-20 | 北京科东电力控制系统有限责任公司 | 一种面向scada系统的实时数据推送方法 |
CN105391536A (zh) * | 2015-10-28 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种客户端和服务端进行通信的方法及装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108156223A (zh) * | 2017-12-06 | 2018-06-12 | 深圳市猫投鹰信息科技有限公司 | 一种基于websocket的消息精准推送系统及方法 |
CN110324384A (zh) * | 2018-03-30 | 2019-10-11 | 北京京东尚科信息技术有限公司 | 数据推送的方法和装置 |
CN110324384B (zh) * | 2018-03-30 | 2024-04-09 | 北京京东尚科信息技术有限公司 | 数据推送的方法和装置 |
CN115601195A (zh) * | 2022-10-17 | 2023-01-13 | 桂林电子科技大学(Cn) | 基于电力用户实时标签的交易双向推荐系统及其方法 |
CN115601195B (zh) * | 2022-10-17 | 2023-09-08 | 桂林电子科技大学 | 基于电力用户实时标签的交易双向推荐系统及其方法 |
CN116233233A (zh) * | 2023-03-13 | 2023-06-06 | 霞智科技有限公司 | 一种基于ws协议的后台推送的开发方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6829630B1 (en) | Mechanisms for web-object event/state-driven communication between networked devices | |
CN107943577B (zh) | 用于调度任务的方法和装置 | |
US7133908B1 (en) | Metrics and status presentation system and method using persistent template-driven web objects | |
US8458727B2 (en) | Asynchronous client to server updates | |
CN107729139A (zh) | 一种并发获取资源的方法和装置 | |
US20210337015A1 (en) | Method and system of application development for multiple device client platforms | |
EP2284701A1 (en) | Transparently stateful execution of stateless applications | |
CN104426985B (zh) | 显示网页的方法、装置及系统 | |
EP1780983B1 (en) | Service broker integration layer for supporting telecommunication client service requests | |
CN101452555A (zh) | 查询个人信用信息的方法、系统及个人信用查询系统 | |
CN110224896B (zh) | 一种网络性能数据采集方法、装置及存储介质 | |
CN104899274B (zh) | 一种内存数据库高效远程访问方法 | |
CN107317788A (zh) | 实时数据推送方法和装置 | |
US9557880B2 (en) | Shared user interface services framework | |
CN112954311B (zh) | 一种直播流媒体的性能测试方法及其系统 | |
CN110262807A (zh) | 集群创建进度日志采集系统、方法和装置 | |
CN109241033A (zh) | 创建实时数据仓库的方法和装置 | |
CN105930249B (zh) | 应用监控方法和装置 | |
CN109936605A (zh) | 一种加载接口数据的方法和装置 | |
CN111090533A (zh) | 公告信息发送方法、装置、电子设备及存储介质 | |
CN111831461A (zh) | 一种处理业务流程的方法和装置 | |
CN105100203B (zh) | 展示监控数据的方法及终端 | |
CN107517188A (zh) | 一种基于安卓系统的数据处理方法和装置 | |
CN113127057A (zh) | 多任务并行执行的方法和装置 | |
CN109375998B (zh) | 一种高并发请求环境中的处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171103 |