CN115514746A - 即时通信方法、装置、系统、设备和存储介质 - Google Patents

即时通信方法、装置、系统、设备和存储介质 Download PDF

Info

Publication number
CN115514746A
CN115514746A CN202211150990.8A CN202211150990A CN115514746A CN 115514746 A CN115514746 A CN 115514746A CN 202211150990 A CN202211150990 A CN 202211150990A CN 115514746 A CN115514746 A CN 115514746A
Authority
CN
China
Prior art keywords
message
client
queue
instant messaging
redis
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
CN202211150990.8A
Other languages
English (en)
Other versions
CN115514746B (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.)
Ping An Bank Co Ltd
Original Assignee
Ping An Bank 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 Ping An Bank Co Ltd filed Critical Ping An Bank Co Ltd
Priority to CN202211150990.8A priority Critical patent/CN115514746B/zh
Publication of CN115514746A publication Critical patent/CN115514746A/zh
Application granted granted Critical
Publication of CN115514746B publication Critical patent/CN115514746B/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
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • 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
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/141Setup of application sessions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/146Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding

Landscapes

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

Abstract

本发明实施例涉及通信领域,公开了一种即时通信方法、装置、系统、设备和存储介质,该方法包括基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据线程类,以用于与客户端建立WebSocket连接;在检测到已建立连接时,将标识信息存储至Redis消息队列中;接收用户在客户端触发的工作指令,并向Redis消息队列发布Topic消息,以使得服务器根据Topic消息中的标识信息,向客户端发送与标识信息对应的消息会话。本实施例通过在SpringBoot框架中结合WebSocket服务,实现了更具轻量化且更具可靠性的即时通信功能。

Description

即时通信方法、装置、系统、设备和存储介质
技术领域
本发明涉及通信领域,尤其涉及一种即时通信方法、装置、系统、设备和存储介质。
背景技术
随着即时通信技术的快速发展,即时通信软件已经成为网络用户不可缺少的通信工具之一。
目前,即时通信方案主要包括基于HTTP短轮询和长轮询的即时通信、基于MQTT协议的即时通信、基于MQTT协议的即时通信、基于XMPP协议的即时通信、基于TCP协议的即时通信和基于UDP协议的即时通信。
但是,基于HTTP短轮询和长轮询的即时通信,由于客户端需要频繁的通过定时器,发送请求连接报文时需要频繁的进行TCP协议握手与挥手,比较占用带宽,且服务器需要频繁应答客户端请求以保持心跳检测,对服务器而言,相当于小型的请求攻击,且消息交互非完全实时;而基于MQTT协议的即时通信,大部分使用场景在应用软件端,不具备Web端的支持能力;基于XMPP协议的即时通信,虽然对通讯报文做了精简,往来ping/pong通信只要4个字节,但是由于其框架比较沉重,且基于XML通信交互,接入起来有一定难度,定制化开发门槛较高;基于TCP协议的即时通信,需要充分考虑客户端服务器报文交互协议、心跳检测、丢包、粘包、半包问题,对用户上下线感知,离线在线列表维护等一系列问题都需要重新开发,工作量较大;基于UDP协议的即时通信,由于是非可靠连接,存在丢包问题,对于报文乱序问题也需要花费大量精力去解决。
基于此,如何实现更轻量级且更可靠的即时通信是个亟需解决的问题。
发明内容
有鉴于此,为了解决现有技术带来的问题,本实施例提供了一种可应用于如金融科技等领域或其他领域的即时通信方法、装置、系统、设备和存储介质。
第一方面,本发明提供一种即时通信方法,包括:
基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与客户端建立WebSocket连接;
在检测到已与客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;
接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的所述服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话。
在可选的实施方式中,所述方法还包括预先封装Redis消息队列;
所述Redis消息队列的预先封装过程包括:
获取多个消息队列对应的多个功能逻辑,其中,所述多个功能逻辑包括消息产生功能逻辑、消息消费功能逻辑及MQ队列功能逻辑;
对所述多个功能逻辑进行组件化处理以得到多个功能组件,所述多个功能组件包括消息生产组件、消息消费组件和MQ队列组件;
对所述多个功能组件进行封装,得到Redis消息队列。
在可选的实施方式中,所述接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息包括:
通过所述消息生产组件接收并分析用户在所述客户端触发的工作指令,生成与所述工作指令对应的消息会话;
通过所述消息生产组件向Redis消息队列的MQ队列组件中发布包含所述消息会话的Topic消息。
在可选的实施方式中,所述通过所述消息生产组件接收并分析用户在所述客户端触发的工作指令,生成与所述工作指令对应的消息会话包括:
在所述消息生产组件接收到用户在所述客户端触发的工作指令后,对所述客户端进行安全认证;所述安全认证为判断所述客户端是否订阅了所述Redis消息队列的Topic消息;
若所述安全认证通过,根据所述工作指令生成对应的消息会话;
若所述安全认证不通过,向所述客户端发送认证失败信息。
在可选的实施方式中,所述方法还包括:
通过所述消息消费组件监听所述MQ队列组件,以监测所述MQ队列组件中消息会话的发送状态,确定即时通信是否正常。
在可选的实施方式中,所述标识信息的生成过程包括:
根据不同的消息类别,配置与所述消息类别对应的标识信息;其中,所述消息类别包括消息通知类型、消息执行动作和消息发送范围;所述消息通知类型包括弹窗通知消息和刷新通知消息;所述消息执行动作包括增加、删除和修改;消息发送范围包括群发、点对点发送、按部门发送、按角色发送。
第二方面,本发明提供一种即时通信装置,包括:
框架搭建模块,用于基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与所述客户端建立WebSocket连接;
标识储存模块,用于在检测到已与所述客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;
即时通信模块,用于接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话。
第三方面,本发明提供一种即时通信系统,包括服务器和客户端;
所述服务器用于基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与所述客户端建立WebSocket连接;在检测到已与所述客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的所述服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话;
所述客户端用于监听所述Redis消息队列,获取所述Redis消息队列中的消息会话。
第四方面,本发明提供一种计算机设备,所述计算机设备包括存储器和至少一个处理器,所述存储器存储有计算机程序,所述处理器用于执行所述计算机程序以实施前述的即时通信方法。
第五方面,本发明提供一种计算机存储介质,其存储有计算机程序,所述计算机程序被执行时,实施前述的即时通信方法。
本发明实施例具有如下有益效果:
本实施例所提供的即时通信方法,包括基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于WebSocket服务类和WebSocket发送实时数据的线程类,与客户端建立WebSocket连接,在检测到已与客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;接收用户在客户端触发的工作指令,并向Redis消息队列发布Topic消息,以使得订阅Topic消息的服务器根据Topic消息中的标识信息,向客户端发送与标识信息对应的消息会话。本实施例通过在SpringBoot框架中创建WebSocket服务以支持服务器与客户端之间的即时通信,实现了更具轻量化且更具可靠性的即时通信;且在本实施例中,消息的载体采用消息队列进行承载,消息不容易丢失,从而方便用户使用,提高了用户的体验效果。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对本发明保护范围的限定。在各个附图中,类似的构成部分采用类似的编号。
图1示出了本发明实施例中即时通信系统的结构示意图;
图2示出了本发明实施例中即时通信方法的第一个实施方式示意图;
图3示出了本发明实施例中即时通信方法的第二个实施方式示意图;
图4示出了本发明实施例中即时通信方法的第三个实施方式示意图;
图5示出了本发明实施例中即时通信方法的第四个实施方式示意图;
图6示出了本发明实施例中即时通信装置的结构示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
在下文中,可在本发明的各种实施例中使用的术语“包括”、“具有”及其同源词仅意在表示特定特征、数字、步骤、操作、元件、组件或前述项的组合,并且不应被理解为首先排除一个或更多个其它特征、数字、步骤、操作、元件、组件或前述项的组合的存在或增加一个或更多个特征、数字、步骤、操作、元件、组件或前述项的组合的可能性。
此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本发明的各种实施例所属领域普通技术人员通常理解的含义相同的含义。术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本发明的各种实施例中被清楚地限定。
SpringBoot:一种框架,用来简化新Spring应用的初始搭建以及开发过程。
WebSocket:一种在单个TCP连接上进行全双工通信的协议。
Tomcat:一种Java Web服务器。
Redis:远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
MQ(Message Queue):消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。
在金融行业等应用领域,例如在银行交易过程中,银行内部的服务器需要与客户端建立即时通信,以完成与客户端之间的数据传输或聊天通讯,而传统即时通信方案(IM方案),要么采用XMPP协议实现,该协议比较沉重,不支持二进制报文;要么采用MQTT协议,该协议经常用于物联网,协议简单,但不支持Web端的能力;要么采用HTTP短轮询/长轮询的方式,虽实现起来比较简单,但由于定时需要与服务器进行交互,所以比较耗费服务器性能和带宽;基于此,本实施例采用SpringBoot框架和websocket协议来搭建一套轻量级的即时通信机制。
实施例1
请参照图1,本实施例提供了一种即时通信系统,该系统包括服务器10和客户端20。
其中,服务器10用于基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于WebSocket服务类和该线程类,与客户端20建立WebSocket连接;在检测到已与客户端20建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;接收用户在客户端20触发的工作指令,并向Redis消息队列发布Topic消息,以使得订阅Topic消息的服务器10根据Topic消息中的标识信息,向客户端20发送与标识信息对应的消息会话。
客户端20用于监听Redis消息队列,获取Redis消息队列中的消息会话。
基于上述的即时通信系统,本实施例还提供了一种即时通信方法,应用于服务器10。下面对该即时通信方法进行详细说明。
请参照图2,本实施例提供了一种即时通信方法,包括:
S100,基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于WebSocket服务类和该线程类,与客户端20建立WebSocket连接。
本实施例在Springboot框架中内嵌的tomcat架构中启动websocket;添加ServerEndpointExporter类配置bean脚本框架;在ServerEndpointExporter类中添加@ServerEndpoint和@Component注解,并将bean脚本框架交予SpringBoot内部的容器进行管理。
从而基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据线程类,为服务器10和客户端20之间的即时通信搭建了一个通信机制。
通过在SpringBoot框架中创建WebSocket服务类,用于将消息会话实时发送给使用WebSocket服务的客户端20的WebSocket发送实时数据线程类。
客户端20通过互联网与服务器10通信连接;当客户端20需要与服务器10通信时,会与服务器10建立通信连接机制,并接入服务器10,其中,客户端20与服务器10之间建立的通信连接机制是WebSocket通信机制。可选的,当客户端20发出请求时,服务器10接收到请求并发出响应,即为通信连接成功,两者之间只需一次连接,就可以一直进行消息会话传输。
S200,在检测到已与客户端20建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中。
在检测到客户端20与服务器10之间连接成功时,创建与之对应的Redis服务队列,并将客户端20需要传输的数据或消息会话添加至该Redis服务队列中,同时该Redis服务队列中还可以添加服务器10向客户端20所发送的消息会话或数据等。
具体地,启动WebSocket发送实时数据线程类,WebSocket发送实时数据线程类用于将数据或消息会话实时发送给对应使用WebSocket服务的客户端20。
本实施例能够通过与客户端20建立WebSocket连接,并将对应的标识信息存储至Redis消息队列中。
在一种实施方式中,可根据不同的消息类别,配置与消息类别对应的标识信息。
其中,消息类别包括消息通知类型、消息执行动作和消息发送范围;消息通知类型包括弹窗通知消息和刷新通知消息;消息执行动作包括增加、删除和修改;消息发送范围包括群发、点对点发送、按部门发送、按角色发送。
不同的消息类别可对应不同的Topic消息,客户端20在订阅了相关的Topic消息后,可实时获取与该Topic消息对应消息类别的消息会话或数据或报文等。
在本实施例中,先搭建一个SpringBoot微服务框架创建项目,可以将插件部署Eclipse等IDE(Integrated Development Environment,集成开发环境),从而实现项目的开发,也可以通过Spring提供的基于Eclipse的开发工具Spring Tool Suite来进行开发,另外Spring也提供了在线创建项目的功能,该创建项目无缝对接到相应的集成开发环境(IDE)中。
本实施例所采用的SpringBoot框架,可以大大简化Java应用的搭建和开发过程,在第三方插件的使用上完全可以依赖maven或者Gradle来实现,解决了繁琐的配置工作。
采用WebSocket协议来实现数据实时交互,避免了传统Web通信技术中客户端20与服务器10之间频繁请求给网络带来极大负荷的问题。WebSocket可以实现双向通信,不仅客户端20可以向服务器10发送消息,服务器10也可以向客户端20发送信息,实现二者间异步、双工通信。
S300,接收用户在客户端20触发的工作指令,并向Redis消息队列发布Topic消息,以使得订阅Topic消息的服务器10根据Topic消息中的标识信息,向客户端20发送与标识信息对应的消息会话。
在服务器10接收到用户在客户端20触发的工作指令时,可向对应的Redis消息队列发布Topic消息,以使得服务器10集群中的订阅了Redis消息队列的Topic消息的服务器10能够根据Topic消息中的标识信息,判断该用户对应的消息会话是否存在于服务器10内部的数据库中,并根据判断结果执行对应的消息发送操作,能够有效确保每个用户实时、无误的收到服务器10基于Redis消息队列所发送的消息。其中,服务器10或客户端20可以同时往多个Topic消息中投放消息会话,服务器10或客户端20也可以订阅多个Topic消息,以获取对应的消息会话。而将同一类消息发到同一个topic消息队列下,可以保证消息的时序性。
通过与客户端20建立WebSocket连接,并将对应的标识信息存储至Redis缓存;接收用户在客户端20触发的工作指令,并向Redis消息队列发布Topic消息,以使服务器10集群中的订阅了Redis消息队列的Topic消息的服务器10能够根据Topic消息中的标识信息判断该用户对应的消息会话是否存在于本地,并根据判断结果执行对应消息推送操作,能够有效确保每个用户实时、无误的收到服务器10推送的消息。
可选的,为了能够利用Redis消息队列的发布订阅机制以及存储功能,通过基于SpringBoot WebSocket的消息会话状态管理,以此来实现分布式集群模式下WebSocket的会话共享。
在本实施例中,Springboot微服务框架内置能够提供WebSocket服务,实现WebSocket协议的监听到连接、触发事件,通过数据服务推送给WebSocket服务,数据可利用数据交互方式调用实时发送线程发送数据或消息会话到客户端20,有效缓解即时通信过程中的消息会话或数据的传输延迟的问题。
在一种实施方式中,客户端20还用于监听Redis消息队列,以获取Redis消息队列中的消息会话。
客户端20可通过订阅Redis消息队列中的Topic消息,以监听Redis消息队列,进而获取该Redis消息队列中的消息会话;也即是,当Topic消息中所对应的消息会话更新时,可通过该Redis消息队列,获取该Topic消息中更新的消息会话。
在一种实施方式中,还包括:预先封装Redis消息队列。
如图3所示,本实施例中封装该Redis消息队列的步骤可具体包括如下步骤:
S400,获取多个消息队列对应的多个功能逻辑,其中,多个功能逻辑包括消息产生功能逻辑、消息消费功能逻辑及MQ队列功能逻辑。
S500,对多个功能逻辑进行组件化处理以得到多个功能组件,多个功能组件包括消息生产组件、消息消费组件和MQ队列组件。
S600,对多个功能组件进行封装,得到Redis消息队列。
在本实施例中,多个消息队列对应有多个功能逻辑,功能逻辑可包括消息产生功能逻辑、消息消费功能逻辑及MQ队列功能逻辑。
而每个功能逻辑都对应一个组件,消息产生功能逻辑对应消息生产组件、消息消费逻辑对应消息消费组件、MQ队列逻辑对应MQ队列组件。进而,可对多个功能逻辑进行组件化处理,以对应生成多个功能组件。
通过对多个功能组件进行封装,以得到Redis消息队列。在Redis消息队列中,可通过各个功能组件对Topic消息或消息会话进行相应处理。
在本实施例中,消息队列组件可以根据MQ(消息队列)得到,其中,MQ包括ActiveMQ,RabbitMQ,Kafka,RocketMQ等多种类型的消息队列。消息队列组件可用于客户端20与服务器10的应用程序之间的通信。
消息队列组件可以同时接收多个消息会话,通过异步处理提高系统性能和削峰、降低系统耦合性。其中,当同时接收到的消息会话过多时,即在高并发的情况下数据库压力剧增,使得响应速度变慢,为了避免这个问题发生可以通过预先设定消息会话处理量的阈值,当调用消息会话数量超过阈值时,超过的部分,其消息会话先进入等待状态。
其中,消息生产组件得到工作指令后,可以将工作指令对应的消息会话写入到消息队列组件中,以便于消息消费组件根据该工作指令从相应的接口获取消息会话。
进一步地,本实施例还可以通过消息消费组件监听MQ队列组件,以监测MQ队列组件中消息会话的发送状态,确定即时通信是否正常。
具体地,当消息消费组件监测到MQ队列组件中消息会话的发送状态为未发送状态或发送失败状态时,说明该服务器10与客户端20之间的即时通信机制存在异常;而当监测到MQ队列组件中消息会话的发送状态为发送成功状态时,则表示该服务器10与客户端20之间的即时通信机制正常,服务器10与客户端20之间可正常建立即时通信会话。
在一种实施方式中,如图4所示,本实施例中的步骤S300还包括如下步骤:
S310,通过消息生产组件接收并分析用户在客户端20触发的工作指令,生成与工作指令对应的消息会话。
用户在客户端20通过进行相应操作或设置以触发相应的工作指令,服务器10在接收到该工作指令后,生成与工作指令对应的消息会话。其中,触发工作指令的操作或设置在此不做限定,可根据实际情况进行相应设置。
S320,通过消息生产组件向Redis消息队列的MQ队列组件中发布包含消息会话的Topic消息,以使得订阅Topic消息的服务器10根据Topic消息中的标识信息,向客户端20发送与标识信息对应的消息会话。
消息生产组件还用于向Redis消息队列发送该消息会话,也即是,通过该Redis消息队列,在该Redis消息队列中将该消息会话添加至对应的Topic消息中。进而,客户端20可通过Redis消息队列来获取该消息会话。具体地,服务器10通过消息生产组件向Redis消息队列的MQ队列组件中发布包含消息会话的Topic消息,也即是更新该Topic消息,客户端20可实时接收该更新的Topic消息,以获取对应的消息会话。
在一种实施方式中,如图5所示,本实施例中的步骤32还具体包括如下步骤:
S321,在消息生产组件接收到用户在客户端20触发的工作指令后,对客户端20进行安全认证;安全认证为判断客户端20是否订阅了Redis消息队列的Topic消息。
为了提高数据调用的安全性,还可以通过消息生产组件对发送工作指令的客户端20进行安全认证,以确定与服务器10相关联的消息调用方(客户端20)的身份安全性。
安全认证可为判断该客户端20是否订阅了Redis消息队列中与该工作指令对应的需要调取的消息会话的消息类别一致的Topic信息,也即是,判断该客户端20是否有资格去获取该Redis消息队列中对应的Topic信息。
在本实施例中,该安全认证的方式可以为标识认证或其他的认证方式,当通过标识认证方式进行安全认证时,客户端20在与服务器10建立即时通信连接后,需要设置一个与需要订阅的Redis消息队列中的Topic消息的消息类别关联的token标识,并将该token标识发送至服务器10进行存储;而后,当客户端20实时接收Topic消息时,服务器10将客户端20的token标识与本地存储的token标识进行比对,以判断token标识是否一致,当token标识一致时,确定该客户端20可获取对应的Topic消息。
进一步地,在该安全认证之前,还可以进行连接认证。具体地,该连接认证可以是对客户端20的身份消息进行认证,例如,可以通过客户端20的登陆信息来确定其身份消息。在一些安全要求较高的场景中,连接认证也可以是通过短信验证、人脸识别、指纹识别、瞳孔识别等。
S322,若安全认证通过,根据工作指令生成对应的消息会话。
在客户端20的安全认证通过时,则服务器10根据客户端20所发送的工作指令生成对应的消息会话,并将该消息会话添加至Redis消息队列对应的Topic消息中,以使得客户端20获取到该消息会话。
S323,若安全认证不通过,向客户端20发送认证失败信息。
在客户端20的安全认证不通过时,则服务器10向客户端20发送认证失败信息,说明该客户端20不具备获取该Topic消息或消息会话的资格。
本实施例所提供的即时通信方法,通过在SpringBoot框架中创建WebSocket服务以支持服务器10与客户端20之间的即时通信,实现了更具轻量化且更具可靠性的即时通信。相对于基于XMPP协议的即时通信,本实施例的即时通信方案,具备轻量级易开发、易维护、易拓展,用户可以自定义自己的报文头报文体,消息类型,消息动作,消息推送范文;相对于基于MQTT协议的即时通信,本实施例可实现Web端即时消息推送;相对于HTTP轮询的即时通信,本实施例中由于WebSocket属于全双工通信,消息处理及时、性能可靠和消息通过MQ方式解耦,属于弱绑定,更具灵活性;而HTTP轮询的即时通信方案,对服务器10的性能损耗和带宽占用是一大考验,在服务繁忙时,可能会引发连接风暴,而本实施例中,用户可以自定义实现心跳检测,在用户上下线时及时清理无用的资源,降低对系统的压力;相对于基于TCP/UDP自定义协议的即时通信方案,本实施例中的开发难度较低,只要稍有编程经验即可定制化实现自己的报文交互协议,自由度高,可拓展性强,且支持二次开发接入,对接流行的监框架,如Promethues,CAT,APM等。进一步地,由于本实施例中,消息的载体采用MQ(消息队列)承载,且异步存储到持久化存储中,消息不容易丢失,消息队列支持离线消息存储,且天然支持消息撤回,消息阅后即焚等功能,从而方便用户使用,提高了用户的体验效果。
实施例2
请参阅图6,本实施例提供了一种即时通信装置,包括:
框架搭建模块11,用于基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与客户端建立WebSocket连接;
标识储存模块12,用于在检测到已与所述客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;
即时通信模块13,用于接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话。
上述的即时通信装置对应于实施例1的即时通信方法,实施例1中的任何可选项也适用于本实施例,这里不再详述。
本发明实施例还提供了一种计算机设备,该计算机设备包括存储器和至少一个处理器,存储器存储有计算机程序,处理器用于执行计算机程序以实施上述实施例的即时通信方法。
存储器可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据(比如消息类型等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有机器可运行指令,计算机可运行指令在被处理器调用和运行时,计算机可运行指令促使处理器运行上述实施例的即时通信方法的步骤。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,结构图和/或流程图中的每个方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或更多个模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能手机、个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。

Claims (10)

1.一种即时通信方法,其特征在于,用于服务器,包括:
基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与客户端建立WebSocket连接;
在检测到已与所述客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;
接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的所述服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话。
2.根据权利要求1所述的即时通信方法,其特征在于,所述方法还包括预先封装Redis消息队列;
所述Redis消息队列的预先封装过程包括:
获取多个消息队列对应的多个功能逻辑,其中,所述多个功能逻辑包括消息产生功能逻辑、消息消费功能逻辑及MQ队列功能逻辑;
对所述多个功能逻辑进行组件化处理以得到多个功能组件,所述多个功能组件包括消息生产组件、消息消费组件和MQ队列组件;
对所述多个功能组件进行封装,得到Redis消息队列。
3.根据权利要求2所述的即时通信方法,其特征在于,所述接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息包括:
通过所述消息生产组件接收并分析用户在所述客户端触发的工作指令,生成与所述工作指令对应的消息会话;
通过所述消息生产组件向Redis消息队列的MQ队列组件中发布包含所述消息会话的Topic消息。
4.根据权利要求3所述的即时通信方法,其特征在于,所述通过所述消息生产组件接收并分析用户在所述客户端触发的工作指令,生成与所述工作指令对应的消息会话包括:
在所述消息生产组件接收到用户在所述客户端触发的工作指令后,对所述客户端进行安全认证;所述安全认证为判断所述客户端是否订阅了所述Redis消息队列的Topic消息;
若所述安全认证通过,根据所述工作指令生成对应的消息会话;
若所述安全认证不通过,向所述客户端发送认证失败信息。
5.根据权利要求3所述的即时通信方法,其特征在于,所述方法还包括:
通过所述消息消费组件监听所述MQ队列组件,以监测所述MQ队列组件中消息会话的发送状态,确定即时通信是否正常。
6.根据权利要求1所述的即时通信方法,其特征在于,所述标识信息的生成过程包括:
根据不同的消息类别,配置与所述消息类别对应的标识信息;其中,所述消息类别包括消息通知类型、消息执行动作和消息发送范围;所述消息通知类型包括弹窗通知消息和刷新通知消息;所述消息执行动作包括增加、删除和修改;消息发送范围包括群发、点对点发送、按部门发送、按角色发送。
7.一种即时通信装置,其特征在于,包括:
框架搭建模块,用于基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与客户端建立WebSocket连接;
标识储存模块,用于在检测到已与所述客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;
即时通信模块,用于接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话。
8.一种即时通信系统,其特征在于,包括服务器和客户端;
所述服务器用于基于SpringBoot框架创建WebSocket服务类和WebSocket发送实时数据的线程类,并基于所述WebSocket服务类和所述线程类,与所述客户端建立WebSocket连接;在检测到已与所述客户端建立WebSocket连接时,将对应的标识信息存储至Redis消息队列中;接收用户在所述客户端触发的工作指令,并向所述Redis消息队列发布Topic消息,以使得订阅Topic消息的所述服务器根据所述Topic消息中的标识信息,向所述客户端发送与所述标识信息对应的消息会话;
所述客户端用于监听所述Redis消息队列,获取所述Redis消息队列中的消息会话。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器和至少一个处理器,所述存储器存储有计算机程序,所述处理器用于执行所述计算机程序以实施权利要求1-6中任一项所述的即时通信方法。
10.一种计算机存储介质,其特征在于,其存储有计算机程序,所述计算机程序被执行时,实施根据权利要求1-6中任一项所述的即时通信方法。
CN202211150990.8A 2022-09-21 2022-09-21 即时通信方法、装置、系统、设备和存储介质 Active CN115514746B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211150990.8A CN115514746B (zh) 2022-09-21 2022-09-21 即时通信方法、装置、系统、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211150990.8A CN115514746B (zh) 2022-09-21 2022-09-21 即时通信方法、装置、系统、设备和存储介质

Publications (2)

Publication Number Publication Date
CN115514746A true CN115514746A (zh) 2022-12-23
CN115514746B CN115514746B (zh) 2024-05-24

Family

ID=84503819

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211150990.8A Active CN115514746B (zh) 2022-09-21 2022-09-21 即时通信方法、装置、系统、设备和存储介质

Country Status (1)

Country Link
CN (1) CN115514746B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111031058A (zh) * 2019-12-23 2020-04-17 集奥聚合(北京)人工智能科技有限公司 基于WebSocket的分布式服务器集群交互方法及装置
CN112600926A (zh) * 2020-12-16 2021-04-02 平安消费金融有限公司 一种消息推送方法、装置及计算机可读存储介质
CN113794757A (zh) * 2021-08-31 2021-12-14 百融至信(北京)征信有限公司 一种基于rabbitmq的redis cluster异地同步方法及系统
CN114567657A (zh) * 2022-03-10 2022-05-31 河钢数字技术股份有限公司 一种用于钢铁冶炼产线上的实时报警方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111031058A (zh) * 2019-12-23 2020-04-17 集奥聚合(北京)人工智能科技有限公司 基于WebSocket的分布式服务器集群交互方法及装置
CN112600926A (zh) * 2020-12-16 2021-04-02 平安消费金融有限公司 一种消息推送方法、装置及计算机可读存储介质
CN113794757A (zh) * 2021-08-31 2021-12-14 百融至信(北京)征信有限公司 一种基于rabbitmq的redis cluster异地同步方法及系统
CN114567657A (zh) * 2022-03-10 2022-05-31 河钢数字技术股份有限公司 一种用于钢铁冶炼产线上的实时报警方法

Also Published As

Publication number Publication date
CN115514746B (zh) 2024-05-24

Similar Documents

Publication Publication Date Title
US9800685B2 (en) Automatic data request recovery after session failure
CN109327509B (zh) 一种主/从架构的低耦合的分布式流式计算系统
EP2877942B1 (en) Automatic transaction retry after session failure
CN109760041B (zh) 基于聊天机器人的云管理系统及其操作方法
CN108833950B (zh) 一种弹幕消息下发方法、服务器、系统和存储介质
CN109076010B (zh) 互联网云托管的自然语言交互式消息传送系统用户解析器
CN110096340B (zh) 定时任务处理方法及装置
US10693816B2 (en) Communication methods and systems, electronic devices, and computer clusters
CN113452774B (zh) 消息推送方法、装置、设备及存储介质
Roy RabbitMQ in depth
US20130311525A1 (en) Idempotent command execution
US8745489B2 (en) Shell input/output segregation
US20170286755A1 (en) Facebot
EP4091315B1 (en) Techniques to provide streaming data resiliency utilizing a distributed message queue system
CN109218338B (zh) 信息处理系统、方法和装置
JP4906870B2 (ja) サーバ・サイド動的ページの実行のための方法、システム、およびコンピュータ・プログラム
CN107241788A (zh) 可穿戴设备的功耗控制方法及装置
CN115514746A (zh) 即时通信方法、装置、系统、设备和存储介质
CN108989404B (zh) 一种弹幕消息下发方法、服务器、系统和存储介质
CN114979022B (zh) 远程直接数据存取的实现方法、装置、适配器和存储介质
CN113986582A (zh) 一种实时数据推送方法、装置、设备及存储介质
CN111327511B (zh) 即时通讯方法、系统、终端设备与存储介质
CN107925607A (zh) 使用阴影代理对数据服务器进行连续监控
CN112764837B (zh) 数据上报方法、装置、存储介质及终端
CN112333262A (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
GR01 Patent grant
GR01 Patent grant