CN115225416A - 广播消息的方法、装置、电子设备及存储介质 - Google Patents

广播消息的方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN115225416A
CN115225416A CN202110417294.8A CN202110417294A CN115225416A CN 115225416 A CN115225416 A CN 115225416A CN 202110417294 A CN202110417294 A CN 202110417294A CN 115225416 A CN115225416 A CN 115225416A
Authority
CN
China
Prior art keywords
message
service
broadcasting
broadcast
class
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.)
Granted
Application number
CN202110417294.8A
Other languages
English (en)
Other versions
CN115225416B (zh
Inventor
张磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shenzhou Digital Cloud Information Technology Co ltd
Shenzhou Kuntai Xiamen Information Technology Co ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN202110417294.8A priority Critical patent/CN115225416B/zh
Publication of CN115225416A publication Critical patent/CN115225416A/zh
Application granted granted Critical
Publication of CN115225416B publication Critical patent/CN115225416B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明实施例公开了一种广播消息的方法、装置、电子设备及存储介质。该方法包括:在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。本发明实施例的技术方案,解决了现有的广播消息的方法中存在广播消息资源开销较大、广播消息效率较低的技术问题,实现了降低广播消息资源开销,从而提升广播消息效率。

Description

广播消息的方法、装置、电子设备及存储介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种广播消息的方法、装置、电子设备及存储介质。
背景技术
现有技术中,广播消息的方法通常是,先构建接收方和发送方之间的单点连接,然后基于构建的接收方和发送方之间的单点连接对消息进行广播,在消息广播完成时,关闭接收方和发送方的之间连接,存在广播服务实现方法的复杂度较高。随着广播消息的数量的增多,每广播一次消息都需要重新构建接收方和发送方之间的连接,存在广播消息资源开销较大、广播消息效率较低的技术问题。
发明内容
本发明实施例提供了一种广播消息的方法、装置、电子设备及存储介质,以实现了降低广播消息资源开销,从而提升广播消息效率。
第一方面,本发明实施例提供了一种广播消息的方法,该方法包括:
在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;
当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;
当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
第二方面,本发明实施例还提供了一种广播消息的装置,该装置包括:
业务消息监听模块,用于在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;
业务消息广播模块,用于当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;
资源释放模块,用于当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述程序被所述处理器执行,使得所述处理器实现如本发明任意实施例所提供的广播消息的方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的广播消息的方法。
本实施例的技术方案,通过在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听业务中的业务消息。通过业务消息初始化复写方法封装于预先定义广播服务类中,可以便于代码的管理。当监听到业务消息时,则将业务消息传递于预先构建的消息体,调用广播服务类中的预先定义的消息广播方法,将消息体携带的业务消息进行广播。通过消息广播方法将消息体携带的业务消息进行广播,实现了降低代码的耦合度。当业务消息广播完成时,则调用广播服务类的业务消息销毁复写方法,将业务占用的资源进行释放,解决了现有的广播消息的方法中存在广播消息资源开销较大、广播消息效率较低的技术问题,实现了降低广播消息资源开销,从而达到提升广播消息效率的技术效果。
附图说明
为了更加清楚地说明本发明示例性实施例的技术方案,下面对描述实施例中所需要用到的附图做一简单介绍。显然,所介绍的附图只是本发明所要描述的一部分实施例的附图,而不是全部的附图,对于本领域普通技术人员,在不付出创造性劳动的前提下,还可以根据这些附图得到其他的附图。
图1是本发明实施例一提供的一种广播消息的方法流程示意图;
图2是本发明实施例二提供的一种广播消息的方法流程示意图;
图3是本发明实施例三提供的一种广播消息的方法流程示意图;
图4是本发明实施例四提供的一种广播消息的装置模块示意图;
图5是本发明实施例五提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1是本发明实施例一提供的一种广播消息的方法流程示意图,本实施例可适用于通过广播服务类对业务中的业务消息进行广播的情况,该方法可以由广播消息的装置来执行,广播消息的装置可通过软件和/或硬件方式实现,该广播消息的装置可集成于诸如计算机或者服务器等的电子设备中。
如图1所示,本实施例的方法包括:
S110、在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息。
其中,业务可以理解为应用程序提供的服务。具体的,应用程序提供的服务可以包括应用程序启动服务、应用程序关闭服务、用户登录服务、用户注册服务以及支付服务,即,业务可以包括应用程序启动业务、应用程序关闭业务、用户登录业务、用户注册业务以及支付业务。业务启动可以理解为应用程序提供的服务被触发。业务启动的方式可以是,用户通过点击业务控件启动业务,也就是说,用户通过点击业务控件启动应用程序提供的服务。
其中,业务消息可以是业务启动时或业务启动后产生的消息。具体的,在检测到业务启动时,或者是,在业务启动后,生成业务消息。示例性的,业务为应用程序启动业务,那么,当检测到应用程序启动业务时,则可以生成应用程序启动消息。业务消息可以用于传递数据和/或通知当前时刻发生的事件。数据传递或事件通知。业务消息的应用场景可以包括:客户端应用之间的信息通信、不同程序之间的数据传输、组件之间的信息通信等等。业务与业务消息之间的对应关系可以是一个业务对应一个业务消息,可以是一个业务对应多个业务消息。
其中,广播服务类可以是预先定义的类,可以用于监听业务消息的生命周期,即监听业务消息的产生、传递以及销毁。广播服务类的父类可以是系统的上下文监听器(ServletContextListener)。广播服务类的父类可以是系统的上下文监听器可以理解为,广播服务类继承系统的上下文监听器。由于广播服务类继承系统的上下文监听器,因此,广播服务类可以拥有父类的方法和属性,同时,广播服务类可以复写父类中的方法。广播服务类继承系统的上下文监听器的方法可以是,基于继承标识符,广播服务类继承上下文监听器。示例性的,广播服务类可以为class BroadcastServer:ServletContextListener{}。
其中,广播服务类中可以包括一个、两个或两个以上的方法。将方法封装于预先定义的类,即,得到广播服务类。那么预先定义广播服务类的好处在于:将广播业务的代码进行了有效的封装,提高了代码的复用性,便于后续对代码的维护。
其中,业务消息初始化复写方法预先复写的方法,可以用于监听业务中的是否产生业务消息。业务消息初始化复写方法的定义可以是,通过复写关键字将系统的上下文监听器中的业务消息初始化方法进行复写。
示例性的,系统的上下文监听器中的业务消息初始化方法为funcontextInitialized(sce:ServletContextEvent?){},业务消息初始化复写方法为override fun contextInitialized(sce:ServletContextEvent?){}。
为了将广播服务类接入到系统的消息总线中,可以为广播服务类预先设置类注解。其中,类注解可以是@WebListener。类注解可以用于表征广播服务类可以注册到系统的消息总线中,以及可以监听业务消息。
具体的,预先定义广播服务类。预先在广播服务类中复写系统的上下文监听器中业务消息初始化方法,即,预先在广播服务类中定义业务消息初始化复写方法。在监测到应用程序提供的服务触发时,可以调用预先在广播服务类中复写系统的上下文监听器中业务消息初始化方法,即,可以执行广播服务类中复写系统的上下文监听器中业务消息初始化方法。当广播服务类中复写系统的上下文监听器中业务消息初始化方法执行完成时,可以监听应用程序提供的服务是否产生消息,即,监听业务中的业务消息。
S120、当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播。
其中,消息体可以是预先构建的消息载体,可以用于承载业务消息。为了提高构建消息体的效率,本实施例中,构建消息体的方法可以是,基于实例化语句,对预先定义的广播对象管理类进行实例化,以构建消息体。
其中,广播对象管理类可以是BroadcastBean类。实例化语句可以是初始化为空的语句。实例化语句可以用于对预先定义的广播对象管理类进行实例化。本发明实施例中,通过对广播对象管理类进行实例化,构建消息体。其中,对广播对象管理类进行实例化可以是,基于广播对象管理类,创建广播对象管理类型的广播消息载体对象。
为了提高消息体的安全性,可以将广播消息载体对象的对象属性设置为私有类型。为了提高代码的复用性,可以将广播消息载体对象定义为全局变量且将广播消息载体对象初始化为空。示例性的,广播对象管理类为BroadcastBean,广播消息载体对象的创建方法可以是private var broadcastBean:BroadcastBean?=null。
为了避免消息传递中出现异常,本发明实施例中,在构建消息体之前,还可以,判断广播消息载体对象中存储的信息是否为空。通过判断广播消息载体对象中存储的信息是否为空,确定消息体是否构建完成。
具体的,当广播消息载体对象中存储的信息为空时,则基于广播消息载体对象构建消息体。当广播消息载体对象中存储的信息不为空时,则将存储信息不为空的广播消息载体对象作为消息体。示例性的,通过if判断语句,确定广播消息载体对象中存储的信息(broadcastBean)是否为空,即,if(broadcastBean==null)。
其中,消息广播方法可以是预先定义的方法,可以用于将消息体携带的业务消息进行广播。示例性的,消息广播方法可以为fun broadcastInfo(){NetworkUtil.send(msgByte);}。
具体的,在广播服务类中预先定义消息广播方法。当监听到业务消息时,可以将业务消息传递于预先构建的消息体,也就是说,将业务消息赋值于预先构建的消息体。在检测到预先构建的消息体携带业务消息时,可以根据广播服务类中预先定义消息广播方法,将消息体携带的业务消息进行广播。
可选的,在将所述业务消息传递于预先构建的消息体之后,还可以是,通过所述预先构建的消息体,调用所述业务中的业务消息对应的消息存储方法,将所述消息体携带的业务消息存储至所述广播对象管理类对应的存储容器中。
其中,消息存储方法可以是预先定义的方法,可以用于将业务消息存储至预先构建的消息体中。消息存储方法的定义可以是基于Bean机制定义的方法。示例性的,消息存储方法可以是setIp()。消息存储方法的数量可以是一个、两个或两个以上。业务消息的数量可以是一个、两个或两个以上。业务消息与消息存储方法之间的对应关系可以是一个业务消息对应一个消息存储方法。示例性的,业务消息可以是应用程序的名称,那么,与业务消息为应用程序的名称对应的消息存储方法为setUser()。
其中,通过预先构建的消息体,调用业务中的业务消息对应的消息存储方法,可以是,预先建立业务消息与消息存储方法之间的对应关系。在检测到业务消息传递于预先构建的消息体之后,也就是说,在检测到预先构建的消息体接收到业务消息时,可以确定消息体承载的业务消息,即可以确定消息体携带的业务消息。当消息体承载的业务消息确定完成时,可以基于预先建立的业务消息与消息存储方法之间的对应关系,确定与消息体承载的业务消息对应的消息存储方法。当业务消息对应的消息存储方法确定完成时,可以通过预先构建的消息体,调用与业务消息对应的消息存储方法,即,调用业务中的业务消息对应的消息存储方法。
其中,存储容器可以是预先创建的容器。存储容器可以用于存储业务消息。广播对象管理类对应的存储容器可以理解为广播对象管理类型的存储容器。相应的,将消息体携带的业务消息存储至广播对象管理类对应的存储容器中,可以理解为,将消息体承载的业务消息存储至广播对象管理类型的存储容器中。
具体的,预先建立业务消息与消息存储方法之间的对应关系。在业务消息传递于预先构建的消息体之后,可以确定消息体承载的业务消息。可以根据消息体承载的业务消息,以及预先建立的业务消息与消息存储方法之间的对应关系,确定消息体承载的业务消息所对应的消息存储方法。当消息体承载的业务消息所对应的消息存储方法确定完成时,则可以通过预先构建的消息体,调用消息体承载的业务消息所对应的消息存储方法,也就是说,可以执行消息体承载的业务消息所对应的消息存储方法。在检测到消息体承载的业务消息所对应的消息存储方法执行完成时,可以将消息体携带的业务消息存储至广播对象管理类型的存储容器中。
为了提升业务消息传递的安全性,以及为了提高广播消息的虚拟化和序列化,本发明实施例中,通过Json对象对进行序列化和反序列化处理。具体的,在将所述消息体携带的业务消息进行广播之前,还包括:通过调用Json对象中的对象类型转换方法,将携带所述业务消息的消息体进行序列化,得到序列化对象;通过所述序列化对象调用目标类型转换方法,将所述序列化对象的类型转换为目标类型,得到目标类型的消息对象,将目标类型的消息对象作为所述消息体携带的业务消息。
其中,Json对象可以理解为Json类型的对象。Json类型的对象的实质是通过对Json类进行实例化,也就是说,将Json类中所包括的方法封装于Json类型的对象。示例性的,Json类型的对象可以为JSON。Json类型的对象定义的方法可以是,基于Json类创建Json类型的对象。Json类型的对象中方法的数量可以是一个、两个或两个以上。序列化对象可以是预定定义的对象。具体的,可以基于对象定义关键字(var),定义序列化对象。示例性的,序列化对象为msgStr。
其中,对象类型转换方法可以是toJSONString()。对象类型转换方法的入口参数可以是携带业务消息的消息体(如,broadcastBean)。对象类型转换方法可以用于将携带业务消息的消息体进行序列化。其中,序列化可以理解为将携带业务消息的消息体转换为序列化对象,也就是说,将携带业务消息的消息体转化为String类型的对象。
示例性的,序列化对象为msgStr,携带业务消息的消息体为broadcastBean,Json对象中的对象类型转换方法为toJSONString(),那么,通过调用Json对象中的对象类型转换方法,将携带业务消息的消息体进行序列化,得到序列化对象,可以是,val msgStr=JSON.toJSONString(broadcastBean)。
其中,目标类型可以是字节数组类型。其中,目标类型转换方法可以是toByteArray()。目标类型转换方法可以用于,将序列化对象的类型转换为字节数组类型。目标类型的消息对象可以是预先定义的对象,可以理解为字节数组类型的对象。字节数组类型的对象可以是承载字节类型的业务消息的消息体。
具体的,预先定义Json类,并在Json类中定义以以携带业务消息的消息体为入口参数对象类型转换方法。基于Json类创建Json类型的对象,即,Json对象。预先定义序列化对象。预先定义目标类型转换方法。预先定义目标类型的消息对象。在将消息体携带的业务消息进行广播之前,基于获取携带业务消息的消息体,可以将携带业务消息的消息体作为实际参数传递于对象类型转换方法的入口参数,也就是说,将携带业务消息的消息体作为实际参数传递于对象类型转换方法的形式参数。
具体的,在检测到对象类型转换方法的形式参数接收到实际参数时,可以通过Json对象调用Json类中定义对象类型转换方法,也就是说,执行Json类中定义对象类型转换方法。当Json类中定义对象类型转换方法执行完成时,可以将携带业务消息的消息体转化为String类型的对象。在检测到携带业务消息的消息体转化为String类型的对象时,将String类型的对象赋值于预先定义的序列化对象。
具体的,在检测到String类型的对象赋值于预先定义的序列化对象完成时,可以通过序列化对象调用目标类型转换方法,也就是说,执行序列化对象中的目标类型转换方法,在检测到序列化对象中的目标类型转换方法执行完成时,可以将序列化对象的类型转换为目标类型,也就是说,将序列化对象的类型转换为字节数组类型。
具体的,在检测到序列化对象的类型转换为字节数组类型完成时,可得到字节数组类型的对象。在得到字节数组类型的对象时,可以将字节数组类型的对象赋值于预先定义的目标类型的消息对象。当字节数组类型的对象赋值于预先定义的目标类型的消息对象完成时,则可以将目标类型的消息对象作为消息体携带的业务消息。
为了提高程序的稳健性,在通过调用Json对象中的对象类型转换方法,将携带业务消息的消息体进行序列化之前,可以基于if判断语句,对携带业务消息的消息体进行判断。具体的,对携带业务消息的消息体进行判断可以是,判断消息体中携带的业务消息的内容是否为空。这样设置好处在于可以避免因为业务消息未成功传递于消息体而导致程序执行出现异常。
可选的,在得到目标类型的消息对象之后,所述将所述消息体携带的业务消息进行广播,包括:接收所述目标类型的消息对象;调用以所述目标类型的消息对象作为入口参数的消息发送方法,将所述业务消息进行广播。
其中,消息发送方法可以是预先定义的方法,可以用于广播业务消息。消息发送方法的入口参数可以是目标类型的消息对象。
具体的,预先定义以目标类型的消息对象作为入口参数的消息发送方法。在得到目标类型的消息对象之后,消息体可以接收目标类型的消息对象。在检测到消息体接收到目标类型的消息对象时,可以将接收到的目标类型的消息对象作为实际参数,传递于预先定义的消息发送方法的入口参数。在检测到消息发送方法的入口参数接收到实际参数时,可以调用消息发送方法,也就是说,可以执行消息发送方法。当检测到消息发送方法执行完成时,则可以将消息体携带的业务消息进行广播。
S130、当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
其中,业务消息销毁复写方法可以是预先复写的方法,可以用于将业务占用的资源进行释放。业务消息销毁复写方法的定义可以是,通过复写关键字将系统的上下文监听器中的业务消息销毁方法进行复写。
示例性的,系统的上下文监听器中的业务消息销毁方法为fun contextDestroyed(sce:ServletContextEvent?){},业务消息销毁复写方法为override funcontextDestroyed(sce:ServletContextEvent?){}。
其中,业务占用的资源可以包括:CPU资源、内存资源、硬盘资源和网络资源等。其中,CPU表征中央处理器。将业务占用的资源进行释放可以理解为断开业务与资源之间的连接。
为了提升程序代码的执行效率,在调用广播服务类的业务消息销毁复写方法,将业务占用的资源进行释放之前,可以确定业务占用的资源。
具体的,在广播服务类中预先复写系统的上下文监听器中的业务消息销毁方法,即,在广播服务类中预先定义业务消息销毁复写方法。当业务消息广播完成时,则可以确定业务占用的资源。在业务占用的资源确定完成时,可以可以调用广播服务类中预先定义的业务消息销毁复写方法,也就是说,可以执行广播服务类中预先定义的业务消息销毁复写方法。在检测到广播服务类中预先定义的业务消息销毁复写方法执行完成时,可以断开业务与业务占用的资源之间的连接,即将业务占用的资源进行释放。
本实施例的技术方案,通过在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听业务中的业务消息。通过业务消息初始化复写方法封装于预先定义广播服务类中,可以便于代码的管理。当监听到业务消息时,则将业务消息传递于预先构建的消息体,调用广播服务类中的预先定义的消息广播方法,将消息体携带的业务消息进行广播。通过消息广播方法将消息体携带的业务消息进行广播,实现了降低代码的耦合度。当业务消息广播完成时,则调用广播服务类的业务消息销毁复写方法,将业务占用的资源进行释放,解决了现有的广播消息的方法中存在广播消息资源开销较大、广播消息效率较低的技术问题,实现了降低广播消息资源开销,从而达到提升广播消息效率的技术效果。
实施例二
图2是本发明实施例二提供的一种广播消息的方法流程示意图,在前述实施例的基础上,可选地,在调用所述广播服务类中的预先定义的消息广播方法之前,还包括:判断所述业务消息是否成功传递至所述预先构建的消息体,若是,则执行调用所述广播服务类中的预先定义的消息广播方法的操作;若否,则重新执行将所述消息传递于预先构建的消息体的操作,和/或展示用于提示所述业务消息传递失败的提示信息。
其中,与上述实施例相同或者相应的技术术语在此不再赘述。
如图2所示,本实施例的方法具体可包括:
S210、在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息,当监听到所述业务消息时,则执行S220。
S220、将所述业务消息传递于预先构建的消息体。
S230、判断所述业务消息是否成功传递至所述预先构建的消息体,若否,则重新执行S220,和/或执行S240;若是,则执行S250。
其中,判断业务消息是否成功传递至预先构建的消息体的方法可以是,基于if判断语句,将消息体非空的语句作为if判断语句的表达式语句,根据if判断语句的表达式语句,判断业务消息是否成功传递至预先构建的消息体。
示例性的,消息体为broadcastBean,将消息体非空的语句作为if判断语句的表达式语句可以是,broadcastBean!=null,那么,if判断语句可以为if(broadcastBean!=null)。
具体的,预先建立业务消息是否成功传递至预先构建的消息体的判断结果与执行步骤之间的对应关系。基于if判断语句,将消息体非空的语句作为if判断语句的表达式语句。根据if判断语句的表达式语句,判断业务消息是否成功传递至预先构建的消息体,得到判断结果。根据判断结果,以及根据预先建立的业务消息是否成功传递至预先构建的消息体的判断结果与执行步骤之间的对应关系,执行与判断结果对应的执行步骤。
S240、展示用于提示所述业务消息传递失败的提示信息。
其中,提示信息可以用于提示开发人员业务消息传递失败。展示提示信息的形式可以基于代码编辑工具界面弹出提示窗口,也可以是,将业务消息传递失败对应的程序代码的颜色标记为预设提示颜色。需要说明的是,本实施例中,关于展示提示信息的形式在此不做限定。
具体的,预先设置展示提示信息的形式。当业务消息未成功传递至预先构建的消息体时,则可以基于预先设置的展示提示信息的形式,将业务消息传递失败的提示信息进行展示,以便于开发人员及时调试代码。
S250、调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播。
S260、当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
本实施例的技术方案,通过判断业务消息是否成功传递至预先构建的消息体,若是,则执行调用广播服务类中的预先定义的消息广播方法的操作;若否,则重新执行将消息传递于预先构建的消息体的操作,和/或展示用于提示业务消息传递失败的提示信息,解决了现有技术中,广播消息方法中存在广播消息时消息内容为空的技术问题,达到提高了业务消息广播的质量和保证了广播消息的真实性的技术效果。
实施例三
图3是本发明实施例三提供的一种广播消息的方法流程示意图,在前述实施例的基础上,可选地,所述调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播,包括:基于预设的定时任务调度注解,确定调用所述消息广播方法的时间间隔;根据所述时间间隔,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播。
其中,与上述实施例相同或者相应的技术术语在此不再赘述。
如图3所示,本实施例的方法具体可包括:
S310、在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息。
S320、当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,基于预设的定时任务调度注解,确定调用所述消息广播方法的时间间隔。
其中,定时任务调度注解可以是预先设置的方法注解,可以用于设置调用消息广播方法的时间间隔。调用消息广播方法的时间间隔可以根据际需求设置,如,5分钟。示例性的,定时任务调度注解可以是@Scheduled,消息广播方法的调用间隔时长为5分钟,那么,消息广播方法的定时任务调度注解为:@Scheduled(cron="*/5****?"),其中,cron是设置定时执行的表达式,如00/5***?每隔五分钟执行一次。
为了使定时任务调度注解对应的功能生效,可以为广播服务类添加@EnableScheduling注解。为广播服务类添加@EnableScheduling注解的好处在于便于使用系统特性来实现智能化的定时器功能。示例性的,广播服务类为class BroadcastServer:ServletContextListener{},为广播服务类添加@EnableScheduling注解,那么,添加@EnableScheduling注解广播服务类可以为:
@EnableScheduling
class BroadcastServer:ServletContextListener{}
具体的,预先定义消息广播方法,预先设置消息广播方法的定时任务调度注解。预先为广播服务类添加@EnableScheduling注解。当监听到业务消息时,可以将业务消息传递于预先构建的消息体。在检测到消息体接收到业务消息时,可以基于广播服务类添加@EnableScheduling注解,以及预先设置的消息广播方法的定时任务调度注解,可以确定调用消息广播方法的时间间隔。
示例性的,消息广播方法可以是fun broadcastInfo(){}。消息广播方法的定时任务调度注解为:@Scheduled(cron="*/5****?")。那么,为消息广播方法设置定时任务调度注解为:
@Scheduled(cron="*/5****?")
fun broadcastInfo(){}
S330、根据所述时间间隔,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播。
具体的,在广播服务类中预先定义消息广播方法。在检测到预先构建的消息体接收到业务消息,且调用消息广播方法的时间间隔确定完成时,可以根据调用消息广播方法的时间间隔,调用广播服务类中的消息广播方法,也就是说,根据调用消息广播方法的时间间隔,执行广播服务类中的消息广播方法。在检测到广播服务类中的消息广播方法执行完成时,可以将消息体携带的业务消息进行广播。
S340、当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
本实施例的技术方案,通过基于预设的定时任务调度注解,确定调用消息广播方法的时间间隔;根据时间间隔,调用广播服务类中的预先定义的消息广播方法,将消息体携带的业务消息进行广播,解决了现有技术中,广播消息方法中存在定时广播消息复杂度较高的技术问题,实现降低了定时广播消息复杂度,以及降低代码的复杂性,达到了更加智能化广播消息的技术效果。
实施例四
图4是本发明实施例四提供的一种广播消息的装置模块示意图,本发明提供了一种广播消息的装置,该装置包括:业务消息监听模块410、业务消息广播模块420和资源释放模块430。
其中,业务消息监听模块410,用于在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;业务消息广播模块420,用于当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;资源释放模块430,用于当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
本实施例的技术方案,通过业务消息监听模块在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听业务中的业务消息。通过业务消息初始化复写方法封装于预先定义广播服务类中,可以便于代码的管理。通过业务消息广播模块当监听到业务消息时,则将业务消息传递于预先构建的消息体,调用广播服务类中的预先定义的消息广播方法,将消息体携带的业务消息进行广播。通过消息广播方法将消息体携带的业务消息进行广播,实现了降低代码的耦合度。通过资源释放模块当业务消息广播完成时,则调用广播服务类的业务消息销毁复写方法,将业务占用的资源进行释放,解决了现有的广播消息的方法中存在广播消息资源开销较大、广播消息效率较低的技术问题,实现了降低广播消息资源开销,从而达到提升广播消息效率的技术效果。
可选的,在将所述消息体携带的业务消息进行广播之前,该装置还包括:目标类型的消息对象得到模块,用于通过调用Json对象中的对象类型转换方法,将携带所述业务消息的消息体进行序列化,得到序列化对象;通过所述序列化对象调用目标类型转换方法,将所述序列化对象的类型转换为目标类型,得到目标类型的消息对象,将目标类型的消息对象作为所述消息体携带的业务消息。
可选的,在得到目标类型的消息对象之后,业务消息广播模块420,用于接收所述目标类型的消息对象;调用以所述目标类型的消息对象作为入口参数的消息发送方法,将所述业务消息进行广播。
可选的,在调用所述广播服务类中的预先定义的消息广播方法之前,该装置还包括:消息传递判断模块,用于判断所述业务消息是否成功传递至所述预先构建的消息体,若是,则执行调用所述广播服务类中的预先定义的消息广播方法的操作;若否,则重新执行将所述消息传递于预先构建的消息体的操作,和/或展示用于提示所述业务消息传递失败的提示信息。
可选的,所述装置还包括:消息体构建模块,用于基于实例化语句,对预先定义的广播对象管理类进行实例化,以构建消息体。
可选的,在将所述业务消息传递于预先构建的消息体之后,该装置还包括:业务消息存储模块,用于通过所述预先构建的消息体,调用所述业务中的业务消息对应的消息存储方法,将所述消息体携带的业务消息存储至所述广播对象管理类对应的存储容器中。
可选的,业务消息广播模块420,用于基于预设的定时任务调度注解,确定调用所述消息广播方法的时间间隔;根据所述时间间隔,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播。
上述装置可执行本发明任意实施例所提供的广播消息的方法,具备执行广播消息的方法相应的功能模块和有益效果。
值得注意的是,上述广播消息的装置所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明实施例的保护范围。
实施例五
图5是本发明实施例五提供的一种电子设备的结构示意图。图5示出了适于用来实现本发明任一实施方式的示例性电子设备12的框图。图5显示的电子设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。设备12典型的是承担配置信息的处理的电子设备。
如图5所示,电子设备12以通用计算设备的形式表现。电子设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,存储器28,连接不同组件(包括存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture,ISA)总线,微通道体系结构(Micro Channel Architecture,MCA)总线,增强型ISA总线、视频电子标准协会(Video Electronics Standards Association,VESA)局域总线以及外围组件互连(Peripheral Component Interconnect,PCI)总线。
电子设备12典型地包括多种计算机可读介质。这些介质可以是任何能够被电子设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机装置可读介质,例如随机存取存储器(Random Access Memory,RAM)30和/或高速缓存存储器32。电子设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图5未显示,通常称为“硬盘驱动器”)。尽管图中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如只读光盘(Compact Disc-Read Only Memory,CD-ROM)、数字视盘(Digital Video Disc-Read Only Memory,DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品40,该程序产品40具有一组程序模块42,这些程序模块被配置以执行本发明各实施例的功能。程序产品40,可以存储在例如存储器28中,这样的程序模块42包括但不限于一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
电子设备12也可以与一个或多个外部设备14(例如键盘、鼠标、摄像头等和显示器)通信,还可与一个或者多个使得用户能与该电子设备12交互的设备通信,和/或与使得该电子设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,电子设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local Area Network,LAN),广域网WideArea Network,WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与电子设备12的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、磁盘阵列(Redundant Arrays of Independent Disks,RAID)装置、磁带驱动器以及数据备份存储装置等。
处理器16通过运行存储在存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明上述实施例所提供的广播消息的方法,该方法包括:
在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。当然,本领域技术人员可以理解,处理器还可以实现本发明任一实施例所提供的广播消息的方法。
实施例六
本发明实施例六还提供一种计算机可读存储介质,其上存储有计算机程序,特征在于,该程序被处理器执行时,例如本发明上述实施例所提供的广播消息的方法,该方法包括:
在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;
当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;
当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明实施例操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (10)

1.一种广播消息的方法,其特征在于,包括:
在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;
当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;
当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
2.根据权利要求1所述的方法,其特征在于,在将所述消息体携带的业务消息进行广播之前,还包括:
通过调用Json对象中的对象类型转换方法,将携带所述业务消息的消息体进行序列化,得到序列化对象;
通过所述序列化对象调用目标类型转换方法,将所述序列化对象的类型转换为目标类型,得到目标类型的消息对象,将目标类型的消息对象作为所述消息体携带的业务消息。
3.根据权利要求2所述的方法,其特征在于,在得到目标类型的消息对象之后,所述将所述消息体携带的业务消息进行广播,包括:
接收所述目标类型的消息对象;
调用以所述目标类型的消息对象作为入口参数的消息发送方法,将所述业务消息进行广播。
4.根据权利要求1所述的方法,其特征在于,在调用所述广播服务类中的预先定义的消息广播方法之前,还包括:
判断所述业务消息是否成功传递至所述预先构建的消息体,若是,则执行调用所述广播服务类中的预先定义的消息广播方法的操作;
若否,则重新执行将所述消息传递于预先构建的消息体的操作,和/或展示用于提示所述业务消息传递失败的提示信息。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于实例化语句,对预先定义的广播对象管理类进行实例化,以构建消息体。
6.根据权利要求5所述的方法,其特征在于,在将所述业务消息传递于预先构建的消息体之后,还包括:
通过所述预先构建的消息体,调用所述业务中的业务消息对应的消息存储方法,将所述消息体携带的业务消息存储至所述广播对象管理类对应的存储容器中。
7.根据权利要求1所述的方法,所述调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播,包括:
基于预设的定时任务调度注解,确定调用所述消息广播方法的时间间隔;
根据所述时间间隔,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播。
8.一种广播消息的装置,其特征在于,包括:
业务消息监听模块,用于在监测到业务启动时,调用预先定义的广播服务类的业务消息初始化复写方法,监听所述业务中的业务消息;
业务消息广播模块,用于当监听到所述业务消息时,则将所述业务消息传递于预先构建的消息体,调用所述广播服务类中的预先定义的消息广播方法,将所述消息体携带的业务消息进行广播;
资源释放模块,用于当所述业务消息广播完成时,则调用所述广播服务类的业务消息销毁复写方法,将所述业务占用的资源进行释放。
9.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述程序被所述处理器执行,使得所述处理器实现如权利要求1-7中任一所述的广播消息的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的广播消息的方法。
CN202110417294.8A 2021-04-19 2021-04-19 广播消息的方法、装置、电子设备及存储介质 Active CN115225416B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110417294.8A CN115225416B (zh) 2021-04-19 2021-04-19 广播消息的方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110417294.8A CN115225416B (zh) 2021-04-19 2021-04-19 广播消息的方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN115225416A true CN115225416A (zh) 2022-10-21
CN115225416B CN115225416B (zh) 2024-05-17

Family

ID=83605630

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110417294.8A Active CN115225416B (zh) 2021-04-19 2021-04-19 广播消息的方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115225416B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050008080A (ko) * 2003-07-14 2005-01-21 삼성전자주식회사 트래픽 채널 상태에서의 방송 서비스 제공 시스템 및 방법
CN102195855A (zh) * 2010-03-17 2011-09-21 华为技术有限公司 一种业务路由方法和业务网络
CN108540515A (zh) * 2017-03-06 2018-09-14 腾讯科技(深圳)有限公司 一种数据处理方法及服务器
CN109710425A (zh) * 2018-12-19 2019-05-03 北京金山安全软件有限公司 一种消息监听方法和装置
CN112579148A (zh) * 2020-12-17 2021-03-30 广州虎牙科技有限公司 基于业务代理的业务消息处理方法、装置及电子设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050008080A (ko) * 2003-07-14 2005-01-21 삼성전자주식회사 트래픽 채널 상태에서의 방송 서비스 제공 시스템 및 방법
CN102195855A (zh) * 2010-03-17 2011-09-21 华为技术有限公司 一种业务路由方法和业务网络
CN108540515A (zh) * 2017-03-06 2018-09-14 腾讯科技(深圳)有限公司 一种数据处理方法及服务器
CN109710425A (zh) * 2018-12-19 2019-05-03 北京金山安全软件有限公司 一种消息监听方法和装置
CN112579148A (zh) * 2020-12-17 2021-03-30 广州虎牙科技有限公司 基于业务代理的业务消息处理方法、装置及电子设备

Also Published As

Publication number Publication date
CN115225416B (zh) 2024-05-17

Similar Documents

Publication Publication Date Title
CN109815025B (zh) 一种业务模型调用方法、装置及存储介质
US11294740B2 (en) Event to serverless function workflow instance mapping mechanism
WO2021057925A1 (zh) 智能设备的控制方法、装置以及智能设备、存储介质
CN111737022A (zh) 一种基于微服务的接口调用方法、系统、设备及介质
CN108595331B (zh) 异步接口的测试方法、介质、装置和计算设备
CN110457132B (zh) 一种功能对象的创建方法、装置和终端设备
CN114398179B (zh) 一种跟踪标识的获取方法、装置、服务器及存储介质
CN110704131B (zh) 一种html5应用调用原生应用的方法和装置
CN116700907B (zh) 服务调用需求文档存储方法、装置、电子设备和可读介质
CN106911784B (zh) 一种执行异步事件的方法和装置
CN113127775B (zh) 一种页面加载方法、装置、设备和存储介质
CN115225416B (zh) 广播消息的方法、装置、电子设备及存储介质
CN111427710B (zh) 应用程序中组件的通信方法、装置、设备及存储介质
CN108848398B (zh) 一种本地弹幕消息的分发方法、装置、终端和存储介质
CN113852835A (zh) 直播音频处理方法、装置、电子设备以及存储介质
CN112596824A (zh) 信息交互方法、装置、电子设备以及存储介质
CN113448742B (zh) 一种接口数据采集方法和装置
CN113312120B (zh) 在虚拟机中执行c++任务的方法、装置、电子设备及介质
CN113377621B (zh) 一种数据监听方法、装置、存储介质及电子设备
US11150966B1 (en) Managing toast notifications via a toast adapter and plugins
CN113485770B (zh) 业务配置数据的确定方法、装置、电子设备及存储介质
CN114610416A (zh) 一种基于配置参数的数据处理方法及装置
CN110865892A (zh) 一种调用接口的检测方法、装置、存储介质及电子设备
CN115437610A (zh) 实现可观测性的方法及装置、可读存储介质、电子设备
CN116610465A (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
TA01 Transfer of patent application right

Effective date of registration: 20240423

Address after: Room 301, 3rd floor, 9 shangdijiu street, Haidian District, Beijing

Applicant after: Beijing Shenzhou Digital Cloud Information Technology Co.,Ltd.

Country or region after: China

Applicant after: Shenzhou Kuntai (Xiamen) Information Technology Co.,Ltd.

Address before: 430070 room 007, A301, third floor, building B1, software industry phase 4.1, No. 1, Software Park East Road, Donghu New Technology Development Zone, Wuhan City, Hubei Province (Wuhan area of free trade zone)

Applicant before: WUHAN DOUYU YULE NETWORK TECHNOLOGY Co.,Ltd.

Country or region before: China

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant