CN113452777B - 一种消息推送方法及装置 - Google Patents
一种消息推送方法及装置 Download PDFInfo
- Publication number
- CN113452777B CN113452777B CN202110713583.2A CN202110713583A CN113452777B CN 113452777 B CN113452777 B CN 113452777B CN 202110713583 A CN202110713583 A CN 202110713583A CN 113452777 B CN113452777 B CN 113452777B
- Authority
- CN
- China
- Prior art keywords
- channel
- client
- push
- manufacturer
- application program
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0807—Network architectures or network communication protocols for network security for authentication of entities using tickets, e.g. Kerberos
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/321—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving a third party or a trusted authority
- H04L9/3213—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving a third party or a trusted authority using tickets or tokens, e.g. Kerberos
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供了一种消息推送方法及装置,涉及消息推送技术领域。该方法包括:客户端向服务器发送推送通道协商请求;推送通道协商请求携带有客户端设备信息和应用程序的信息;服务器接收推送通道协商请求;服务器根据客户端设备信息和应用程序的信息,判断客户端开启双通道或单通道,并根据判断结果向客户端返回通道开启指示信息;客户端接收通道开启指示信息;客户端根据通道开启指示信息,开启厂商推送通道和/或自建推送通道。本发明采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性,且客户端可开启双通道***,两者之间可以互相切换,避免了厂商推送通道额度很快消耗完,消息无法正常推送的问题。
Description
技术领域
本发明涉及消息推送技术领域,尤其涉及一种消息推送方法及装置。
背景技术
传统的消息推送功能是由前端来决定具体的推送通道,为了保证推送的到达率,一般会选择集成厂商推送通道。但是厂商的推送通道往往具有一定的额度限制,如果当前应用程序将推送额度使用完,则无法再继续进行消息推送。而且由于完全依赖前端选择推送通道,无法实现动态切换。采用传统的通道策略,一般在上午的时刻,就会将厂商额度全部消费完,且没有任何可以动态切换的方式去支持接下来的推送,严重影响应用程序消息推送功能的正常使用。
发明内容
本发明提供一种消息推送方法及装置,解决现有技术中选择推送通道的方式灵活性差的问题。
在本发明实施的第一方面,提供了一种消息推送方法,包括:
客户端向服务器发送推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
所述服务器接收所述推送通道协商请求;
所述服务器根据所述客户端设备信息和所述应用程序的信息,判断所述客户端开启双通道或单通道,并根据判断结果向所述客户端返回通道开启指示信息;
所述客户端接收所述通道开启指示信息;
所述客户端根据所述通道开启指示信息,开启厂商推送通道和/或自建推送通道。
可选的,所述客户端开启厂商推送通道和自建推送通道之后,所述方法还包括:
所述客户端获取厂商推送服务器返回的第一注册令牌;
所述客户端获取自建推送服务器返回的第二注册令牌;
所述客户端通过同步队列,将所述第一注册令牌和所述第二注册令牌上传给所述服务器;
所述服务器通过所述第一注册令牌调用厂商推送通道向所述客户端发送推送消息;
所述服务器通过所述第二注册令牌调用自建推送通道向所述客户端发送推送消息。
可选的,所述客户端向服务器发送推送通道协商请求之后,所述方法还包括:
所述服务器获取与所述客户端匹配的目标厂商推送通道;
所述服务器将所述目标厂商推送通道发送给所述客户端;
所述客户端接收所述目标厂商推送通道;
所述客户端开启厂商推送通道的步骤包括:
所述客户端开启所述目标厂商推送通道。
在本发明实施的第二方面,还提供了一种消息推送方法,包括:
向服务器发送推送通道协商请求;
接收所述服务器返回的通道开启指示信息;
当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道;
当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
可选的,开启厂商推送通道和自建推送通道的情况下,所述方法还包括:
获取厂商推送服务器返回的第一注册令牌;
获取自建推送服务器返回的第二注册令牌;
将第一线程加入到同步队列中,所述第一线程用于执行上传所述第一注册令牌到所述服务器;
将第二线程加入到同步队列中,所述第二线程用于执行上传所述第二注册令牌到所述服务器;
按照加入的先后顺序依次执行所述同步队列中的线程。
可选的,所述按照加入的先后顺序依次执行所述同步队列中的线程的步骤包括:
设置抽象队列同步器的头节点指向所述同步队列中最先加入的线程,尾节点指向所述同步队列中最后加入的线程;
触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态;其中所述同步锁在当前线程没有执行完时处于锁定状态,且任何线程执行时需要获得所述同步锁;
当所述头节点指向的线程执行完成后,释放所述同步锁,将执行完成的线程从所述同步队列中移除,并设置所述头节点指向移除后的同步队列中最先加入的线程,之后返回所述触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态的步骤。
在本发明实施的第三方面,还提供了一种消息推送装置,包括:
第一发送模块,用于向服务器发送推送通道协商请求;
第一接收模块,用于接收所述服务器返回的通道开启指示信息;
第一开启模块,用于当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道;
第二开启模块,用于当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
在本发明实施的第四方面,还提供了一种消息推送方法,包括:
接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式;
当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息;
当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
可选的,所述根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息的步骤包括:
根据所述应用程序的信息,判断所述应用程序是否属于预设的推送通道消耗额度大的应用程序;
当所述应用程序属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回双通道开启指示信息;
当所述应用程序不属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回单通道开启指示信息。
可选的,所述根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式的步骤包括:
根据所述客户端设备信息,判断所述客户端与厂商推送通道支持的设备是否匹配;
若所述客户端与预设厂商推送通道集中的至少一个厂商推送通道支持的设备匹配,则确定所述客户端支持厂商推送方式,否则,确定所述客户端不支持厂商推送方式。
可选的,向所述客户端返回双通道开启指示信息的情况下,所述方法还包括:
判断推送消息对实时性的要求;
若推送消息具有实时性要求,则通过厂商推送通道向所述客户端推送所述推送消息;
若推送消息不具有实时性要求,则通过自建推送通道向所述客户端推送所述推送消息。
在本发明实施的第五方面,还提供了一种消息推送装置,包括:
第二接收模块,用于接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
第一判断模块,用于根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式;
第一返回模块,用于当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息;
第二返回模块,用于当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
针对在先技术,本发明具备如下优点:
本发明实施例中,采用通道协商的方式,客户端首先向服务器发送推送通道协商请求,由后端决定具体的通道;服务器接收推送通道协商请求,根据推送通道协商请求携带的客户端设备信息和应用程序的信息,判断客户端开启双通道或单通道,并根据判断结果向客户端返回通道开启指示信息,这样前端通道的选择交由后端来确定,可大大提升灵活性和可动态切换的属性;客户端接收服务器返回的通道开启指示信息,根据通道开启指示信息,开启厂商推送通道和/或自建推送通道。客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,两者之间可以互相切换,避免了厂商推送通道额度很快消耗完,导致消息无法正常推送的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1为本发明实施例提供的推送***侧消息推送方法的流程示意图;
图2为本发明实施例提供的推送***侧消息推送方法的另一流程示意图;
图3为本发明实施例提供的客户端侧消息推送方法的流程示意图;
图4为本发明实施例提供的同步队列加入新节点示意图;
图5为本发明实施例提供的同步队列释放节点示意图;
图6为本发明实施例提供的客户端侧消息推送装置的示意框图;
图7为本发明实施例提供的客户端侧电子设备的示意框图;
图8为本发明实施例提供的服务器侧消息推送方法的流程示意图;
图9为本发明实施例提供的服务器侧消息推送装置的示意框图;
图10为本发明实施例提供的服务器侧电子设备的示意框图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解的是,还可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
图1是本发明实施例提供的应用于推送***的消息推送方法的流程示意图,该推送***包括客户端和服务器。参见图1所示,该消息推送方法包括:
步骤11:客户端向服务器发送推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序。
这里,由于前端决定推送通道不具备灵活性,因此本发明实施例采用通道协商的方式,客户端向服务器发送推送通道协商请求,由服务器端决定推送通道,以提升灵活性和可动态切换的属性。
步骤12:所述服务器接收所述推送通道协商请求。
步骤13:所述服务器根据所述客户端设备信息和所述应用程序的信息,判断所述客户端开启双通道或单通道,并根据判断结果向所述客户端返回通道开启指示信息。
这里,服务器根据客户端设备信息和应用程序的信息,判断客户端需要开启双通道还是单通道,并根据判断结果向客户端返回通道指示信息,这样前端通道的选择交由后端来确定,可大大提升灵活性和可动态切换的属性。
其中,本发明实施例对于通道开启指示信息的具体形式不做限定,例如通道开启指示信息可以为指示参数,指示参数不同的取值指示不同的通道开启方式。如指示参数取值为01时指示开启双通道,指示参数取值10时指示开启单通道,指示参数取值为00时指示开启厂商推送通道单通道,指示参数取值为11时指示开启自建推送通道单通道。
步骤14:所述客户端接收所述通道开启指示信息。
步骤15:所述客户端根据所述通道开启指示信息,开启厂商推送通道和/或自建推送通道。
这里,客户端根据服务器的指示,除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,在双通道***下厂商推送通道和自建推送通道之间可以互相切换,避免了厂商推送通道额度很快消耗完,导致消息无法正常推送的问题。
其中,自建推送通道指的是自建推送服务提供的推送通道,自建推送服务指的是平台自己搭建的长连接推送服务。
本发明实施例的消息推送方法,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性,且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,两者之间可以互相切换,避免了厂商推送通道额度很快消耗完,导致消息无法正常推送的问题。
可选的,所述客户端开启厂商推送通道和自建推送通道之后,所述方法还包括:
步骤16:所述客户端获取厂商推送服务器返回的第一注册令牌。
这里,由于服务器发送推送消息是通过注册令牌token发送的,可以理解为每个客户端有一个唯一的注册令牌来标识,所以开启厂商推送通道之后,厂商推送服务器会返回给客户端的第一注册令牌,以保证推送通道的正常使用。
步骤17:所述客户端获取自建推送服务器返回的第二注册令牌。
这里,开启自建推送通道之后,自建推送服务器会返回给客户端第二注册令牌,以保证推送通道的正常使用。
步骤18:所述客户端通过同步队列,将所述第一注册令牌和所述第二注册令牌上传给所述服务器。
这里,由于客户端上传注册令牌的接口是同一个,因此在开启厂商推送通道和自建推送通道双通道的情况下,需要通过同步队列,将第一注册令牌和第二注册令牌进行多线程同步上传,保证双通道情况下,两个注册令牌的有序上传。
步骤19:所述服务器通过所述第一注册令牌调用厂商推送通道向所述客户端发送推送消息。
这里,客户端将第一注册令牌上传后,服务器可通过第一注册令牌调用厂商推送通道实现消息推送。
步骤110:所述服务器通过所述第二注册令牌调用自建推送通道向所述客户端发送推送消息。
这里,客户端将第二注册令牌上传后,服务器可通过第二注册令牌调用自建推送通道实现消息推送。
可选的,所述客户端向服务器发送推送通道协商请求之后,所述方法还包括:
步骤111:所述服务器获取与所述客户端匹配的目标厂商推送通道。
步骤112:所述服务器将所述目标厂商推送通道发送给所述客户端。
步骤113:所述客户端接收所述目标厂商推送通道;
这里,服务器为客户端选择是否开启双通道的同时,还可为客户端选取匹配的目标厂商推送通道,使得客户端接收到指示后,可快速找到匹配的厂商推送通道,节省客户端资源,提高处理效率。
上述步骤15中,所述客户端开启厂商推送通道的步骤包括:
所述客户端开启所述目标厂商推送通道。
这里,客户端根据服务器的指示,开启厂商推送通道时,可快速找到匹配的目标厂商推送通道并开启,节省了客户端资源,提高了处理效率。
下面对本发明实施例的消息推送方法的一具体实现流程举例说明如下。
如图2所示,假设服务器使用后端服务器,本发明实施例的消息推送方法包括:
步骤21:客户端向后端服务器发送推送通道协商请求;推送通道协商请求携带有客户端设备信息和应用程序的信息。
步骤22:后端服务器根据客户端设备信息和应用程序的信息,判断客户端需要开启双通道,后端服务器向客户端返回双通道开启指示信息以及目标厂商推送通道。
步骤23:客户端根据双通道开启指示信息,开启双通道。
步骤231:客户端开启自建推送通道。
步骤232:客户端开启厂商推送通道。
步骤24:客户端接收厂商推送服务器和自建推送服务器返回的注册令牌。
步骤25:客户端通过同步队列,上传厂商服务器和自建推送服务器返回的注册令牌。
本发明实施例的消息推送方法,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,在厂商额度使用完的情况下,可动态切换到自建推送通道,同时发送消息时可以根据需要选择不同的通道;增加了推送的到达率,保证了业务推送消息能够最大可能地发送给用户,有利于应用程序导流。
图3是本发明实施例提供的应用于客户端的消息推送方法的流程示意图。参见图3所示,该消息推送方法包括:
步骤31:向服务器发送推送通道协商请求。
这里,由于前端决定推送通道不具备灵活性,因此本发明实施例采用通道协商的方式,客户端向服务器发送推送通道协商请求,由服务器端决定推送通道,以提升灵活性和可动态切换的属性。
其中,推送通道协商请求可携带但不限于客户端设备信息和应用程序的信息,该应用程序为客户端上安装的应用程序。客户端设备信息可包括但不限于客户端的设备型号和设备版本,设备版本具体可包括但不限于操作***版本和厂商***版本。应用程序的信息如可包括但不限于应用程序名称、版本等信息。
其中,推送通道协商请求中还可携带设备ID,以便于服务器能够根据设备ID识别不同的客户端。
其中,步骤31可在检测到应用程序启动时执行,即在应用程序启动时向服务器发送推送通道协商请求,协商好推送通道,但不限于此。例如步骤31也可在应用程序启动之前执行,从而在应用程序启动之前提前与后台协商好推送通道,在应用程序启动之后服务器可直接使用确定好的推送通道推送消息。
步骤32:接收所述服务器返回的通道开启指示信息。
这里,服务器根据客户端的推送通道协商请求,向客户端返回通道开启指示信息,客户端根据该通道开启指示信息确定开启双通道或单通道。
其中,本发明实施例对于通道开启指示信息的具体形式不做限定,例如通道开启指示信息可以为指示参数,指示参数不同的取值指示不同的通道开启方式。如指示参数取值为01时指示开启双通道,指示参数取值10时指示开启单通道,指示参数取值为00时指示开启厂商推送通道单通道,指示参数取值为11时指示开启自建推送通道单通道。
步骤33:当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道。
这里,当服务器指示开启双通道时,客户端开启厂商推送通道和自建推送通道,从而形成厂商推送通道加自建推送通道的双通道***,两种通道之间可以实时动态切换。例如对于实时性不高的消息,不让其占用厂商额度,让其走自建推送通道,以降低厂商额度的消费速度,当厂商额度消费完后,可通过自建推送通道继续进行消息推送,以保证消息推送的正常进行。如此通过开启双通道模式实现了通道的实时动态切换,避免了厂商推送通道额度很快消费完,导致消息无法正常使用的问题。
步骤34:当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
这里,当服务器指示开启单通道时,客户端开启厂商推送通道或者自建推送通道,如此不仅可提供双通道模型,也可保持单通道模式,以满足不同情况下的需求。例如对于不支持厂商推送通道的客户端可只开启自建推送通道,对于推送通道消耗额度小的应用程序可只开通厂商推送通道等。
其中,客户端可通过调用厂商推送服务器接口开启具体的厂商推送通道,客户端可通过调用自建推送服务器接口开启自建推送通道。
本发明实施例的消息推送方法,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且除了厂商推送通道,还提供了自建推送通道,当服务器指示开启双通道时,客户端开启厂商推送通道和自建推送通道,从而形成了厂商推送通道加自建推送通道的双通道***,两种通道之间可以实时动态切换,避免了厂商推送通道额度很快消费完,导致消息无法正常推送的问题。
可选的,开启厂商推送通道和自建推送通道的情况下,所述方法还包括:
步骤35:获取厂商推送服务器返回的第一注册令牌。
这里,由于服务器发送推送消息是通过注册令牌token发送的,可以理解为每个客户端有一个唯一的注册令牌来标识,所以开启厂商推送通道之后,厂商推送服务器会返回给客户端的第一注册令牌,以保证推送通道的正常使用。
步骤36:获取自建推送服务器返回的第二注册令牌。
这里,开启自建推送通道之后,自建推送服务器会返回给客户端的第二注册令牌,以保证推送通道的正常使用。
其中,厂商推送服务器和自建推送服务器可将注册令牌进行广播,客户端可通过广播接收器获取第一注册令牌和第二注册令牌,但不限于此。
客户端接收到第一注册令牌和第二注册令牌之后,需要将第一注册令牌和第二注册令牌上传到服务器,如果是单通道上传注册令牌比较容易实现,但是双通道条件下,由于客户端上传注册令牌的接口是同一个,而客户端获取第一注册令牌和第二注册令牌是在两个线程中进行的,是异步的,因此上传第一注册令牌和第二注册令牌存在竞争的问题,需要进行多线程同步。
为了实现多线程同步,所述方法还包括:
步骤37:将第一线程加入到同步队列中,所述第一线程用于执行上传所述第一注册令牌到所述服务器。
步骤38:将第二线程加入到同步队列中,所述第二线程用于执行上传所述第二注册令牌到所述服务器;
步骤39:按照加入的先后顺序依次执行所述同步队列中的线程。
此时,在第一线程中上传第一注册令牌,在第二线程中上传第二注册令牌,并将第一线程和第二线程加入到同步队列中,同步队列中的线程按照加入的先后顺序依次执行,从而实现了多线程同步,避免了上传第一注册令牌和第二注册令牌的竞争问题,保证双通道情况下,两个注册令牌的有序上传。
可选的,上述步骤39包括:
步骤391:设置抽象队列同步器的头节点指向所述同步队列中最先加入的线程,尾节点指向所述同步队列中最后加入的线程。
这里,多线程同步采用抽象队列同步器(AQS,AbstractQueuedSynchronizer)实现,抽象队列同步器提供了一个FIFO(First Input First Output,先入先出)同步队列,抽象队列同步器内设置同步锁。如图4所示,抽象队列同步器的头节点head指向同步队列中最先加入的线程,尾节点tail指向最后加入的线程。
步骤392:触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态;其中所述同步锁在当前线程没有执行完时处于锁定状态,且任何线程执行时需要获得所述同步锁。
这里,抽象队列同步器会触发头节点指向的线程获得同步锁,执行头节点指向的线程,并设置同步锁处于锁定状态,其中同步锁在当前线程没有执行完时处于锁定状态,且任何线程执行时需要获得同步锁,其他线程只能在队列中排队等待当前线程执行完成后执行。
其中,任何线程执行时需要获得同步锁,如果线程竞争锁失败,那么抽象队列同步器会把线程以及等待状态信息构造成一个线程节点加入到同步队列中,同时再阻塞该线程,当获得同步锁的线程释放锁以后,会从同步队列中唤醒一个阻塞的线程节点,如此实现多线程有序执行。如图4所示,当出现锁竞争时,新的线程封装成节点追加到同步队列中,同时抽象队列同步器的尾节点指向最新加入的节点。
其中,具体可通过CAS(Compare and swap,比较与交换)设置尾节点,但不限于此。
其中,同步队列中的每个节点可设置前置prev指针和后置next指针,前置指针指向上一个紧挨的兄弟节点,后置指针指向下一个紧挨的兄弟节点,以更好地实现同步队列中每个节点间的先后连接关系。此时,当有新的线程加入同步队列时,新的节点设置前置指针指向上一个紧挨的节点,同时设置后置指针指向自己(由于是最后一个节点,因此没有下一个紧挨的兄弟节点)。
步骤393:当所述头节点指向的线程执行完成后,释放所述同步锁,将执行完成的线程从所述同步队列中移除,并设置所述头节点指向移除后的同步队列中最先加入的线程,之后返回所述触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态的步骤。
这里,当头节点指向的线程执行完成后,会释放同步锁,将执行完成的线程从同步队列中移除,并将头节点指向下一个阻塞的线程,之后返回步骤392,触发头节点当前指向的下一个线程获得同步锁成功,执行下一个线程。
如图5所示,当出现释放锁时,虚线节点执行完毕后从同步队列中移除,修改头节点指向下一个获得锁的节点,同时新获得锁的下一个节点将前置指针指向空(由于是第一个节点,因此没有上一个紧挨的兄弟节点)。
此时,通过以上的同步机制,实现了上传第一注册令牌和第二注册令牌的多线程同步。
本发明实施例的消息推送方法,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,在厂商额度使用完的情况下,可动态切换到自建推送通道,同时发送消息时可以根据需要选择不同的通道;增加了推送的到达率,保证了业务推送消息能够最大可能地发送给用户,有利于应用程序导流。
图6是本发明实施例提供的应用于客户端的消息推送装置600的示意框图。参见图6所示,该消息推送装置600包括:
第一发送模块601,用于向服务器发送推送通道协商请求;
第一接收模块602,用于接收所述服务器返回的通道开启指示信息;
第一开启模块603,用于当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道;
第二开启模块604,用于当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
本发明实施例的消息推送装置600,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且除了厂商推送通道,还提供了自建推送通道,当服务器指示开启双通道时,客户端开启厂商推送通道和自建推送通道,从而形成了厂商推送通道加自建推送通道的双通道***,两种通道之间可以实时动态切换,避免了厂商推送通道额度很快消费完,导致消息无法正常推送的问题。
可选的,所述装置还包括:
第一获取模块,用于获取厂商推送服务器返回的第一注册令牌;
第二获取模块,用于获取自建推送服务器返回的第二注册令牌;
第一加入模块,用于将第一线程加入到同步队列中,所述第一线程用于执行上传所述第一注册令牌到所述服务器;
第二加入模块,用于将第二线程加入到同步队列中,所述第二线程用于执行上传所述第二注册令牌到所述服务器;
执行模块,用于按照加入的先后顺序依次执行所述同步队列中的线程。
可选的,所述执行模块包括:
设置子模块,用于设置抽象队列同步器的头节点指向所述同步队列中最先加入的线程,尾节点指向所述同步队列中最后加入的线程;
执行子模块,用于触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态;其中所述同步锁在当前线程没有执行完时处于锁定状态,且任何线程执行时需要获得所述同步锁;
释放子模块,用于当所述头节点指向的线程执行完成后,释放所述同步锁,将执行完成的线程从所述同步队列中移除,并设置所述头节点指向移除后的同步队列中最先加入的线程,之后返回所述触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态的步骤。
本发明实施例的消息推送装置,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,在厂商额度使用完的情况下,可动态切换到自建推送通道,同时发送消息时可以根据需要选择不同的通道;增加了推送的到达率,保证了业务推送消息能够最大可能地发送给用户,有利于应用程序导流。
对于上述装置实施例而言,由于其与方法实施例基本相似,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,该电子设备可以是客户端。如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信。
存储器703,用于存放计算机程序。
处理器701用于执行存储器703上所存放的程序时,实现如下步骤:
向服务器发送推送通道协商请求;
接收所述服务器返回的通道开启指示信息;
当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道;
当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的消息推送方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的消息推送方法。
图8是本发明实施例提供的应用于服务器的消息推送方法的流程示意图。参见图8所示,该消息推送方法包括:
步骤81:接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序。
这里,由于前端决定推送通道不具备灵活性,因此本发明实施例采用通道协商的方式,客户端向服务器发送推送通道协商请求,服务器接收到推送通道协商请求后确定推送通道,提升了灵活性和可动态切换的属性。
步骤82:根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式。
这里,由于有些客户端因为设备版本等问题无法支持厂商推送方式,因此服务器首先根据客户端设备信息确定客户端是否支持厂商推送方式,以确定是否开启厂商推送通道。
步骤83:当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息。
这里,当客户端支持厂商推送方式时,服务器根据应用程序的信息,可确定应用程序消耗推送通道的能力,进而根据应用程序消耗推送通道的能力,确定向客户端返回双通道开启指示信息或者单通道开启指示信息,以在满足客户端需求的情况下保证资源分配尽可能合理化。
步骤84:当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
这里,有些客户端的设备版本不支持厂商推送方式,对于这种情况,服务器返回自建推送通道单通道开启指示信息,客户端接收到自建推送通道单通道开启指示信息,只开启自建推送通道。
本发明实施例的消息推送方法,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,两者之间可以互相切换,避免厂商推送通道额度很快消耗完,导致消息无法正常推送的问题。
可选的,上述步骤83中,所述根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息的步骤包括:
步骤831:根据所述应用程序的信息,判断所述应用程序是否属于预设的推送通道消耗额度大的应用程序。
这里,在客户端支持厂商推送方式的情况下,服务器根据应用程序的信息,判断应用程序是否属于预设的推送通道消耗额度大的应用程序,以基于应用程序对推送通道的消耗额度,确定向客户端返回双通道开启指示信息或者单通道开启指示信息,从而在满足客户端需求的情况下保证资源分配尽可能合理化。
其中,只要能够用于识别应用程序,以确定其是否属于预设的推送通道消耗额度大的应用程序的信息,都可应用到本发明实施例中。例如,应用程序的信息如可但不限于包括应用程序名称、版本等信息。
步骤832:当所述应用程序属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回双通道开启指示信息。
这里,当应用程序属于预设的推送通道消耗额度大的应用程序时,服务器指示客户端开启双通道,即返回双通道开启指示信息,客户端接收到双通道开启指示信息后,开启厂商推送通道和自建推送通道,两种通道之间可以实时动态切换,避免了厂商推送通道额度很快消费完,导致消息无法正常推送的问题。
步骤833:当所述应用程序不属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回单通道开启指示信息。
这里,对于有些应用程序消耗推送通道的能力较小,只开启厂商推送通道或者自建推送通道也够用的情况下,服务器返回单通道开启指示信息,客户端接收到单通道开启指示信息,只开启厂商推送通道或者自建推送通道即可。
其中,预设的推送通道消耗额度大的应用程序可根据需求进行设定和划分。
此时,服务器首先根据客户端设备信息,判断客户端是否支持厂商推送方式,然后根据应用程序消耗推送通道的能力判断是否有必要开启双通道。当客户端支持厂商推送方式,且应用程序属于预设的推送通道消耗额度大的应用程序时,服务器指示客户端开启双通道,即返回双通道开启指示信息,客户端接收到双通道开启指示信息后,开启厂商推送通道和自建推送通道,两种通道之间可以实时动态切换,避免了厂商推送通道额度很快消费完,导致消息无法正常推送的问题。当客户端支持厂商推送方式,且应用程序不属于预设的推送通道消耗额度大的应用程序时,服务器返回单通道开启指示信息,客户端接收到单通道开启指示信息,只开启厂商推送通道或者自建推送通道。当客户端不支持厂商推送方式时,服务器返回自建推送通道单通道开启指示信息,客户端接收到单通道开启指示信息,只开启自建推送通道。
当然,上述服务器基于客户端设备信息和应用程序的信息为客户端制定通道开启方案仅为一种优选的实现方式,本发明实施例也可采用其他方式为客户端制定通道开启方案。例如,本发明实施例也可不考虑应用程序消耗推送通道能力的大小,只要客户端支持厂商推送通道,则开启厂商推送通道和自建推送通道双通道,客户端不支持厂商推送通道,则开启自建推送单通道。或者,本发明实施例也可不考虑客户端是否支持厂商推送方式,只考虑应用程序消耗推送通道的能力,对于推送通道消耗额度大的应用程序开启厂商推送通道和自建推送通道双通道,对于推送通道消耗额度小的应用程序开启厂商推送单通道。
可选的,上述步骤82包括:
步骤821:根据所述客户端设备信息,判断所述客户端与厂商推送通道支持的设备是否匹配。
这里,服务器根据客户端设备信息,判断客户端与厂商推送通道支持的设备是否匹配,以确定客户端是否支持厂商推送方式。
步骤822:若所述客户端与预设厂商推送通道集中的至少一个厂商推送通道支持的设备匹配,则确定所述客户端支持厂商推送方式,否则,确定所述客户端不支持厂商推送方式。
这里,若客户端与预设厂商推送通道集中的至少一个厂商推送通道支持的设备匹配,则客户端可以使用与其匹配的厂商推送通道,即支持厂商推送方式,否则客户端不可以使用厂商推送通道,即不支持厂商推送方式。
其中,客户端设备信息可包括但不限于客户端的设备型号和设备版本,此时,上述步骤821包括:客户端的设备型号和设备版本与厂商推送通道支持的设备型号和设备版本进行比较,以判断客户端与厂商推送通道支持的设备是否匹配;上述步骤822包括:若客户端的设备型号和设备版本,与预设厂商推送通道集中的至少一个厂商推送通道支持的设备型号和设备版本匹配,则确定客户端支持厂商推送方式,否则,确定客户端不支持厂商推送方式。
其中,设备版本具体可包括操作***版本和厂商***版本。此时服务器分别判断设备型号、操作***版本和厂商***版本是否与厂商推送通道支持的设备型号、操作***版本和厂商***版本相匹配。
其中,推送通道协商请求中还可携带设备ID,以便于服务器能够根据设备ID识别不同的客户端。
可选的,所述推送通道协商请求还携带有倾向厂商推送通道。
这里,客户端向服务器发送的推送通道协商请求中还可携带前端倾向的厂商推送通道。
上述步骤821包括:
步骤8211:根据所述客户端设备信息,判断所述客户端的设备型号和设备版本与倾向厂商推送通道支持的设备型号和设备版本是否匹配。
步骤8212:若所述客户端的设备型号和设备版本与倾向厂商推送通道支持的设备型号和设备版本匹配,则确定所述客户端支持厂商推送方式,否则根据所述客户端设备信息,判断所述客户端的设备型号和设备版本与除所述倾向厂商推送通道外的其他厂商推送通道支持的设备型号和设备版本是否匹配。
此时,服务器在判断客户端的设备型号和设备版本与厂商推送通道支持的设备型号和设备版本是否匹配时,首先判断客户端的设备型号和设备版本与倾向厂商推送通道支持的设备型号和设备版本是否匹配。若与倾向厂商推送通道支持的设备型号和设备版本匹配,则确定客户端支持厂商推送方式。若与倾向厂商推送通道支持的设备型号和设备版本不匹配,再去判断与其他厂商推送通道是否匹配,若与至少一个其他的厂商推送通道匹配,则确定客户端支持厂商推送方式。从而对于前端倾向的厂商推送通道进行验证,只有匹配时才会确定客户端支持厂商推送方式,继而开启厂商推送通道,当不匹配时再去找其他厂商推送通道进行验证,保证了厂商推送通道与客户端的匹配性。
优选的,上述步骤821之后,所述方法还包括:
步骤8213:将与所述客户端的设备型号和设备版本匹配的厂商推送通道作为目标厂商推送通道返回给所述客户端。
这里,服务器在确定客户端的设备型号和设备版本与倾向厂商推送通道支持的设备型号和设备版本匹配时,可将倾向厂商推送通道作为目标厂商推送通道返回给客户端。在确定客户端的设备型号和设备版本与倾向厂商推送通道支持的设备型号和设备版本不匹配时,将从除倾向厂商推送通道外的其他厂商推送通道中选取的,与客户端的设备型号和设备版本匹配的厂商推送通道作为目标厂商推送通道返回给客户端。
此时,前端可将倾向的厂商推送通道发送给后端,由后端决定最终开启的厂商推送通道,增加了灵活性,且保证了厂商推送通道与客户端的匹配性。
可选的,向所述客户端返回双通道开启指示信息的情况下,所述方法还包括:
步骤85:判断推送消息对实时性的要求。
这里,客户端开启厂商推送通道和自建推送通道双通道之后,服务器判断推送消息对实时性的要求,以确定使用厂商推送通道还是自建推送通道。
步骤86:若推送消息具有实时性要求,则通过厂商推送通道向所述客户端推送所述推送消息。
这里,服务器对具有实时性要求的消息,通过厂商推送通道推送给客户端,以保证较高的到达率。
步骤87:若推送消息不具有实时性要求,则通过自建推送通道向所述客户端推送所述推送消息。
这里,服务器对一些不重要的、不具有实时性要求的消息,通过自建推送通道推送给客户端,节省了厂商额度。
当然,上述开启双通道时发送推送消息的方式仅为一种优选的实现方式,本发明实施例也可采用其他方式发送推送消息,例如,不区分消息的实时性要求,首先使用厂商推送通道发送推送消息,当厂商额度使用完时,动态切换到自建推送通道发送推送消息。
当然,利用步骤85-87的方式发送推送消息的情况下,当厂商额度使用完时,也可动态切换到自建推送通道发送推送消息,以保证推送消息的正常送到。
本发明实施例的消息推送方法,通过开启双通道推送模式,可对通道进行实时动态切换,提高了灵活性。
本发明实施例的消息推送方法,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,在厂商额度使用完的情况下,可动态切换到自建推送通道,同时发送消息时可以根据需要选择不同的通道;增加了推送的到达率,保证了业务推送消息能够最大可能地发送给用户,有利于应用程序导流。
图9是本发明实施例提供的应用于服务器的消息推送装置900的示意框图。参见图9所示,该消息推送装置900包括:
第二接收模块901,用于接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
第一判断模块902,用于根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式;
第一返回模块903,用于当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息;
第二返回模块904,用于当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
本发明实施例的消息推送装置900,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,两者之间可以互相切换,避免厂商推送通道额度很快消耗完,导致消息无法正常推送的问题。
可选的,所述第一返回模块903包括:
第一判断子模块,用于根据所述应用程序的信息,判断所述应用程序是否属于预设的推送通道消耗额度大的应用程序;
第一返回子模块,用于当所述应用程序属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回双通道开启指示信息;
第二返回子模块,用于当所述应用程序不属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回单通道开启指示信息。
可选的,所述第一判断模块902包括:
第二判断子模块,用于根据所述客户端设备信息,判断所述客户端与厂商推送通道支持的设备是否匹配;
确定子模块,用于若所述客户端与预设厂商推送通道集中的至少一个厂商推送通道支持的设备匹配,则确定所述客户端支持厂商推送方式,否则,确定所述客户端不支持厂商推送方式。
可选的,所述装置还包括:
第二判断模块,用于判断推送消息对实时性的要求;
第一推送模块,用于若推送消息具有实时性要求,则通过厂商推送通道向所述客户端推送所述推送消息;
第二推送模块,用于若推送消息不具有实时性要求,则通过自建推送通道向所述客户端推送所述推送消息。
本发明实施例的消息推送装置,采用通道协商的方式,由后端决定具体的通道,可大大提升灵活性和可动态切换的属性;且客户端除了开启厂商推送通道,也可以开启自建推送通道,形成双通道***,在厂商额度使用完的情况下,可动态切换到自建推送通道,同时发送消息时可以根据需要选择不同的通道;增加了推送的到达率,保证了业务推送消息能够最大可能地发送给用户,有利于应用程序导流。
对于上述装置实施例而言,由于其与方法实施例基本相似,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,该电子设备可以是服务器。如图10所示,包括处理器1001、通信接口1002、存储器1003和通信总线1004,其中,处理器1001,通信接口1002,存储器1003通过通信总线1004完成相互间的通信。
存储器1003,用于存放计算机程序。
处理器1001用于执行存储器1003上所存放的程序时,实现如下步骤:
接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息;
根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式;
当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息;
当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的消息推送方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的消息推送方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,包含在本发明的保护范围内。
Claims (12)
1.一种消息推送方法,其特征在于,包括:
客户端向服务器发送推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
所述服务器接收所述推送通道协商请求;
所述服务器根据所述客户端设备信息和所述应用程序的信息,判断所述客户端开启双通道或单通道,并根据判断结果向所述客户端返回通道开启指示信息;
所述客户端接收所述通道开启指示信息;
所述客户端根据所述通道开启指示信息,开启厂商推送通道和/或自建推送通道。
2.根据权利要求1所述的消息推送方法,其特征在于,所述客户端开启厂商推送通道和自建推送通道之后,所述方法还包括:
所述客户端获取厂商推送服务器返回的第一注册令牌;
所述客户端获取自建推送服务器返回的第二注册令牌;
所述客户端通过同步队列,将所述第一注册令牌和所述第二注册令牌上传给所述服务器;
所述服务器通过所述第一注册令牌调用厂商推送通道向所述客户端发送推送消息;
所述服务器通过所述第二注册令牌调用自建推送通道向所述客户端发送推送消息。
3.根据权利要求1所述的消息推送方法,其特征在于,所述客户端向服务器发送推送通道协商请求之后,所述方法还包括:
所述服务器获取与所述客户端匹配的目标厂商推送通道;
所述服务器将所述目标厂商推送通道发送给所述客户端;
所述客户端接收所述目标厂商推送通道;
所述客户端开启厂商推送通道的步骤包括:
所述客户端开启所述目标厂商推送通道。
4.一种消息推送方法,其特征在于,应用于客户端,包括:
向服务器发送推送通道协商请求,所述推送通道协商请求携带有所述客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
接收所述服务器根据所述客户端设备信息和所述应用程序的信息,判断所述客户端开启双通道或单通道,并根据判断结果向所述客户端返回的通道开启指示信息;
当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道;
当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
5.根据权利要求4所述的消息推送方法,其特征在于,开启厂商推送通道和自建推送通道的情况下,所述方法还包括:
获取厂商推送服务器返回的第一注册令牌;
获取自建推送服务器返回的第二注册令牌;
将第一线程加入到同步队列中,所述第一线程用于执行上传所述第一注册令牌到所述服务器;
将第二线程加入到同步队列中,所述第二线程用于执行上传所述第二注册令牌到所述服务器;
按照加入的先后顺序依次执行所述同步队列中的线程。
6.根据权利要求5所述的消息推送方法,其特征在于,所述按照加入的先后顺序依次执行所述同步队列中的线程的步骤包括:
设置抽象队列同步器的头节点指向所述同步队列中最先加入的线程,尾节点指向所述同步队列中最后加入的线程;
触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态;其中所述同步锁在当前线程没有执行完时处于锁定状态,且任何线程执行时需要获得所述同步锁;
当所述头节点指向的线程执行完成后,释放所述同步锁,将执行完成的线程从所述同步队列中移除,并设置所述头节点指向移除后的同步队列中最先加入的线程,之后返回所述触发所述头节点指向的线程获得同步锁,执行所述头节点指向的线程,并设置同步锁处于锁定状态的步骤。
7.一种消息推送装置,其特征在于,应用于客户端,包括:
第一发送模块,用于向服务器发送推送通道协商请求,所述推送通道协商请求携带有所述客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
第一接收模块,用于接收所述服务器根据所述客户端设备信息和所述应用程序的信息,判断所述客户端开启双通道或单通道,并根据判断结果向所述客户端返回的通道开启指示信息;
第一开启模块,用于当所述通道开启指示信息指示开启双通道时,开启厂商推送通道和自建推送通道;
第二开启模块,用于当所述通道开启指示信息指示开启单通道时,开启厂商推送通道或者自建推送通道。
8.一种消息推送方法,其特征在于,包括:
接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式;
当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息;
当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
9.根据权利要求8所述的消息推送方法,其特征在于,所述根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息的步骤包括:
根据所述应用程序的信息,判断所述应用程序是否属于预设的推送通道消耗额度大的应用程序;
当所述应用程序属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回双通道开启指示信息;
当所述应用程序不属于预设的推送通道消耗额度大的应用程序时,向所述客户端返回单通道开启指示信息。
10.根据权利要求8或9所述的消息推送方法,其特征在于,所述根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式的步骤包括:
根据所述客户端设备信息,判断所述客户端与厂商推送通道支持的设备是否匹配;
若所述客户端与预设厂商推送通道集中的至少一个厂商推送通道支持的设备匹配,则确定所述客户端支持厂商推送方式,否则,确定所述客户端不支持厂商推送方式。
11.根据权利要求8或9所述的消息推送方法,其特征在于,向所述客户端返回双通道开启指示信息的情况下,所述方法还包括:
判断推送消息对实时性的要求;
若推送消息具有实时性要求,则通过厂商推送通道向所述客户端推送所述推送消息;
若推送消息不具有实时性要求,则通过自建推送通道向所述客户端推送所述推送消息。
12.一种消息推送装置,其特征在于,包括:
第二接收模块,用于接收客户端发送的推送通道协商请求;所述推送通道协商请求携带有客户端设备信息和应用程序的信息,所述应用程序为所述客户端上安装的应用程序;
第一判断模块,用于根据所述客户端设备信息,判断所述客户端是否支持厂商推送方式;
第一返回模块,用于当所述客户端支持厂商推送方式时,根据所述应用程序的信息,向所述客户端返回双通道开启指示信息或者单通道开启指示信息;
第二返回模块,用于当所述客户端不支持厂商推送方式时,向所述客户端返回自建推送通道单通道开启指示信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110713583.2A CN113452777B (zh) | 2021-06-25 | 2021-06-25 | 一种消息推送方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110713583.2A CN113452777B (zh) | 2021-06-25 | 2021-06-25 | 一种消息推送方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113452777A CN113452777A (zh) | 2021-09-28 |
CN113452777B true CN113452777B (zh) | 2022-11-04 |
Family
ID=77812939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110713583.2A Active CN113452777B (zh) | 2021-06-25 | 2021-06-25 | 一种消息推送方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113452777B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110932924A (zh) * | 2019-10-28 | 2020-03-27 | 深圳市钱海网络技术有限公司 | 一种用于app与服务器进行通信的消息推送方法及装置 |
CN111093159A (zh) * | 2019-12-23 | 2020-05-01 | 北京奇艺世纪科技有限公司 | 一种消息推送方法、装置、服务器及计算机可读存储介质 |
CN111241443A (zh) * | 2020-01-08 | 2020-06-05 | 北京字节跳动网络技术有限公司 | 用于推送信息的方法、装置和电子设备 |
CN111741058A (zh) * | 2020-05-07 | 2020-10-02 | 北京五八信息技术有限公司 | 一种消息推送方法、装置、电子设备及存储介质 |
CN111901440A (zh) * | 2020-08-11 | 2020-11-06 | 武汉伊科诺慧通软件有限公司 | 一种多通道消息推送方法及装置 |
CN112367345A (zh) * | 2020-09-14 | 2021-02-12 | 长沙市到家悠享网络科技有限公司 | 数据处理方法、服务端设备及计算机可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8634810B2 (en) * | 2011-09-29 | 2014-01-21 | International Business Machines Corporation | Pushing secure notifications to mobile computing devices |
-
2021
- 2021-06-25 CN CN202110713583.2A patent/CN113452777B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110932924A (zh) * | 2019-10-28 | 2020-03-27 | 深圳市钱海网络技术有限公司 | 一种用于app与服务器进行通信的消息推送方法及装置 |
CN111093159A (zh) * | 2019-12-23 | 2020-05-01 | 北京奇艺世纪科技有限公司 | 一种消息推送方法、装置、服务器及计算机可读存储介质 |
CN111241443A (zh) * | 2020-01-08 | 2020-06-05 | 北京字节跳动网络技术有限公司 | 用于推送信息的方法、装置和电子设备 |
CN111741058A (zh) * | 2020-05-07 | 2020-10-02 | 北京五八信息技术有限公司 | 一种消息推送方法、装置、电子设备及存储介质 |
CN111901440A (zh) * | 2020-08-11 | 2020-11-06 | 武汉伊科诺慧通软件有限公司 | 一种多通道消息推送方法及装置 |
CN112367345A (zh) * | 2020-09-14 | 2021-02-12 | 长沙市到家悠享网络科技有限公司 | 数据处理方法、服务端设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
消息推送技术研究与未来展望;姜翔;《电信网技术》;20180415(第04期);第73-75页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113452777A (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10805363B2 (en) | Method, device and system for pushing file | |
WO2019109513A1 (zh) | 一种资源更新方法、***、电子设备及介质 | |
US8190857B2 (en) | Deleting a shared resource node after reserving its identifier in delete pending queue until deletion condition is met to allow continued access for currently accessing processor | |
CN111580995A (zh) | 基于mqtt异步通信场景下的分布式云平台与物联网智能终端的同步通信方法与*** | |
CN113485822A (zh) | 内存管理方法、***、客户端、服务器及存储介质 | |
CN109254913B (zh) | 设备共享方法、装置、电子设备及计算机存储介质 | |
CN111510350B (zh) | 基于多信道的数据分时采集方法及装置 | |
CN113747406B (zh) | 蓝牙连接方法、装置、蓝牙设备及存储介质 | |
CN109787884B (zh) | 一种消息推送方法和装置 | |
WO2021042612A1 (zh) | 无线投屏方法、装置、设备及存储介质 | |
CN113452777B (zh) | 一种消息推送方法及装置 | |
CN113452770B (zh) | 数据同步方法、装置、计算机设备及存储介质 | |
CN109600254A (zh) | 全链路日志的生成方法及相关*** | |
US20240243978A1 (en) | Operation and maintenance method and apparatus, system, server, electronic device, and medium | |
CN111092956A (zh) | 资源同步方法、装置、存储介质及设备 | |
CN109086107B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN113268327A (zh) | 事务请求的处理方法、装置和电子设备 | |
CN111147568A (zh) | 身份数据的同步方法及装置 | |
JPH09114750A (ja) | バス制御装置 | |
CN114885393B (zh) | 一种设备入网的控制方法、装置及终端设备 | |
CN112822238B (zh) | 一种主节点的切换方法以及计算机可读存储介质 | |
KR100617831B1 (ko) | Ieee 1394 네트워크에서 전송되는 스트림 수신을 위한자동 채널 선택 방법 | |
CN112163895A (zh) | 基于异步编程的高并发广告投放方法、装置、设备和*** | |
US20020083135A1 (en) | Memory management for optimal storage of data of any size in memory | |
CN116828026A (zh) | 一种PCIe设备访问方法、通信***、装置及电子设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |