发明内容
本申请实施例提供了一种实时推送信息的方法、装置、计算机设备及存储介质,能够在只需要服务器端向客户端推送消息的场景下,在保障消息实时性的同时,减少对服务器资源的暂用和消耗。所述技术方案如下:
一方面,提供了一种实时推送信息的方法,所述方法由服务器执行,所述方法包括:
与至少两个客户端建立服务器端推送事件SSE连接,所述SSE连接是基于同一个路由接口所建立的连接;
将至少两个所述客户端的信息存储到同一个数组中;
实时监测是否存在待推送信息;
响应于存在待推送信息,遍历所述数组中存储的至少两个所述客户端的信息,将所述待推送信息发送给至少两个所述客户端。
在一种可能的实现方式中,所述与至少两个客户端建立SSE连接,包括:
接收至少两个所述客户端发送的SSE连接建立请求,其中,所述SSE连接建立请求中携带有所述客户端的标识;
所述将至少两个所述客户端的信息存储到一个数组中,包括:
将至少两个所述客户端的标识存储到一个数组中;
所述响应于存在待推送的消息,遍历所述数组中存储的至少两个所述客户端的信息,将所述待推送信息发送给至少两个所述客户端,包括:
响应于存在待推送的消息,遍历所述数组中存储的至少两个所述客户端的标识;
根据至少两个所述客户端的标识,将所述待推送信息发送给至少两个所述客户端。
在一种可能的实现方式中,所述方法还包括:
响应于所述客户端断开SSE连接,将断开连接的所述客户端的信息从所述数组中删除。
在一种可能的实现方式中,所述方法还包括:
以预设频率向至少两个所述客户端发送数据包,所述数据包用以确保与所述客户端连接的有效性。
另一方面,提供了一种实时推送信息的方法,所述方法由客户端执行,所述方法包括:
向服务器发送SSE连接建立请求,与所述服务器建立SSE连接,所述SSE连接建立请求中携带有所述客户端的标识,以使得所述服务器与所述客户端建立SSE连接,并将所述客户端的标识存储到一个数组中;
接收所述服务器返回的待推送信息,所述待推送信息是所述服务器响应于存在所述待推送信息,遍历所述数组中存储的所有客户端的标识,根据所述客户端的标识向所述客户端发送的待推送信息。
另一方面,提供了一种实时推送信息的装置,所述装置用于服务器中,所述装置包括:
连接建立模块,用于与至少两个客户端建立服务器端推送事件SSE连接,所述SSE连接是基于同一个路由接口所建立的连接;
存储模块,用于将至少两个所述客户端的信息存储到同一个数组中;
监测模块,用于实时监测是否存在待推送信息;
第一发送模块,用于响应于存在待推送信息,遍历所述数组中存储的至少两个所述客户端的信息,将所述待推送信息发送给至少两个所述客户端。
在一种可能的情况下,所述连接建立模块包括:
接受子模块,用于接收至少两个所述客户端发送的SSE连接建立请求,其中,所述SSE连接建立请求中携带有所述客户端的标识;
连接建立子模块,用于根据所述SSE连接建立请求分别与至少两个所述客户端建立SSE连接;
所述存储模块,用于将至少两个所述客户端的标识存储到同一个数组中;
所述第一发送模块,用于响应于存在待推送的消息,遍历所述数组中存储的至少两个所述客户端的标识;
根据至少两个所述客户端的标识,将所述待推送信息发送给至少两个所述客户端。
在一种可能的情况下,所述装置还包括:
删除模块,用于响应于所述客户端断开SSE连接,将断开连接的所述客户端的信息从所述数组中删除。
在一种可能的情况下,所述装置还包括:
第二发送模块,用于以预设频率向至少两个所述客户端发送数据包,所述数据包用以确保与至少两个所述客户端连接的有效性。
另一方面,提供了一种实时推送信息的装置,所述装置用于客户端中,所述装置包括:
发送模块,用于向服务器发送SSE连接建立请求,与所述服务器建立SSE连接,所述SSE连接建立请求中携带有所述客户端的标识,以使得所述服务器与所述客户端建立SSE连接,并将所述客户端的标识存储到一个数组中;
接收模块,用于接收所述服务器返回的待推送信息所述待推送信息是所述服务器响应于存在所述待推送信息,遍历所述数组中存储的所有客户端的标识,根据所述客户端的标识向所述客户端发送的待推送信息。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器存储有至少一条指令、至少一条程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述实时推送信息的方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述实时推送信息的方法。
本申请提供的技术方案可以包括以下有益效果:
通过服务器与客户端建立SSE连接,将客户端的信息存储到一个数组中,在监测到存在待推送信息时,遍历数组中存储的客户端信息,将待推送信息发送给客户端,使得在只需要服务器端向浏览器推送消息的场景中,将SSE规则与Node.js进行结合,在保障消息实时性的同时减少对相关资源的占用和消耗。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
在Web技术领域中,用户对信息实时性的要求越来越高,但信息实时性往往伴随着较高的信息占用,本申请提供一种实时推送信息的方法,在只需要服务器端向客户端推送消息的场景下,可以在保障消息实时性的同时减少对相关资源的占用和消耗。为了便于理解,下面对本申请实施例涉及的几个名词进行解释。
1)SSE(Server-Sent Event,服务器端推送事件)
SSE使用流信息向浏览器推送信息,建立浏览器与服务器之间的通信渠道,由服务器通过该通信渠道向浏览器推送信息,其中SSE是单向通道,信息只能服务器向浏览器发送,即服务器主动发送信息给客户端。
2)Websocket
Websocket协议基于TCP(Transmission Control Protocol,传输控制协议)的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信,即允许服务器主动发送信息给客户端。
SSE与Websocket协议都具有建立浏览器与服务器之间的通信渠道的功能,但两者之间存在区别:
(1)WebSocket是全双工通道,可以双向通信,功能更强;SSE是单向通道,只能服务器向浏览器端发送。
(2)WebSocket是一个新的协议,需要服务器端支持;SSE则是部署在HTTP协议之上的,现有的服务器软件都支持。
(3)SSE是一个轻量级协议,相对简单;WebSocket是一种较重的协议,相对复杂。
(4)SSE默认支持断线重连,WebSocket则需要额外部署。
(5)SSE支持自定义发送的数据类型。
基于上述区别,在本申请所应用的只需要服务器向浏览器推送消息的场景下,使用SSE相对于使用WebSocket而言,可以实现只占用很少的资源即可达到推送效果的目的,因此本申请中采用SSE技术以实现本申请所提供的方法。
3)单线程
单线程指的是主线程是“单线程”的,在单线程的程序执行过程中,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。
4)Node.js
Node.js就是运行在服务器端的JavaScript,它内建了HTTP服务器,可以直接实现网站和服务器功能,采用Node.js可以直接利用JavaScript进行服务器端逻辑和网页脚本的开发。Node.js利用非阻塞式输入输出接口和异步事件来将吞吐量和效率最大化并且在单线程进程上运行。
5)心跳机制
“心跳”,即在TCP长连接中,客户端和服务器之间定期发送的一种特殊的数据包,心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。
6)客户端(Client)
客户端,又称用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。
因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如数据库服务,电子邮件服务等等,这样在客户机和服务器端,需要建立特定的通信连接,来保证应用程序的正常运行。
7)服务器端(Server)
服务器端是为是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据等等。客户端可以是任意的一台电脑,只要它和服务器端存在连接,并且得到了服务器端的授权,就可以使用服务器端的服务。
图1是根据一示例性实施例示出的一种服务器端与终端进行信息交互的系统的结构示意图,该系统包括:若干个终端110和服务器集群120。
终端110可以是手机、平板电脑、电子书阅读器、智能眼镜、智能手表、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器等等。
在本申请的各个实施例中,客户端可以是终端中的软件或者应用程序,请参考图2,图2是根据一示例性实施例示出的终端的结构示意图。如图2所示,该终端包括主板210、外部输出/输入设备220、存储器230、外部接口240、电容触控系统250以及电源260。
其中,主板210中集成有处理器和控制器等处理元件。
外部输出/输入设备220可以包括显示组件(比如显示屏)、声音播放组件(比如扬声器)、声音采集组件(比如麦克风)以及各类按键等。
存储器230中存储有程序代码和数据。
外部接口240可以包括耳机接口、充电接口以及数据接口等。其中,数据接口包含短距离无线通信接口,以支持终端与其它终端之间进行短距离无线通信。
电容触控系统250可以集成在外部输出/输入设备220的显示组件或者按键中,电容触控系统250用于检测用户在显示组件或者按键上执行的触控操作。
电源260用于对终端中的其它各个部件进行供电。
在本申请实施例中,主板210中的处理器可以通过执行或者调用存储器中存储的程序代码和数据生成虚拟场景,并将生成的虚拟场景通过外部输出/输入设备220进行展示。在展示虚拟场景的过程中,可以通过电容触控系统250检测用户与虚拟场景进行交互时执行的触控操作。
终端110与服务器集群120之间通过通信网络相连。可选的,通信网络是有线网络或无线网络。
服务器集群120可以是一台服务器,或者由若干台服务器组成,或者是一个虚拟化平台,或者是一个云计算服务中心。
可选的,该系统还可以包括管理设备130,该管理设备130与服务器集群340之间通过通信网络相连。可选的,通信网络是有线网络或无线网络。
可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(Hyper Text Mark-up Language,HTML)、可扩展标记语言(Extensible MarkupLanguage,XML)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(Secure Socket Layer,SSL)、传输层安全(Transport Layer Security,TLS)、虚拟专用网络(Virtual Private Network,VPN)、网际协议安全(Internet ProtocolSecurity,IPsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
请参考图3,其示出了本申请一示例性实施例提供的实时推送信息的方法的流程图。该实时推送信息的方法可以应用于如图1所示的系统中,由服务器执行,该实时推送信息的方法可以包括以下步骤:
步骤310,与至少两个客户端建立SSE连接,该SSE连接是基于同一个路由接口所建立的连接。
其中,服务器是提供服务器端运行的环境和基础,服务器端是为客户端服务的,服务的内容诸如向客户端提供资源,保护客户端数据等等,服务器端不具备运算能力,通常只具备认证与传输的能力,以满足与多个客户端建立连接需求。
比如,在网页浏览的场景下,浏览器或者应用程序对应于客户端,而存放网页或数据库的服务器对应于服务器端,安装有浏览器或者应用程序的设备对应于终端,而运行服务器端的设备对应于服务器。
在本申请实施例中,服务器采用Node.js语言搭建服务器端,使用http模块的creat Server方法创建服务,并且通过监听一个路由来作为SSE服务接口,客户端可以通过该SSE接口实现对服务器端的访问。
其中,Node.js利用非阻塞式输入输出接口和异步事件来将吞吐量和效率最大化并且在单线程进程上运行,可以使得在实时推送信息时,在高并发情况下,仍能在占用极少的服务器资源前提下,提供可靠的服务器推送效果。
服务器端推送事件SSE是一种由服务器端主动向客户端实时发送新的数据信息的技术,一个服务器端可以与多个客户端基于同一个路由接口建立SSE连接,SSE连接建立的过程可以表现为,当客户端访问该路由接口时,服务器端会在响应头中设置ContenType为text/event stream以建立SSE连接,其中text/event stream为服务器端的相应内容类型,响应的文本可以看成是一个事件流,该事件流由不同的事件组成,在保持服务器端与客户端之间连接的前提下,服务器端可以将该事件流中的事件以及该事件流中新产生的事件主动发送给客户端。
步骤320,将至少两个客户端的信息存储到同一个数组中。
在客户端发出每个请求时,服务器端都会创建一个response对象,用来对客户端进行响应,在服务器与客户端之间建立连接时,会将客户端的信息存储到同一个数组中,存储的顺序可以按照建立SSE连接的时间顺序进行存储,当有新的客户端与服务器建立连接时,服务器会将新连接的客户端加入到该数组中进行存储。
其中,客户端的信息可以是客户端的标识,该标识可以是该客户端自带的标识,也可以是服务器根据与其建立SSE连接的顺序,给客户端所进行的编码。
步骤330,实时监测是否存在待推送信息。
服务器实时监测是否有推送需求,即是否存在尚未发送到客户端的信息,或者客户端是否未进行刷新操作,比如,对于一个网页界面而言,该网页界面中显示的内容进行实时调整,当服务器端监测到需要对该网页界面的内容进行刷新以显示新的网页内容时,该服务器可以直接将待推送的信息直接发送到客户端,由客户端完成对待推送信息的显示和渲染,或者,在一种可能的情况下,服务器也可以向客户端发送一个指示用户进行刷新操作的指示,该指示中可以包含有关存在待推送消息的提示,以使得用户通过指定操作完成对网页界面的刷新。
步骤340,响应于存在待推送信息,遍历数组中存储的至少两个客户端的信息,将待推送信息发送给至少两个客户端。
当服务器有推送需求时,服务器可以通过遍历数组中所存储的所有客户端的信息,向该数组中存储客户端的信息所对应的客户端推送消息,其中,对数组的遍历可以实现为按照预定顺序对数组中的客户端进行遍历,比如,按照与服务器建立SSE连接的时间的早晚进行遍历等等。
在一种可能的实现方式中,与至少两个客户端建立SSE连接,包括:
接收至少两个客户端发送的SSE连接建立请求,其中,SSE连接建立请求中携带有客户端的标识;
将至少两个客户端的信息存储到一个数组中,包括:
将至少两个客户端的标识存储到一个数组中;
响应于存在待推送的消息,遍历数组中存储的至少两个客户端的信息,将待推送信息发送给至少两个客户端,包括:
响应于存在待推送的消息,遍历数组中存储的至少两个客户端的标识;
根据至少两个客户端的标识,将待推送信息发送给至少两个客户端。
在一种可能的实现方式中,该方法还包括:
响应于客户端断开SSE连接,将断开连接的客户端的信息从数组中删除。
在一种可能的实现方式中,该方法还包括:
以预设频率向至少两个客户端发送数据包,数据包用以确保与客户端连接的有效性。
综上所述,本申请实施例所示的实时推送信息的方法,服务器与至少两个客户端通过同一个路由接口建立SSE连接,将至少两个客户端的信息存储到同一个数组中,实时监测是否存在待推送信息,响应于存在待推送信息,服务器端遍历数组中存储的至少两个客户端的信息,将待推送信息发送给至少两个客户端,使得在只需要服务器端向浏览器推送消息的场景中,将SSE规则与Node.js进行结合,在保障消息实时性的同时减少对相关资源的占用和消耗。
请参考图4,其示出了本申请一示例性实施例提供的实时推送信息的方法的流程图。该实时推送信息的方法可以应用于如图1所示的系统中,由客户端执行,该实时推送信息的方法可以包括以下步骤:
步骤410,向服务器发送SSE连接建立请求,与服务器建立SSE连接,该SSE连接建立请求中携带有客户端的标识,以使得服务器与客户端建立SSE连接,并将客户端的标识存储到一个数组中。
当客户端接收到用户的指定操作时,会触发向服务器发送SSE连接建立请求,该指定操作可以表现为,用户打开终端界面中的某个浏览器,或者打开某个应用程序。不同的客户端可以对应有不同的服务器,对于一个终端而言,该终端中可以安装有多个不同的客户端,比如游戏客户端、即使通讯客户端等等,这些客户端可以对应有不同的服务器;但是对于多个终端而言,不同的终端中可以安装有相同的客户端。
比如,多个终端上均安装有即时通讯客户端A,不同终端中安装的即时通讯客户端A对应于同一个服务器,因此对于一个服务器而言,可以与多个终端中的客户端进行连接,且不同终端的客户端都有与之对应的标识,以进行相应的区分。在向服务器发送SSE建立请求时,通过在该请求中携带客户端标识,以使得服务器能够根据该客户端标识将待推送信息发送给相应终端中的相应客户端。
或者,在一种可能的情况下,在同一个终端中可以安装有对应于不同服务器的相同客户端,比如对于游戏客户端而言可以有不同的服务器,比如同一款游戏可以对应有安卓和iPhone等不同的服务器,因此对于同一终端中对应于不同服务器的客户端可以对应有不同的客户端标识,以进行区分。
步骤420,接收服务器返回的待推送信息,该待推送信息是服务器响应于存在待推送信息,遍历数组中存储的所有客户端的标识,根据该客户端的标识向该客户端发送的待推送信息。
综上所述,本申请实施例所示的实时推送信息的方法,服务器与至少两个客户端通过同一个路由接口建立SSE连接,将至少两个客户端的信息存储到同一个数组中,实时监测是否存在待推送信息,响应于存在待推送信息,服务器端遍历数组中存储的至少两个客户端的信息,将待推送信息发送给至少两个客户端。使得在只需要服务器端向浏览器推送消息的场景中,将SSE规则与Node.js进行结合,在保障消息实时性的同时减少对相关资源的占用和消耗。
请参考图5,其示出了本申请一示例性实施例提供的实时推送信息的方法的流程图。该实时推送信息的方法可以应用于如图1所示的系统中,由服务器与客户端交互执行,该实时推送信息的方法可以包括以下步骤:
步骤510,客户端向服务器发送SSE连接建立请求,相应的服务器接收客户端发送的SSE连接建立请求,其中,该SSE连接建立请求中携带有客户端的标识。
客户端在建立与服务器端的SSE连接的过程中,首先要向服务器端发送SSE建立请求,当服务器端对该请求做出相应的响应后,即表示客户端与服务器端之间SSE连接建立成功,其中,在客户端发送的SSE建立请求中可以包含有发送该请求的客户端的标识,以使得服务器端能够对的客户端进行区分,从而能够准确地进行信息推送。
步骤520,服务器根据SSE连接建立请求与客户端建立SSE连接。
当存在多个客户端与服务器建立SSE连接时,多个客户端可以通过同一个指定路由接口与该服务器建立连接。
步骤530,服务器将客户端的标识存储到同一个数组中。
该数组用于存储通过指定路由接口与服务器端建立SSE连接的客户端的标识,该数组存储于服务器的内存中。当有客户端与服务器建立SSE连接时,服务器就将该客户端的对应客户端标识添加到该数组中。
可选的,该方法还包括,响应于客户端断开SSE连接,将断开连接的客户端的信息从数组中删除。
比如,在服务器中存在对应于指定路由URLA接口的数组,在没有客户端与服务器通过该路由接口建立SSE连接时,该数组为空,当有客户端与服务器建立SSE连接时,将该客户端对应的客户端标识存储到该数组中,比如客户端A对应的客户端标识为1,则将1存储到该数组中,当客户端A与服务器断开SSE连接时,则将与之对应的客户端标识1从该数组中删除,其中,客户端所对应的客户端标识可以是客户端发送的SSE连接请求中携带的与之对应的客户端标识。
在一种可能的情况下,服务器会根据客户端与服务器建立SSE连接的顺序进行客户端标识的设置和数组存储,以便于服务器进行消息推送,比如,对于客户端A发送的SSE连接请求中携带的客户端标识为1,但是该客户端A与服务器建立连接的顺序排位为6,那么服务器可以将6作为客户端A的客户端标识进行数组存储。
该存储过程可以通过以下步骤来实现:
建立存储客户端标识的数组;
使用http模块的createSever方法创建服务;
监听一个路由来作为SSE服务;
当接口被访问时,在响应头(Head)中设置Content-Type为text/event-stream实现SSE响应,即建立SSE连接;
若在已连接前提下,访问该服务器的端断开连接,在断开连接后,服务器以response的write方法写重连事件,可以以预设时间间隔向该客户端发送重连信息;
若在已连接的前提下,服务器存在推送需求,即可遍历上述数组,并通过response的write方法写对应于该推送需求的事件;
若在已连接的前提下,服务端收到客户端发送的注册关闭信息,则将次客户端对应的标识从数组中删除,以释放内存。
步骤540,服务器实时监测是否存在待推送信息。
步骤550,服务器响应于存在待推送的消息,遍历数组中存储的所有客户端的标识。
步骤560,服务器根据客户端的标识,将待推送信息发送给客户端。
当服务器检测到存在待推送信息是,会向数组中存储的所有客户端的标识所对应的客户端发送待推送信息,对于一个客户端而言,当服务器在遍历数组中存储的客户端的标识时,遍历到该客户端对应的客户端标识,则将该待推送信息发送到该客户端。
可选的,该方法还包括:
以预设频率向至少两个客户端发送数据包,该数据包用以确保与至少两个客户端连接的有效性。
一般为了维持服务器与客户端之间的长连接,在预定时间内如果两者之间没有信息之间的交互,服务器则会向与之建立SSE连接的客户端发送数据包,该过程可以称为心跳推送,以验证服务器与客户端之间连接的有效性。若客户端接收到该数据包并作出响应,则确定服务器与客户端之间的连接有效,若服务器并未接收到客户端的响应,则确定服务器与客户端之间的连接失效,从而停止向该客户端发送待推送信息,并将该客户端对应的客户端标从数组中删除。
以预定时间为59秒为例,当服务器长时间未与客户端进行信息进行交互时,则触发心跳推送,也就是服务器每个59秒向客户端发送一个“心跳”数据包,已验证服务器与客户端之间连接的准确性。
综上所述,本申请实施例所示的实时推送信息的方法,服务器与至少两个客户端通过同一个路由接口建立SSE连接,将至少两个客户端的信息存储到同一个数组中,实时监测是否存在待推送信息,响应于存在待推送信息,服务器端遍历数组中存储的至少两个客户端的信息,将待推送信息发送给至少两个客户端。使得在只需要服务器端向浏览器推送消息的场景中,将SSE规则与Node.js进行结合,减少对服务器资源的占用。
请参考图6,其示出了本申请一个示例性实施例提供的实时推送信息的装置的方框图。该装置可以通过软件的形式实现为服务器的全部或者部分,以执行图3、图4或图5对应实施例所示的方法的全部或部分步骤。如图6所示,该实时推送信息的装置可以包括:
连接建立模块610,用于与至少两个客户端建立服务器端推送事件SSE连接,SSE连接是基于同一个路由接口所建立的连接;
存储模块620,用于将至少两个客户端的信息存储到同一个数组中;
监测模块630,用于实时监测是否存在待推送信息;
第一发送模块640,用于响应于存在待推送信息,遍历数组中存储的至少两个客户端的信息,将待推送信息发送给至少两个客户端。
在一种可能的情况下,该连接建立模块610包括:
接受子模块,用于接收至少两个客户端发送的SSE连接建立请求,其中,SSE连接建立请求中携带有客户端的标识;
连接建立子模块,用于根据SSE连接建立请求分别与至少两个客户端建立SSE连接;
该存储模块620,用于将至少两个客户端的标识存储到同一个数组中;
该第一发送模块640,用于响应于存在待推送的消息,遍历数组中存储的至少两个客户端的标识;
根据至少两个客户端的标识,将待推送信息发送给至少两个客户端。
在一种可能的情况下,该装置还包括:
删除模块,用于响应于客户端断开SSE连接,将断开连接的客户端的信息从数组中删除。
在一种可能的情况下,该装置还包括:
第二发送模块,用于以预设频率向至少两个客户端发送数据包,数据包用以确保与至少两个客户端连接的有效性。
综上所述,本申请实施例中提供的实时推送信息的装置,应用于服务器中,通过与客户端建立SSE连接,将客户端的信息存储到一个数组中,在监测到存在待推送信息时,遍历数组中存储的客户端信息,将待推送信息发送给客户端,使得在只需要服务器端向浏览器推送消息的场景中,将SSE规则与Node.js进行结合,减少对服务器资源的占用。
请参考图7,其示出了本申请一个示例性实施例提供的实时推送信息的装置的方框图。该装置可以通过软件的形式实现为客户端的全部或者部分,以执行图3、图4或图5对应实施例所示的方法的全部或部分步骤。如图7所示,该实时推送信息的装置可以包括:
发送模块710,用于向服务器发送SSE连接建立请求,与服务器建立SSE连接,SSE连接建立请求中携带有客户端的标识,以使得服务器与客户端建立SSE连接,并将客户端的标识存储到一个数组中;
接收模块720,用于接收服务器返回的待推送信息待推送信息是服务器响应于存在待推送信息,遍历数组中存储的所有客户端的标识,根据客户端的标识向客户端发送的待推送信息。
综上所述,本申请实施例中提供的实时推送信息的装置,应用于客户端中,通过与服务器建立SSE连接,以使得服务器将客户端的信息存储到一个数组中,在监测到存在待推送信息时,遍历数组中存储的客户端信息,将待推送信息发送给客户端,使得在只需要服务器端向浏览器推送消息的场景中,将SSE规则与Node.js进行结合,减少对服务器资源的占用。
图8是根据一示例性实施例示出的计算机设备800的结构框图。该计算机设备800可以是图1所示的终端,该终端中可以安装有若干客户端,比如智能手机、平板电脑或台式电脑。计算机设备800还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,计算机设备800包括有:处理器801和存储器802。
处理器801可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器801可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器801也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器801可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器801还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器802可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器802还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器802中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器801所执行以实现本申请中方法实施例提供的方法。
在一些实施例中,计算机设备800还可选包括有:外围设备接口803和至少一个外围设备。处理器801、存储器802和外围设备接口803之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口803相连。具体地,外围设备包括:射频电路804、触摸显示屏805、摄像头808、音频电路807、定位组件808和电源809中的至少一种。
外围设备接口803可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器801和存储器802。在一些实施例中,处理器801、存储器802和外围设备接口803被集成在同一芯片或电路板上;在一些其他实施例中,处理器801、存储器802和外围设备接口803中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路804用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路804通过电磁信号与通信网络以及其他通信设备进行通信。射频电路804将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路804包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路804可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路804还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏805用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏805是触摸显示屏时,显示屏805还具有采集在显示屏805的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器801进行处理。此时,显示屏805还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏805可以为一个,设置计算机设备800的前面板;在另一些实施例中,显示屏805可以为至少两个,分别设置在计算机设备800的不同表面或呈折叠设计;在再一些实施例中,显示屏805可以是柔性显示屏,设置在计算机设备800的弯曲表面上或折叠面上。甚至,显示屏805还可以设置成非矩形的不规则图形,也即异形屏。显示屏805可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-EmittingDiode,有机发光二极管)等材质制备。
摄像头组件806用于采集图像或视频。可选地,摄像头组件806包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件806还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路807可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器801进行处理,或者输入至射频电路804以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备800的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器801或射频电路804的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路807还可以包括耳机插孔。
定位组件808用于定位计算机设备800的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。定位组件808可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。
电源809用于为计算机设备800中的各个组件进行供电。电源809可以是交流电、直流电、一次性电池或可充电电池。当电源809包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算机设备800还包括有一个或多个传感器810。该一个或多个传感器810包括但不限于:加速度传感器811、陀螺仪传感器812、压力传感器813、指纹传感器814、光学传感器815以及接近传感器816。
加速度传感器811可以检测以计算机设备800建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器811可以用于检测重力加速度在三个坐标轴上的分量。处理器801可以根据加速度传感器811采集的重力加速度信号,控制触摸显示屏805以横向视图或纵向视图进行用户界面的显示。加速度传感器811还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器812可以检测计算机设备800的机体方向及转动角度,陀螺仪传感器812可以与加速度传感器811协同采集用户对计算机设备800的3D动作。处理器801根据陀螺仪传感器812采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器813可以设置在计算机设备800的侧边框和/或触摸显示屏805的下层。当压力传感器813设置在计算机设备800的侧边框时,可以检测用户对计算机设备800的握持信号,由处理器801根据压力传感器813采集的握持信号进行左右手识别或快捷操作。当压力传感器813设置在触摸显示屏805的下层时,由处理器801根据用户对触摸显示屏805的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器814用于采集用户的指纹,由处理器801根据指纹传感器814采集到的指纹识别用户的身份,或者,由指纹传感器814根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器801授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器814可以被设置计算机设备800的正面、背面或侧面。当计算机设备800上设置有物理按键或厂商Logo时,指纹传感器814可以与物理按键或厂商Logo集成在一起。
光学传感器815用于采集环境光强度。在一个实施例中,处理器801可以根据光学传感器815采集的环境光强度,控制触摸显示屏805的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏805的显示亮度;当环境光强度较低时,调低触摸显示屏805的显示亮度。在另一个实施例中,处理器801还可以根据光学传感器815采集的环境光强度,动态调整摄像头组件806的拍摄参数。
接近传感器816,也称距离传感器,通常设置在计算机设备800的前面板。接近传感器816用于采集用户与计算机设备800的正面之间的距离。在一个实施例中,当接近传感器816检测到用户与计算机设备800的正面之间的距离逐渐变小时,由处理器801控制触摸显示屏805从亮屏状态切换为息屏状态;当接近传感器816检测到用户与计算机设备800的正面之间的距离逐渐变大时,由处理器801控制触摸显示屏805从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图8中示出的结构并不构成对计算机设备800的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
图9是根据一示例性实施例示出的计算机设备900的结构框图。该计算机设备可以实现为本申请上述方案中的服务器。所述计算机设备900包括中央处理单元(CentralProcessing Unit,CPU)901、包括随机存取存储器(Random Access Memory,RAM)902和只读存储器(Read-Only Memory,ROM)903的系统存储器904,以及连接系统存储器904和中央处理单元901的系统总线905。所述计算机设备900还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(Input/Output系统,I/O系统)906,和用于存储操作系统913、应用程序914和其他程序模块915的大容量存储设备907。
所述基本输入/输出系统906包括有用于显示信息的显示器908和用于用户输入信息的诸如鼠标、键盘之类的输入设备909。其中所述显示器908和输入设备909都通过连接到系统总线905的输入输出控制器910连接到中央处理单元901。所述基本输入/输出系统906还可以包括输入输出控制器910以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器910还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备907通过连接到系统总线905的大容量存储控制器(未示出)连接到中央处理单元901。所述大容量存储设备907及其相关联的计算机可读介质为计算机设备900提供非易失性存储。也就是说,所述大容量存储设备907可以包括诸如硬盘或者只读光盘(Compact Disc Read-Only Memory,CD-ROM)驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读寄存器(Erasable Programmable Read Only Memory,EPROM)、电子抹除式可复写只读存储器(Electrically-Erasable Programmable Read-OnlyMemory,EEPROM)、闪存或其他固态存储其技术,CD-ROM、数字多功能光盘(Digitalversatile disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器904和大容量存储设备907可以统称为存储器。
根据本申请的各种实施例,所述计算机设备900还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算机设备900可以通过连接在所述系统总线905上的网络接口单元911连接到网络912,或者说,也可以使用网络接口单元911来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器901通过执行该一个或一个以上程序来实现图2或图3所示的方法的全部或者部分步骤。
本领域技术人员可以理解,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
本申请实施例还提供了一种计算机可读存储介质,用于存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述语音端点检测方法。例如,该计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。