消息推送方法、装置和存储介质
文献发布时间:2023-06-19 12:18:04
技术领域
本申请涉及互联网技术领域,尤其涉及一种消息推送方法、装置和存储介质。
背景技术
B/S架构,即浏览器和服务器架构,通过浏览器定时向服务器提出请求,即,定时刷新浏览器网页,服务器根据用户的请求提供相应的数据服务,即将消息发送给浏览器。浏览器将接收到的服务器发送的消息进行展示,从而实现消息的定时推送,但仅依靠B/S架构服务器无法将消息实时推送至浏览器。
目前,在B/S架构下实现消息的实时推送时,可以通过在终端设备的浏览器端安装flash插件,或者在终端设备上安装java虚拟机的方法,浏览器与服务器直接建立socket长连接,使得服务器通过建立的长连接将消息实时推送给浏览器。其中,若该方法应用的架构为JavaEE平台,则需要采用applet与服务器建立socket长连接。
但是,在B/S架构下,服务器是通过HTTP(Hypertext Transfer Protocol,超文本传输协议)端口向浏览器推送消息的。而安装flash插件或者安装java虚拟机,通过建立的socket长连接进行消息推送时,是通过非HTTP端口,这样会使得通过非HTTP端口推送的消息会受到防火墙的拦截,从而导致服务器实时推送消息失败。
发明内容
本申请实施例提供了一种消息推送方法、装置和存储介质,服务器能够根据接收的Ajax请求对应的线程,通过HTTP端口将消息实时推送至终端设备。
第一方面,本申请实施例提供了一种消息推送方法,所述消息推送方法包括:
接收第一终端设备发送的至少一个Ajax请求,并根据所述至少一个Ajax请求,阻塞各所述Ajax请求对应的线程,各所述Ajax请求中均包括第一用户标识。
若确定获取到的实时消息中存在与目标用户标识对应的目标实时消息,则将所述目标用户标识对应的线程唤醒,所述目标用户标识为至少一个第一用户标识中的任意一个。
通过唤醒后的线程,向所述第一终端设备推送所述目标实时消息。
在一种可能的实现方式中,所述确定获取到的实时消息中存在与目标用户标识对应的目标实时消息,包括:
从第一消息列表中获取所述实时消息以及与所述实时消息对应的第二用户标识。
将所述第二用户标识与各第一用户标识进行匹配。
若所述第二用户标识与所述目标用户标识匹配成功,则将匹配成功的第二用户标识对应的实时消息确定为所述目标实时消息。
在一种可能的实现方式中,所述方法还包括:
接收第二终端设备发送的实时消息,所述实时消息中包括第二用户标识。
将所述实时消息和所述第二用户标识添加到所述第一消息列表中。
在一种可能的实现方式中,所述方法还包括:
接收第二服务器发送的第二消息列表,所述第二消息列表中包括多个用户标识以及各所述用户标识对应的实时消息。
根据所述第二消息列表,对所述第一消息列表进行更新。
在一种可能的实现方式中,所述若确定获取到的实时消息中存在与目标用户标识对应的目标实时消息,则将所述目标用户标识对应的线程唤醒,包括:
对所述实时消息进行解析,得到所述实时消息中的目标用户标识。
在线程表中查找是否存在所述目标用户标识,所述线程表中存储有用户标识和线程的对应关系。
若存在所述目标用户标识,则根据所述线程表,确定与所述目标用户标识对应的线程,并将所述目标用户标识对应的线程唤醒。
在一种可能的实现方式中,所述方法还包括:
若所述线程表中不存在所述目标用户标识,则将所述实时消息丢弃。
在一种可能的实现方式中,所述Ajax请求为至少两个;所述方法还包括:
根据至少两个所述Ajax请求,为每个Ajax请求分配对应的线程。
根据所述每个Ajax请求中包括的第一用户标识,建立用户标识与线程之间的对应关系。
在一种可能的实现方式中,所述方法还包括:
若确定出不存在与所述目标用户标识对应的目标实时消息,则在到达预设时间段后,向所述第一终端设备发送超时消息,所述超时消息用于指示所述第一终端设备再次向所述第一终端设备发送Ajax请求。
第二方面,本申请实施例提供了一种消息推送装置,所述消息推送装置包括:
接收单元,用于接收第一终端设备发送的至少一个Ajax请求,并根据所述至少一个Ajax请求,阻塞各所述Ajax请求对应的线程,各所述Ajax请求中均包括第一用户标识;
处理单元,在确定获取到的实时消息中存在与目标用户标识对应的目标实时消息时,将所述目标用户标识对应的线程唤醒,所述目标用户标识为至少一个第一用户标识中的任意一个;
推送单元,用于通过唤醒后的线程,向所述第一终端设备推送所述目标实时消息。
在一种可能的实现方式中,所述处理单元,具体用于从第一消息列表中获取所述实时消息以及与所述实时消息对应的第二用户标识;将所述第二用户标识与各第一用户标识进行匹配。并在所述第二用户标识与所述目标用户标识匹配成功时,将匹配成功的第二用户标识对应的实时消息确定为所述目标实时消息。
在一种可能的实现方式中,所述接收单元,还用于接收第二终端设备发送的实时消息,所述实时消息中包括第二用户标识;并将所述实时消息和所述第二用户标识添加到所述第一消息列表中。
在一种可能的实现方式中,所述接收单元,还用于接收第二服务器发送的第二消息列表,所述第二消息列表中包括多个用户标识以及各所述用户标识对应的实时消息;根据所述第二消息列表,对所述第一消息列表进行更新。
所述处理单元,具体用于对所述实时消息进行解析,得到所述实时消息中的目标用户标识;在线程表中查找是否存在所述目标用户标识,所述线程表中存储有用户标识和线程的对应关系。并在存在所述目标用户标识,则根据所述线程表时,确定与所述目标用户标识对应的线程,并将所述目标用户标识对应的线程唤醒。
在一种可能的实现方式中,所述处理单元,还用于在所述线程表中不存在所述目标用户标识时,将所述实时消息丢弃。
在一种可能的实现方式中,所述装置还包括创建单元,用于根据至少两个所述Ajax请求,为每个Ajax请求分配对应的线程;并根据所述每个Ajax请求中包括的第一用户标识,建立用户标识与线程之间的对应关系。
在一种可能的实现方式中,所述处理单元,还用于在确定出不存在与所述目标用户标识对应的目标实时消息时,在到达预设时间段后,向所述第一终端设备发送超时消息,所述超时消息用于指示所述第一终端设备再次向所述第一终端设备发送Ajax请求。
第三方面,本申请实施例还提供了一种消息推送装置,该消息推送装置可以包括存储器和处理器;其中,
所述存储器,用于存储计算机程序。
所述处理器,用于读取所述存储器存储的计算机程序,并根据所述存储器中的计算机程序执行上述第一方面任一种可能的实现方式中所述的消息推送方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述第一方面任一种可能的实现方式中所述的消息推送方法。
第五方面,本申请实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述第一方面任一种可能的实现方式中所述的消息推送方法。
由此可见,本申请实施例提供了一种消息推送方法、装置和存储介质,在进行消息推送时,接收第一终端设备发送的至少一个Ajax请求,并根据至少一个Ajax请求,阻塞各Ajax请求对应的线程,各Ajax请求中均包括第一用户标识。在确定获取到的实时消息中存在与目标用户标识对应的目标实时消息时,将目标用户标识对应的线程唤醒;并通过唤醒后的线程,向第一终端设备推送目标实时消息。在本申请中,服务器不间断的接收Ajax请求,使得在存在目标实时消息时,能够根据Ajax请求对应的线程向第一终端设备发送目标实时消息。此外,通过Ajax请求对应的线程发送消息使用的是HTTP端口,不会遭到防火墙的拦截。因此,服务器能够成功将实时消息推送至第一终端设备。
附图说明
图1为本申请实施例提供的一种消息推送方法的应用场景示意图;
图2为本申请实施例提供的一种消息推送方法的流程示意图;
图3为本申请实施例提供的一种第一服务器向第一终端设备推送实时消息的流程示意图;
图4为本申请实施例提供的一种应用于两个服务器的消息推送方法的流程示意图;
图5为本申请实施例提供的一种消息推送装置的结构示意图;
图6为本申请实施例提供的另一种消息推送装置的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本申请的实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。在本申请的文字描述中,字符“/”一般表示前后关联对象是一种“或”的关系。
本申请实施例提供的技术方案可以应用于互联网消息获取的场景中。例如,用户通过身份信息在终端设备上登录,以接收服务器发送给用户登录的终端设备,使得用户能够获取相应的消息。为了使得用户能够得到消息,需要服务器实时向用户登录的终端设备进行消息推送,以保证消息的时效性。
图1为本申请实施例提供的一种消息推送方法的应用场景示意图。根据图1所示,终端设备1的浏览器内安装有flash插件,使得终端设备能够与服务器之间建立socket长连接。终端设备2上安装有java虚拟机,使得终端设备2能够与服务器建立socket长连接。在终端设备1和终端设备2均建立与服务器之间的socket长连接之后,服务器能够通过建立的socket长连接实时向终端设备1和终端设备2推送消息。
示例的,终端设备1和终端设备2均为B/S架构下与服务器建立的socket长连接。而对于终端设备2而言,若终端设备应用的架构为JavaEE平台,则需要采用applet与服务器建立socket长连接。
但是,根据图1所示的方法,实现服务器实时向终端设备推送消息时,由于服务器是通过HTTP(Hypertext Transfer Protocol,超文本传输协议)端口向浏览器推送消息的。而终端设备1和终端设备2通过建立socket长连接的方式推送消息时,使用的是非HTTP端口。因此,通过socket长连接推送消息时,可能会受到防火墙的拦截,从而导致服务器实时消息推送失败。此外,socket长连接的开发和维护难度均比较大,且均无法适用于移动终端设备。
示例的,除了图1所示的方法之外,还可以利用websocket进行消息推送,但是由于大部分的终端设备的浏览器无法支持websocket,因此,此方法无法得到普遍应用。
由于安装flash插件或者安装java虚拟机的方式,通过socket长连接推送消息会受到防火墙的拦截,导致服务器无法实时推送消息。考虑到HTTP端口可允许JavaScript语言通过,因此,可以通过Ajax技术,向服务器发送Ajax请求,使得服务器能够实时将消息推送至终端设备。由于Ajax技术为JavaScript语言的一种应用方式,通过HTTP端口传输信息,不会受到防火墙的拦截,能够避免服务器实时推送消息失败的情况。
下面,将通过具体的实施例对本申请提供的消息推送方法进行详细地说明。可以理解的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请实施例提供的一种消息推送方法的流程示意图。该消息推送方法可以由软件和/或硬件装置执行,例如,该硬件装置可以为消息推送装置,该消息推送装置可以为服务器或者服务器中的处理芯片。示例的,请参见图2所示,该消息推送方法可以包括:
S201、接收第一终端设备发送的至少一个Ajax请求,并根据至少一个Ajax请求,阻塞各Ajax请求对应的线程,各Ajax请求中均包括第一用户标识。
示例的,第一终端设备可以手机、平板电脑、笔记本电脑等移动终端设备,或者台式计算机等固定终端设备。本申请实施例对于具体的终端设备不做任何限定。此外,第一终端设备为一个,也可以为多个,本申请实施例对于第一终端设备的数量不做任何限定。
示例的,服务器接收的第一终端设备发送的至少一个Ajax请求是在用户登录的情况下发送的。可以理解的是,用户在第一终端设备上登录之后,第一终端设备则向服务器发送Ajax请求,Ajax请求中均包括第一用户标识。第一用户标识可以为用户的网络身份标识,例如用户在互联网上网络昵称,或者用户的其他网络身份信息,本申请实施例对此不做任何限定。例如,用户使用其申请的网络账号在指定的浏览器上登录,该浏览器向服务器发送Ajax请求,该请求中包括用户的网络身份标识。或者,用户通过邮箱信息,在浏览器上登录邮箱,则用户登录邮箱后,用户所使用的终端设备即刻向服务器发送Ajax请求。
在服务器接收到的Ajax请求为至少两个时,可以根据至少两个Ajax请求,为每个Ajax请求分配对应的线程;根据每个Ajax请求中包括的第一用户标识,建立用户标识与线程之间的对应关系。示例的,可以根据用户标识与线程之间的对应关系建立线程表,以便于存储和管理。例如,可以建立如表1所示的用于表示用户标识与线程之间的对应关系的线程表。
表1
示例的,服务器在接收到Ajax请求时,需也会获取实时消息。服务器在获取实时消息之后,需要确定获取的实时消息中是否存在与目标用户标识对应的目标实时消息,并根据判断结果执行下述S202:
S202、若确定获取到的实时消息中存在与目标用户标识对应的目标实时消息,则将目标用户标识对应的线程唤醒。
其中,目标用户标识为至少一个第一用户标识中的任意一个。
示例的,实时消息为服务器暂存的需要发送的消息,可以是用户之间的交互消息,例如,用户A发送给用户B的消息,也可以是用户登录的浏览器的系统消息,例如,某邮箱的官方向用户的邮箱发送的消息。本申请实施例对于具体的实时消息不做任何限定。
在确定获取到的实时消息中存在与目标用户标识对应的目标实时消息时,可以从第一消息列表中获取实时消息以及与实时消息对应的第二用户标识;将第二用户标识与各第一用户标识进行匹配。若第二用户标识与目标用户标识匹配成功,则将匹配成功的第二用户标识对应的实时消息确定为目标实时消息。即,可以确定目标用户对应的目标消息。其中,目标用户标识为第一用户标识中的一个。第二用户标识可以为用户的网络身份标识,或者用户的其他网络身份信息,本申请实施例对此不做任何限定。例如,各第一用户标识分别为用户1、用户2、用户3和用户4,第二用户标识为用户3,则可以确定目标用户为用户3,且可以确定第二用户标识与目标用户标识匹配成功。
示例的,在获取实时消息时,可以通过缓存监听器在消息列表中获取实时消息。例如,当消息列表中出现新的实时消息时,会触发缓存监听器获取该新的实时消息。在缓存监听器获取实时消息时,同时获取实时消息对应的第二用户标识。在将第二用户标识与各第一用户标识进行匹配时,可以是根据第二用户标识在上述对应关系中确定各个第一用户标识,并进行匹配。或者,直接根据第二用户标识在对应关系中确定与其匹配的第一用户标识。本申请实施例对于具体的方式不做任何限定。
示例的,第一消息列表为缓存实时消息的列表,其中可以包括实时消息和第二用户标识,例如表2所示。本申请实施例对于消息列表不做任何限定。
表4
根据表2可知,此时服务器的第一消息列表中缓存有用户1的消息1,和用户2的消息2。
在本申请实施例中,通过第二用户标识与目标用户标识进行匹配的方式,确定匹配成功的第二用户标识对应的目标实时消息,使得在存在多个第一用户标识时,能够准确的确定是否存在发送至第一用户标识的目标实时消息。
在确定获取到的实时消息中存在与目标用户标识对应的目标实时消息之后,可以对实时消息进行解析,得到实时消息中的目标用户标识;在线程表中查找是否存在目标用户标识,线程表中存储有用户标识和线程的对应关系;若存在目标用户标识,则根据线程表,确定与目标用户标识对应的线程,并将目标用户标识对应的线程唤醒。
示例的,通过缓存监听器对实时消息进行解析,确定实时消息中的目标用户标识,并控制在上述表1所示的线程表中查找目标用户标识对应的线程。例如,通过缓存监听器对实时消息进行解析,确定目标用户为用户3,通过查找线程表,可知用户3对应的线程为线程3,则将线程3唤醒。
在本申请实施例中,通过对实时消息进行解析,并查找目标用户标识以将目标用户标识对应的线程唤醒,使得能够通过对应的线程推送实时消息。能够避免在推送实时消息时,将实时消息推送给非目标用户,提高了推送实时消息的准确性。
示例的,在线程表中查找是否存在目标用户标识时,若线程表中不存在目标用户标识,则将实时消息丢弃。能够避免实时消息在服务器的消息列表中长时间存储而占用服务器的存储空间,导致服务器压力过大的情况,从而提高了实时推送消息的效率。
示例的,在确定是否存在与目标用户对应的目标实时消息时,若确定出不存在与目标用户标识对应的目标实时消息,则在到达预设时间段后,向第一终端设备发送超时消息,超时消息用于指示第一终端设备再次向服务器发送Ajax请求。预设时间可根据具体情况进行设定,本申请实施例对此不做任何限定。
在本申请实施例中,在不存在与目标用户标识对应的目标实时消息时,通过向第一终端设备发送超时消息的方式,指示第一终端设备再次向服务器发送Ajax请求,使得服务器与第一终端设备之前一直保持连接状态,不需要在每次发送Ajax请求均重新建立连接,使得服务器能够实时将消息推送至第一终端设备。
S203、通过唤醒后的线程,向第一终端设备推送目标实时消息。
示例的,在唤醒线程后,通过该线程向第一终端设备推送实时消息。例如,在唤醒用户3对应的线程后,将用户3对应的实时消息发送给其所在的第一终端设备,使得用户能够实时接收消息,保证了消息的时效性。
由此可见,本申请实施例提供的消息推送方法,在进行消息推送时,接收第一终端设备发送的至少一个Ajax请求,并根据至少一个Ajax请求,阻塞各Ajax请求对应的线程,各Ajax请求中均包括第一用户标识。在确定获取到的实时消息中存在与目标用户标识对应的目标实时消息时,将目标用户标识对应的线程唤醒。并通过唤醒后的线程,向第一终端设备推送目标实时消息。由于通过Ajax请求对应的线程推送目标实时消息是通过HTTP端口进行的,不会受到防火墙的拦截,使得服务器能够成功的将实时消息推送至第一终端设备。
示例的,上述实施例所述的方法可以应用于一个服务器向多个终端设备推送实时消息的情况。具体的可参见图3所示,图3为本申请实施例提供的一种第一服务器向第一终端设备推送实时消息的流程示意图。
根据图3所示,用户在终端设备的浏览器上登录,并向服务器发送Ajax请求,服务器在接收到Ajax请求后,线程处于阻塞状态,在达到预设时间段后,服务器向浏览器对应的终端设备的浏览器返回响应消息,用于表示无该用户的实时消息。
由图3可知,在终端设备的浏览器接收到响应消息之后,继续向服务器发送Ajax请求,此时,根据上述实施例所述的方法,若确定存在该用户对应的实时消息,则唤醒相应的线程,并通过线程将实时消息推送至终端设备,从而告知用户该实时消息。
示例的,图3中的loop是指终端设备和服务器重复执行loop内的过程。在图3所示的实施例中,确定存在终端设备登录的用户的方法可参见上述实施例所述,本申请实施例对此不做任何限定。可以理解的是,图3并未标示出上述实施例所述的所有步骤。
在本申请实施例中,通过终端设备向服务器发送Ajax请求,并在存在实时消息时,将实时消息通过对应的线程推送至终端设备,从而提高了服务器推送实时消息的效率。
示例的,若在同一时间出现大量的终端设备向服务器发送Ajax请求,以接收实时消息时,则需要多个服务器。即多个服务器中的每一个服务器分别向对应的至少一个终端设备推送实时消息,从而进一步提高推送消息的效率。
假设用户通过第一终端设备登录第一服务器,通过第二终端设备登录第二服务器。终端设备登录的服务器可以由负载均衡器进行调度,使得各个服务器之间能够均衡的为终端设备进行消息推送,本申请实施例仅以此为例进行说明,但并不代表本申请实施例仅局限于此。此时,第一终端发送的实时消息会在第一服务器的消息列表中暂存,第二终端发送的实时消息会在第二服务器的消息列表中暂存。
示例的,第二服务器在接收第二终端设备发送的实时消息,实时消息中包括第二用户标识;将实时消息和第二用户标识添加到第二消息列表中。通过将实时消息添加至第二消息列表中,便于对实时消息进行管理,从而提高推送消息的效率。
在第二服务器的第二消息列表中的实时消息增加时,第二服务器需要将第二消息列表发送给第一服务器。第一服务器在接收第二服务器发送的第二消息列表,第二消息列表中包括多个用户标识以及各用户标识对应的实时消息;根据第二消息列表,对第一消息列表进行更新,使得两服务器的消息列表始终同步。
例如,用户3通过第二终端设备向用户1发送消息。用户3发送的消息会被添加在第二服务器的第二消息列表中暂存,同时,第二服务器将第二消息列表发送至第一服务器,对第一消息列表进行更新。
示例的,在根据第二消息列表,对第一消息列表进行更新时,可以通过JBossCache进行更新,也可以通过其他方式,具体的本申请实施例不做任何限定。具体的,可以直接将第二消息列表替换第一消息列表,也可以将第一消息与第二消息列表进行对比,将第二消息列表中新增的实时消息添加至第一消息列表中,具体的本申请实施例不做任何限定。
可以理解的是,若存在多个服务器,则在多个服务器中的其中一个服务器的消息列表出现新增实时消息时,则将该消息列表发送至其余的服务器,以对各个服务器的消息列表进行更新。
示例的,在第一服务器的第一消息列表更新后,第一服务器和第二服务器同时实行上述实施例所述的消息推送方法,本申请实施例对于具体的步骤不再赘述。
在本申请实施例中,通过多个服务器能够减轻需要推送大量实时消息时服务器的压力,使得在服务器将消息实时推送至终端设备的同时能够保证服务器推送消息的效率。
为了便于理解本申请实施例提供的应用于多个服务器时的消息推送方法,下面,将以用户之间发送邮件为例,对本申请实施例提供的技术方案进行详细的描述,图4为本申请实施例提供的一种应用于两个服务器的消息推送方法的流程示意图。
根据图4所示,通过负载均衡器的调度,使得用户1、用户2和用户3分别通过终端设备1、终端设备2和终端设备3登录至服务A;用户4和用户5分别通过终端设备4和终端设备5登录至服务器B。假设用户1、用户2、用户3、用户4以及用户5均通过各自对应的终端设备登录各自的邮箱。示例的,在图4中使用用户1、用户2、用户3、用户4以及用户5来表示用户标识,也可以用户的身份信息,例如邮箱账号,登录的地址等,来表示,本申请实施例对此不做任何限定。
示例的,在图4中,假设用户4向用户3发送了一封邮件,此时,执行步骤①,将用户4发送的邮件会以新消息的方式在其对应的服务器B的第二消息列表中。JBossCache在检测到第二消息列表中有新消息时,执行步骤②,将第二消息列同步至第一消息列表,使得同时在第一消息列表和第二消息列表中出现该新消息。根据图4所示,消息列表同步之后,服务器A和服务器B同时执行步骤③,触发缓存监听器获取消息列表中的第二用户标识,与线程表中的第一用户标识进行匹配,并执行步骤④,在线程中查找对应的线程。
其中,服务器A中存在用户3,因此,服务器A中能够匹配成功,并能够在第一线程表中查找到用户3对应的线程3。服务器A在查找到线程3之后,执行步骤⑤,唤醒线程3,并通过线程3将用户3的消息3发送至终端设备3,即,将邮件发送给终端设备3,使得用户3能够实时得到用户4发送的邮件。服务器B中无用户3,则服务器B无法匹配成功,故无法在第二线程表中查找到用户3以及对应的线程,此时,服务器B执行步骤⑤,将该新消息删除。
示例的,在图4所示的消息推送过程中,服务器A和服务器B实时接收对应的终端设备发送的Ajax请求,且在不存在某终端设备对应的实时消息时,向该终端设备发送超时消息。本申请实施例未在图4中表示该过程。
综上所述,在本申请实施例中,在确定存在实时消息时,通过两服务器之间同步消息列表的方式,在两服务器之间同时根据用户标识进行匹配,并查找对应的消息列表,使得能够将实时消息推送至终端设备的同时,在零一服务器的消息列表中删除该实时消息,从而提高了服务器推送消息的效率。
图5为本申请实施例提供的一种消息推送装置50的结构示意图,示例的,请参见图5所示,该消息推送装置50可以包括:
接收单元501,用于接收第一终端设备发送的至少一个Ajax请求,并根据至少一个Ajax请求,阻塞各Ajax请求对应的线程,各Ajax请求中均包括第一用户标识;
处理单元502,在确定获取到的实时消息中存在与目标用户标识对应的目标实时消息时,将目标用户标识对应的线程唤醒,目标用户标识为至少一个第一用户标识中的任意一个;
推送单元503,用于通过唤醒后的线程,向第一终端设备推送目标实时消息。
可选的,处理单元502,具体用于从第一消息列表中获取实时消息以及与实时消息对应的第二用户标识;将第二用户标识与各第一用户标识进行匹配。并在第二用户标识与目标用户标识匹配成功时,将匹配成功的第二用户标识对应的实时消息确定为目标实时消息。
可选的,接收单元501,还用于接收第二终端设备发送的实时消息,实时消息中包括第二用户标识;并将实时消息和第二用户标识添加到第一消息列表中。
可选的,接收单元501,还用于接收第二服务器发送的第二消息列表,第二消息列表中包括多个用户标识以及各用户标识对应的实时消息;根据第二消息列表,对第一消息列表进行更新。
处理单元502,具体用于对实时消息进行解析,得到实时消息中的目标用户标识;在线程表中查找是否存在目标用户标识,线程表中存储有用户标识和线程的对应关系。并在存在目标用户标识,则根据线程表时,确定与目标用户标识对应的线程,并将目标用户标识对应的线程唤醒。
可选的,处理单元502,还用于在线程表中不存在目标用户标识时,将实时消息丢弃。
可选的,装置还包括创建单元504,用于根据至少两个Ajax请求,为每个Ajax请求分配对应的线程;并根据每个Ajax请求中包括的第一用户标识,建立用户标识与线程之间的对应关系。
可选的,处理单元502,还用于在确定出不存在与目标用户标识对应的目标实时消息时,在到达预设时间段后,向第一终端设备发送超时消息,超时消息用于指示第一终端设备再次向第一终端设备发送Ajax请求。
本申请实施例提供的消息推送装置,可以执行上述任一实施例中的消息推送方法的技术方案,其实现原理以及有益效果与消息推送方法的实现原理及有益效果类似,可参见消息推送方法的实现原理及有益效果,此处不再进行赘述。
图6为本申请实施例提供的另一种消息推送装置60的结构示意图,示例的,请参见图6所示,该消息推送装置60可以包括处理器601和存储器602;其中,
所述存储器602,用于存储计算机程序。
所述处理器601,用于读取所述存储器602存储的计算机程序,并根据所述存储器602中的计算机程序执行上述任一实施例中的消息推送方法的技术方案。
可选地,存储器602既可以是独立的,也可以跟处理器601集成在一起。当存储器602是独立于处理器601之外的器件时,消息推送装置60还可以包括:总线,用于连接存储器602和处理器601。
可选地,本实施例还包括:通信接口,该通信接口可以通过总线与处理器601连接。处理器601可以控制通信接口来实现上述消息推送装置60的接收和发送的功能。
本申请实施例所示的消息推送装置60,可以执行上述任一实施例中的消息推送方法的技术方案,其实现原理以及有益效果与消息推送方法的实现原理及有益效果类似,可参见消息推送方法的实现原理及有益效果,此处不再进行赘述。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述任一实施例中的消息推送方法的技术方案,其实现原理以及有益效果与消息推送方法的实现原理及有益效果类似,可参见消息推送方法的实现原理及有益效果,此处不再进行赘述。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述任一实施例中的消息推送方法的技术方案,其实现原理以及有益效果与消息推送方法的实现原理及有益效果类似,可参见消息推送方法的实现原理及有益效果,此处不再进行赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所展示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元展示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例方法的部分步骤。
应理解的是,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital SignalProcessor,简称:DSP)、专用集成电路(英文:Application Specific IntegratedCircuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述计算机可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
- 消息推送方法、消息推送装置和计算机可读存储介质
- 消息推送方法、消息推送系统和计算机可读存储介质