消息推送方法、装置、电子设备及存储介质与流程

文档序号:32662242发布日期:2022-12-23 23:59阅读:78来源:国知局
消息推送方法、装置、电子设备及存储介质与流程

1.本技术涉及消息推送技术领域,尤其涉及一种消息推送方法、装置、电子设备及存储介质。


背景技术:

2.本部分旨在为权利要求书中陈述的本技术的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
3.websocket是一种在单个tcp连接上进行全双工通信的协议,使用websocket,浏览器和服务器只需一次握手,两者之间就直接可以创建持久行的连接,并进行双向数据传输。通常使用websocket分布式集群来将任务从服务端派发到前端(用户端),而用户可能与websocket分布式集群中的一个或多个节点建立了连接。目前相关技术中,主要通过消息广播推送,在这种方式中,没有与指定用户端建立连接的websocket节点也能够接收到推送给用户端的消息,但只能丢弃该消息,做无用功,浪费了大量的网络流量和节点计算资源。


技术实现要素:

4.有鉴于此,本技术的目的在于提出一种消息推送方法、装置、电子设备及存储介质。
5.基于上述目的,本技术提供了一种消息推送方法,所述方法应用于基于websocket的消息推送系统中,所述消息推送系统包括多个websocket节点;所述方法包括:
6.获取目标用户端的路由状态;
7.基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点;
8.将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端。
9.基于同一发明构思,本技术示例性实施例还提供了一种消息推送装置,包括:
10.获取模块,获取目标用户端的路由状态;
11.确定模块,基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点;
12.推送模块,将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端。
13.基于同一发明构思,本技术示例性实施例还提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可由所述处理器执行的计算机程序,所述处理器执行所述程序时实现如上所述的消息推送方法。
14.基于同一发明构思,本技术示例性实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行如上所述的消息推送方法。
15.从上面所述可以看出,本技术提供的消息推送方法、装置、电子设备及存储介质,获取目标用户端的路由状态;基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点;将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端,从而使websocket节点只会接收到与自身建立连接的用户端的消息,不存在网络流量和节点计算力的浪费,提高了消息推动的效率。
附图说明
16.为了更清楚地说明本技术或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
17.图1为相关技术中的一种基于websocket的消息推送系统的结构示意图;
18.图2为本技术实施例的一种基于websocket的消息推送系统的结构示意图;
19.图3为本技术实施例的一种消息推送方法的流程示意图;
20.图4为本技术实施例的另一种消息推送装置的结构示意图;
21.图5为本技术实施例的一种具体的电子设备的结构示意图。
具体实施方式
22.下面将参考若干示例性实施方式来描述本技术的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本技术,而并非以任何方式限制本技术的范围。相反,提供这些实施方式是为了使本技术更加透彻和完整,并且能够将本技术的范围完整地传达给本领域的技术人员。
23.根据本技术的实施方式,提出了一种消息推送方法、装置、电子设备及存储介质。
24.在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
25.下面参考本技术的若干代表性实施方式,详细阐释本技术的原理和精神。
26.发明概述
27.目前,相关技术中主要通过消息广播推送,在这种方式中,没有与指定用户端建立连接的websocket节点也能够接收到推送给用户端的消息,但只能丢弃该消息,做无用功,浪费了大量的网络流量和节点计算资源。参考图1,相关技术中当服务器向某个用户端发送推送消息时,会向所有的websocket节点(websocket节点1-4)发送该推送消息,但是由于当前用户端只与websocket节点1有连接关系,因此,只能通过websocket节点1向用户端发送该推送消息。而同时向websocket节点2-4发送该推送消息,只能将该消息丢弃,浪费了大量的网络流量和节点计算资源。
28.为了解决上述问题,本技术提供了一种消息推送方法,具体包括:
29.获取目标用户端的路由状态;基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点;将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端,
从而使websocket节点只会接收到与自身建立连接的用户端的消息,不存在网络流量和节点计算力的浪费,提高了消息推动的效率。参考图2,当服务器向某个用户端(目标用户端)发送推送消息时,会先通过目标用户端的路由状态确定出哪些websocket节点与目标用户端具有连接关系,当确定出只有websocket节点1与目标用户端具有连接关系时,只需要将推送消息发送给websocket节点1,无需再给websocket节点2-4发送该推送消息,避免了网络流量和节点计算力的浪费,提高了消息推动的效率。
30.在介绍了本技术的基本原理之后,下面具体介绍本技术的各种非限制性实施方式。
31.应用场景总览
32.在一些具体的应用场景中,本技术的消息推送方法可以应用于各种涉及消息推送的平台或系统中。
33.下面结合具体的应用场景,来描述根据本技术示例性实施方式的消息推送方法。需要注意的是,上述应用场景仅是为了便于理解本技术的精神和原理而示出,本技术的实施方式在此方面不受任何限制。相反,本技术的实施方式可以应用于适用的任何场景。
34.示例性方法
35.参考图3,本技术实施例提供了一种消息推送方法,所述方法应用于基于websocket的消息推送系统中,所述消息推送系统包括多个websocket节点;所述方法包括以下步骤:
36.s101,获取目标用户端的路由状态。
37.具体实施时,目标用户端的路由状态用于表示目标用户端与哪些websocket节点建立了连接。可选的,可以将多个用户端的路由状态保存在数据库中,然后从数据库中获取到该目标用户端的路由状态。可选的,目标用户端可以是任意用户端,该目标用户端主要用来表示当前将要接收待推送消息的用户端,可以根据需要来设置目标用户端,对此不做限定。
38.在一些实施例中,所述路由状态通过redis存储。
39.具体实施时,redis(remote dictionary server),即远程字典服务,是一个开源的使用ansi c语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。可选的,所述路由状态也可以通过现有技术中的其他数据库进行保存,对此不做限定。
40.s102,基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点。
41.具体实施时,在获取到目标用户端的路由状态后,就可以根据该路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点。
42.s103,将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端。
43.具体实施时,在确定与所述目标用户端具有连接关系的目标websocket节点后,就可以将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端。
44.需要说明的是,可能存在多个与所述目标用户端具有连接关系的目标websocket
节点,那么此时,每个目标websocket节点都会收到待推送消息,以使每个目标websocket节点将所述待推送消息发送给所述目标用户端。可选的,目标用户端在不同的状态下,可能会与不同的websocket节点建立连接,例如,同一用户端在不同的地理区域可能会与不同的websocket节点建立连接,而在用户端的路由状态中会记录所有的这些连接,以保证用户端在各个地理区域均可以接收到待推送的消息。
45.需要说明的是,在一些实施例中,可以通过rabbitmq(是一套开源的消息队列服务软件)来实现将待推送消息推送到所述目标websocket节点,此时对应的推送消息会发送到与目标websocket节点对应的rabbitmq上的消息队列中,此外,本领域技术人员也可以根据需要选择其他方式来实现将待推送消息推送到所述目标websocket节点中,对此不做限定。
46.在一些实施例中,基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点,具体包括:
47.获取所述多个websocket节点中每个websocket节点的第一路由键;
48.基于所述路由状态确定所述目标用户端的第二路由键,并确定与所述第二路由键对应的目标第一路由键;
49.将所述目标第一路由键对应的websocket节点确定为所述目标websocket节点。
50.具体实施时,每个websocket节点都有一个唯一的第一路由键,在从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点时,先根据目标用户端的路由状态确定所述目标用户端的第二路由键,可选的,该第二路由键可以为多个也可以为一个,在此不做限定。每个第一路由键均对应一个第二路由键,表示二者之间建立了连接关系,可选的,对应的一组第二路由键和第一路由键可以是完全一样的路由键,即当第一路由键与第二路由键相同时,表示二者对应。可选的,也可以通过预设关系列表来确定第一路由键与第二路由键的对应关系,对此不做限定。
51.在一些实施例中,基于所述路由状态确定所述目标用户端的第二路由键,具体包括:
52.获取所述路由状态中数值为1的第一目标数值及所述第一目标数值的第一位置;其中,所述路由状态通过二进制的数字表示;
53.基于所述第一目标数值及所述第一位置确定所述第二路由键;其中,所述第二路由键通过二进制的数字。
54.具体实施时,所述路由状态通过二进制的数字表示,其中,路由状态中的不同位置的第一目标数值确定了目标用户端的第二路由键。例如,路由状态101可以转化为第二路由键1.0.1,路由状态1000可以转化为第二路由键1.0.0.0。
55.需要说明的是,为了便于第一路由键与第二路由键的匹配,可以通过通配符来表示各个websocket节点的第一路由键,例如,当第二路由键为1.0.1时,与该第二路由键1.0.1对应的第一路由键为:#.1和#.1.*.*,其中,“#”表示存在大于或等于0数量的词,而“*”表示存在一个词。当通过通配符来表示各个websocket节点的第一路由键且目标用户端的第二路由键为一个值时,可以直接通过模糊匹配来确定所有与当前目标用户端的第二路由键对应的第一路由键。
56.在一些实施例中,所述第二路由键为多个;确定与所述第二路由键对应的目标第一路由键,具体包括:
57.对于多个所述第二路由键中的每个第二路由键,确定与所述第二路由键对应的所述第一路由键;其中,所述第一路由键通过二进制的数字表示且有且仅有一个数值为1;
58.将所有与所述第二路由键对应的所述第一路由键均确定为所述目标第一路由键。
59.具体实施时,第一路由键通过二进制的数字表示且有且仅有一个数值为1,例如,当前有三个第一路由键分别为:1、1.0、1.0.0。当前目标用户端的路由状态为:101,根据该目标用户端的路由状态得到的第二路由键为:1和1.0.0。则可以将上述三个第一路由键中的1和1.0.0这两个第一路由键确定为所述目标第一路由键。需要说明的是,所述目标用户端的第二路由键为多个时,每个第二路由键均通过二进制的数字表示且有且仅有一个数值为1。
60.在一些实施例中,基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点,具体包括:
61.获取所述多个websocket节点中每个websocket节点的第一路由键;其中,所述第一路由键通过二进制的数字表示且有且仅有一个数值为1;
62.确定所述第一路由键中数值为1的第二目标数值的第二位置;
63.获取所述路由状态中数值为1的第一目标数值的第一位置;其中,所述路由状态通过二进制的数字表示;
64.基于所述第一位置与所述第二位置确定所述目标websocket节点。
65.具体实施时,当目标用户端的路由状态为101时,对应的第二目标数值的第二位置有两个分别为从右到左第一位和第三位。这时只需要确定哪两个第一路由键的第一位置分别为从右到左第一位和第三位,即可以确定所述目标websocket节点。可选的,可以通过通配符来表示各个websocket节点第一路由键,例如常用的“#”和“*”两种通配符,其中,“#”表示存在大于或等于0数量的词,而“*”表示存在一个词,词与词之间用“.”分隔,则第一位置分别为从右到左第一位和第三位的第一路由键可以表示为:#.1和#.1.*.*。
66.在一些实施例中,在获取目标用户端的路由状态之前,所述方法还包括:
67.响应于确定所述目标用户与所述目标websocket节点建立连接,基于所述建立连接的响应及所述目标websocket节点的路由节点状态更新所述路由状态;
68.响应于确定所述目标用户与所述目标websocket节点断开连接,基于所述断开连接的响应及所述目标websocket节点的路由节点状态更新所述路由状态。
69.具体实施时,在确定目标用户端的路由状态时,可选的,可以将目标用户端的初始路由状态设置为0,即未与任何websocket节点建立联系。然后,当所述目标用户与所述目标websocket节点建立连接时,根据所述目标websocket节点的路由节点状态更新所述路由状态,即将第一路由键添加到更新前的所述路由状态中。当所述目标用户与所述目标websocket节点断开连接时,根据所述目标websocket节点的路由节点状态更新所述路由状态,即将第一路由键从更新前的所述路由状态中减去。这样可以保证目标用户端的路由状态一直处于最新的状态,以使推送消息可以准确的发送到目标websocket节点中,进一步保证目标用户端可以收到推送消息。
70.在一些实施例中,基于所述建立连接的响应及所述目标websocket节点的路由节点状态更新所述路由状态,具体包括:
71.获取所述路由节点状态与更新前的所述路由状态;其中,所述路由状态通过二进
制的数字表示,所述路由节点状态通过二进制的数字表示且有且仅有一个数值为1;
72.将所述路由节点状态与更新前的所述路由状态做与运算,并基于所述与运算的结果更新所述路由状态。
73.具体实施时,例如,若更新前的目标用户端的路由状态为10,与所述目标用户端建立了连接关系的目标websocket节点的路由节点状态为100,将100与10做“与”运算就可以得到更新后的目标用户端的路由状态为110。从而可以快速的得到更新所述路由状态。可选的,每个websocket节点中均保存着各自的路由节点状态,可以直接从目标websocket节点中获取到其对应的路由节点状态。
74.在一些实施例中,基于所述断开连接的响应及所述目标websocket节点的路由节点状态更新所述路由状态,具体包括:
75.获取所述路由节点状态与更新前的所述路由状态;其中,所述路由状态通过二进制的数字表示,所述路由节点状态通过二进制的数字表示且有且仅有一个数值为1;
76.将所述路由节点状态与更新前的所述路由状态做异或运算,并基于所述异或运算的结果更新所述路由状态。
77.具体实施时,例如,若更新前的目标用户端的路由状态为111,与所述目标用户端断开了连接关系的目标websocket节点的路由节点状态为100,将111与100做“异或”运算就可以得到更新后的目标用户端的路由状态为011(即11)。从而可以快速的基于所述断开连接的响应及所述目标websocket节点的路由节点状态更新所述路由状态。
78.在一些实施例中,在更新所述路由状态之后,所述方法还包括:
79.响应于确定更新后的所述路由状态中的所有数值均为0,删除更新后的所述路由状态;
80.其中,所述路由状态通过二进制的数字表示。
81.具体实施时,由于当更新后的所述路由状态中的所有数值均为0时,说明此时目标用户端与所有的websocket节点均没有建立连接,为了节约内存,可以直接将更新后的所述路由状态删除。
82.本技术提供的消息推送方法,应用于基于websocket的消息推送系统中,所述消息推送系统包括多个websocket节点;该方法先获取目标用户端的路由状态;然后基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点;最后,将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端,从而使websocket节点只会接收到与自身建立连接的用户端的消息,不存在网络流量和节点计算力的浪费,提高了消息推动的效率。此外,相关技术中,通过使用一致性哈希算法来保证将推送消息发送到对应的websocket节点,再由对应的websocket节点推送给用户端,但是该方法需要架设服务注册中心和网关,websocket节点启动后都需要到服务注册中心注册,服务注册中心根据已注册的websocket节点,使用一致性哈希算法构建哈希环,websocket节点分布在哈希环上,而websocket节点的添加或删除会导致部分用户的连接不可用,同时,需要额外架设服务注册中心,实现一致性哈希算法,增加了系统复杂度,加大了开发人员的系统维护负担;与之相比,本技术实施例的方法没有额外系统搭建成本、后期维护成本,实现简单;同时,添加或是删除一部分websocket节点,不会影响到其他websocket节点,即用户端和其他websocket节
点建立的连接不会受到干扰。
83.示例性设备
84.基于同一发明构思,与上述任意实施例方法相对应的,本技术还提供了一种消息推送装置。
85.参考图4,所述消息推送系统,包括:
86.获取模块201,获取目标用户端的路由状态;
87.确定模块202,基于所述路由状态从所述多个websocket节点中确定与所述目标用户端具有连接关系的目标websocket节点;
88.推送模块203,将待推送消息推送到所述目标websocket节点,以使所述目标websocket节点将所述待推送消息发送给所述目标用户端。
89.为了描述的方便,描述以上系统时以功能分为各种模块分别描述。当然,在实施本技术时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
90.上述实施例的系统用于实现前述任一实施例中相应的消息推送方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
91.基于同一发明构思,与上述任意实施例方法相对应的,本技术还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的消息推送方法。
92.图5示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
93.处理器1010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
94.存储器1020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
95.输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
96.通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
97.总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
98.需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口
1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
99.上述实施例的电子设备用于实现前述任一实施例中相应的消息推送方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
100.示例性程序产品
101.基于同一发明构思,与上述任意实施例方法相对应的,本技术还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的消息推送方法。
102.本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
103.上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的一种消息推送方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
104.所在领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本技术的范围(包括权利要求)被限于这些例子;在本技术的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本技术实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
105.另外,为简化说明和讨论,并且为了不会使本技术实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本技术实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本技术实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本技术的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本技术实施例。因此,这些描述应被认为是说明性的而不是限制性的。
106.尽管已经结合了本技术的具体实施例对本技术进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
107.本技术实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本技术实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1