RabbitMQ插件详解:rabbitmq_web_stomp【RabbitMQ 六】

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

《RabbitMQ Web STOMP:打破界限的消息传递之舞》

    • 前言
    • STOMP协议简介
      • STOMP(Simple Text Oriented Messaging Protocol)协议简介
      • STOMP与WebSocket的关系
    • WebSocket和RabbitMQ
      • WebSocket在现代Web应用中的作用
      • RabbitMQ中支持WebSocket的意义
    • 安装和配置rabbitmq_web_stomp插件
      • 安装步骤:
      • 配置 RabbitMQ 以支持 Web STOMP:
    • RabbitMQ Web STOMP插件的作用和优势
      • 1. 实现实时双向通信
      • 2. 轻松集成到Web应用
      • 3. 解决浏览器同源策略限制
      • 4. 支持异构系统集成
      • 5. 提升用户体验
      • 6. 灵活的消息传递模式
    • 适用场景
    • websockt可以实现,为啥还要引入这个?
    • 实现实时消息传递
      • 使用 JavaScript 客户端连接到 Web STOMP:
      • 发布消息:
      • 订阅消息:
    • 应用场景:即时聊天
      • 多用户、多房间的即时聊天示例:
    • 总结:
    • 结语

前言

RabbitMQ一直是消息传递的先锋,在其众多插件中,rabbitmq_web_stomp无疑是一颗璀璨的明珠。这个插件为我们提供了基于WebSocket的STOMP协议支持,为实现实时、双向通信打开了崭新的可能性。本文将带你进入RabbitMQ Web STOMP的神奇世界,揭开消息传递的新篇章。

STOMP协议简介

STOMP(Simple Text Oriented Messaging Protocol)协议简介

STOMP(Simple Text Oriented Messaging Protocol)是一种用于在应用程序之间进行异步消息传递的简单文本协议。它设计简单、易于实现,是一种基于文本的协议,以简化消息传递的过程。

STOMP协议的特点包括:

  1. 简单性: STOMP协议的设计目标之一是简单性,使其易于实现和使用。

  2. 文本协议: STOMP基于文本,消息以文本形式进行编码,便于人类可读,并使其易于调试。

  3. 协议独立性: STOMP协议是协议独立的,它可以在多种底层传输协议上运行,例如TCP、WebSocket等。

  4. 异步消息传递: STOMP协议支持异步消息传递,允许客户端和服务器通过消息进行通信。

STOMP与WebSocket的关系

WebSocket是一种全双工通信协议,它在客户端和服务器之间提供了实时的、双向的通信通道。相比之下,STOMP是一种简单的文本协议,专注于异步消息传递。

WebSocket和STOMP可以一起使用,将WebSocket作为底层传输协议,而STOMP作为消息传递的协议。通过这种组合,可以在Web应用程序中实现实时的、异步的消息传递。

WebSocket提供了一个持久化的连接,而STOMP定义了一种消息传递的格式和协议。这种组合在实时Web应用程序、聊天应用、通知系统等场景中非常有用,使得浏览器和服务器能够进行实时的双向通信。通常,WebSocket用于底层通信,而STOMP用于定义消息的格式和语义。

WebSocket和RabbitMQ

WebSocket在现代Web应用中的作用

WebSocket是一种在Web浏览器和服务器之间提供双向通信的协议。相比于传统的HTTP协议,WebSocket在实时性、效率和性能上提供了更好的解决方案。以下是WebSocket在现代Web应用中的一些主要作用:

  1. 实时性: WebSocket允许客户端和服务器之间建立持久性的连接,实现实时双向通信。这使得Web应用程序能够及时推送数据,而不需要客户端轮询服务器。

  2. 双向通信: WebSocket提供了双向通信的能力,客户端和服务器可以同时向对方发送消息。这对于实时协作、聊天应用、实时数据展示等场景非常有用。

  3. 减少网络延迟: 由于WebSocket建立的是持久连接,相比于传统的HTTP请求-响应模型,减少了每次通信都要建立新连接的开销,降低了网络延迟。

  4. 降低服务器负担: WebSocket的持久连接使得服务器不再需要处理大量的短暂连接,降低了服务器的负担,提高了服务器的性能。

  5. 更少的带宽消耗: WebSocket的通信头部相对较小,相比于HTTP请求头,带宽消耗更少,这对于移动设备和带宽有限的网络环境更为重要。

RabbitMQ中支持WebSocket的意义

RabbitMQ是一种消息队列中间件,用于在分布式系统中传递消息。支持WebSocket意味着可以通过WebSocket协议直接连接到RabbitMQ服务器,实现实时的、双向的消息通信。这对于一些特定的应用场景和Web应用程序非常有意义:

  1. 实时通知和更新: 使用WebSocket连接到RabbitMQ,可以实现实时的通知和更新,例如在消息队列中有新消息时,即时推送到客户端,而不需要客户端轮询。

  2. Web应用集成: 对于Web应用程序,通过WebSocket直接连接到RabbitMQ可以简化架构,减少中间层,提高实时性,同时降低服务器的负担。

  3. 即时通讯: 在需要即时通讯的场景中,使用WebSocket连接到RabbitMQ可以提供更快的消息传递速度,实现实时的聊天和消息推送。

  4. WebSockets over AMQP: RabbitMQ也支持通过AMQP(高级消息队列协议)的WebSocket扩展进行通信,这样可以更灵活地与RabbitMQ集成。

综合来说,WebSocket与RabbitMQ的结合使得在分布式系统中更容易实现实时通信和消息传递,为现代Web应用提供更好的用户体验。

安装和配置rabbitmq_web_stomp插件

安装步骤:

  1. 检查 RabbitMQ 版本: RabbitMQ Web STOMP 插件通常需要 RabbitMQ 3.6.0 或更新版本。确保你的 RabbitMQ 版本符合要求。

  2. 开启 RabbitMQ 管理插件: 在开始之前,确保已经安装并启用 RabbitMQ 的管理插件。你可以通过以下命令启用管理插件:

    rabbitmq-plugins enable rabbitmq_management
    

    重启 RabbitMQ 以使更改生效。

  3. 下载插件: RabbitMQ Web STOMP 插件通常是通过 GitHub 上的 RabbitMQ GitHub 仓库获取的。你可以在 https://github.com/rabbitmq/rabbitmq-web-stomp 找到插件的源码和下载说明。

  4. 安装插件: 下载插件后,使用以下命令将其安装到 RabbitMQ 中:

    rabbitmq-plugins enable rabbitmq_web_stomp
    

    这会将 Web STOMP 插件安装到 RabbitMQ。

  5. 重启 RabbitMQ: 在安装插件后,务必重新启动 RabbitMQ 以应用更改:

    service rabbitmq-server restart
    

配置 RabbitMQ 以支持 Web STOMP:

  1. 编辑 RabbitMQ 配置文件: 打开 RabbitMQ 的配置文件,通常位于 /etc/rabbitmq/rabbitmq.config。如果文件不存在,可以手动创建。

    sudo nano /etc/rabbitmq/rabbitmq.config
    
  2. 添加 Web STOMP 配置: 在配置文件中添加 Web STOMP 的配置。以下是一个简单的例子:

    [
      {rabbit, [
        {loopback_users, []}
      ]},
      {rabbitmq_web_stomp, [
        {tcp_listeners, [61613]}
      ]}
    ].
    

    这个例子中,我们允许所有用户连接,监听端口为 61613。

  3. 保存并退出: 保存配置文件并退出编辑器。

  4. 重启 RabbitMQ: 重启 RabbitMQ 以使新配置生效:

    service rabbitmq-server restart
    
  5. 验证配置: 打开 RabbitMQ 管理界面(http://localhost:15672/),登录并导航到 “STOMP Connections” 选项卡。你应该看到 Web STOMP 插件的相关信息。

现在,RabbitMQ 已经配置支持 Web STOMP,并可以通过 WebSocket 连接进行通信。在你的 Web 应用程序中,你可以使用支持 STOMP 协议的客户端库,例如 stompjs,与 RabbitMQ 进行实时通信。

RabbitMQ Web STOMP插件的作用和优势

1. 实现实时双向通信

RabbitMQ Web STOMP插件通过支持STOMP协议和WebSocket技术,使得在分布式系统中实现实时、双向的通信成为可能。传统的消息队列在实时性方面可能存在一定的延迟,而Web STOMP通过WebSocket提供了更快速的消息传递机制,适用于需要即时响应的场景。

2. 轻松集成到Web应用

通过WebSocket和STOMP协议,Web STOMP插件能够轻松地集成到现有的Web应用中。这为开发者提供了一种简单而强大的方式,使得Web应用能够更直接地与RabbitMQ进行通信,实现实时消息的推送和拉取。

3. 解决浏览器同源策略限制

在Web开发中,由于浏览器的同源策略,直接在浏览器中进行跨域的WebSocket连接是有一定限制的。RabbitMQ Web STOMP插件提供了一种通过HTTP握手的方式来建立WebSocket连接的方法,从而绕过了同源策略的限制,使得跨域通信更加便捷。

4. 支持异构系统集成

RabbitMQ作为消息中间件,支持多种编程语言和平台。Web STOMP插件的引入使得不同系统、不同平台之间的实时通信更为灵活,可以轻松实现异构系统之间的集成和消息交互。

5. 提升用户体验

对于需要实时更新的应用场景,如在线聊天、实时监控等,使用RabbitMQ Web STOMP插件能够提升用户体验,使得用户能够更即时地获取到最新的信息,增加应用的实时性和交互性。

6. 灵活的消息传递模式

Web STOMP支持多种消息传递模式,包括点对点的消息推送、订阅-发布模式等,开发者可以根据应用的需求选择最适合的消息传递模式,提高系统的灵活性和可扩展性。

通过这些优势,RabbitMQ Web STOMP插件在实时消息传递领域发挥着重要的作用,解决了一系列与实时通信相关的痛点,为开发者提供了更强大的工具来构建实时性强、高度互动的Web应用。

适用场景

RabbitMQ Web STOMP插件通常在需要实现实时双向通信、提升用户体验以及解决一些特定场景下的痛点时使用。以下是一些典型的应用场景:

  1. 即时聊天应用:

    • RabbitMQ Web STOMP插件适用于构建在线聊天应用,实现用户之间的实时消息传递。通过WebSocket技术,可以使得聊天消息的推送更加实时,提高用户聊天体验。
  2. 实时监控与通知:

    • 在需要实时监控系统状态、告警通知的场景中,Web STOMP插件可以作为可靠的消息传递机制。系统状态变化或者告警事件发生时,通过Web STOMP插件可以及时地将消息推送给相关的用户或监控系统。
  3. 在线协作与编辑:

    • 对于需要多人在线协作编辑的场景,Web STOMP插件可以用于实现实时的文档同步。多个用户在编辑同一个文档时,可以通过Web STOMP插件实时地同步各自的编辑内容,提高协作效率。
  4. 股票行情和金融数据推送:

    • 在金融领域,特别是股票行情和实时金融数据的推送场景中,Web STOMP插件可以用于将实时的市场数据快速推送给客户端,使得投资者能够及时获取到最新的行情信息。
  5. 在线游戏:

    • 在在线游戏中,Web STOMP插件可以作为实时消息传递的工具,用于处理玩家之间的交互、游戏状态的同步等。通过WebSocket技术,可以降低消息传递的延迟,提升游戏的实时性。
  6. 物联网应用:

    • 在物联网场景下,需要设备之间实时通信,例如传感器数据的实时传输、设备状态的监控等。Web STOMP插件可以作为可靠的消息传递中间件,支持设备之间的实时通信。

总体而言,当应用场景需要实现实时消息传递、即时通信以及提升用户体验时,RabbitMQ Web STOMP插件就成为一个强大而合适的选择。

websockt可以实现,为啥还要引入这个?

确实,WebSocket本身已经提供了实时双向通信的能力,而且在很多场景下,直接使用WebSocket就足够满足需求。然而,引入RabbitMQ及其Web STOMP插件的原因主要有以下几点:

  1. 消息队列的优势:
    RabbitMQ是一款强大的消息队列系统,具有高度可靠性、持久性、消息确认和队列管理等特性。在一些复杂的应用场景中,使用消息队列能够更好地处理消息的分发、路由和持久化等问题。

  2. 解耦和可扩展性:
    RabbitMQ作为消息中间件,提供了一种解耦应用组件的方式。通过引入消息队列,不同的应用组件可以独立工作,相互之间通过消息进行通信,从而提高系统的可扩展性和灵活性。

  3. 消息的持久化:
    RabbitMQ支持消息的持久化,即使在生产者将消息发送到队列后,即使消费者当前不在线,消息也会被保留。这对于一些重要的通知和数据同步场景非常重要。

  4. 消息过滤和路由:
    RabbitMQ提供了灵活的消息过滤和路由机制,能够根据消息的属性、内容等进行灵活的路由和过滤。这使得消息可以有选择性地发送到特定的队列,满足不同场景的需求。

  5. 整合现有系统:
    在已有的系统中引入RabbitMQ,能够更容易地整合现有的应用,而不需要大规模地改动现有代码。Web STOMP插件作为RabbitMQ的一部分,提供了轻量级、基于WebSocket的实时通信机制,是现代化应用的一部分。

总体来说,引入RabbitMQ及其Web STOMP插件的决策取决于具体的业务需求和系统架构。在一些复杂的分布式系统中,消息队列的优势可能更为明显。在一些简单的应用中,直接使用WebSocket可能已经足够。选择合适的技术栈需要综合考虑系统的特点和未来的发展方向。

实现实时消息传递

要实现实时消息传递,你可以使用 JavaScript 客户端连接到 RabbitMQ 的 Web STOMP 插件。以下是连接到 Web STOMP、发布消息和订阅消息的基本操作。

使用 JavaScript 客户端连接到 Web STOMP:

  1. 引入 stompjs 库: 在你的项目中引入 stompjs 库,你可以通过 CDN 或包管理工具安装:

    <!-- 使用 CDN 引入 stompjs -->
    <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs"></script>
    

    或者通过 npm 安装:

    npm install @stomp/stompjs
    
  2. 创建连接: 在你的 JavaScript 代码中创建一个连接到 RabbitMQ 的 Web STOMP 的客户端:

    const client = new StompJs.Client({
      brokerURL: 'ws://your-rabbitmq-server:15674/ws',
      connectHeaders: {
        login: 'your-username',
        passcode: 'your-password',
      },
      debug: function (str) {
        console.log(str);
      },
      reconnectDelay: 5000,
      heartbeatIncoming: 4000,
      heartbeatOutgoing: 4000,
    });
    

    请替换 your-rabbitmq-server, your-username, 和 your-password 为实际的 RabbitMQ 服务器地址、用户名和密码。

  3. 连接到 RabbitMQ: 使用 client.activate() 连接到 RabbitMQ:

    client.activate();
    

    这将激活连接,并开始监听消息。

发布消息:

// 定义消息内容
const message = { text: 'Hello, RabbitMQ!' };

// 发布消息到指定的队列
client.publish({ destination: '/exchange/your-exchange-name/your-routing-key', body: JSON.stringify(message) });

请将 your-exchange-name 替换为实际的交换机名称,your-routing-key 替换为实际的路由键。

订阅消息:

// 订阅消息
const subscription = client.subscribe('/exchange/your-exchange-name/your-routing-key', (message) => {
  console.log('Received message:', JSON.parse(message.body));
});

// 在需要取消订阅时执行
// subscription.unsubscribe();

同样,将 your-exchange-name 替换为实际的交换机名称,your-routing-key 替换为实际的路由键。

通过这些基本操作,你可以在 JavaScript 客户端实现连接到 RabbitMQ 的 Web STOMP,发布消息和订阅消息,实现实时消息传递。在实际项目中,你可能需要更多的错误处理和其他功能,这取决于你的应用程序需求。

应用场景:即时聊天

实现即时聊天功能涉及到多用户和多房间的管理,通过 Web STOMP 连接到 RabbitMQ 可以为实时聊天提供强大的消息传递基础。以下是一个简单的实时聊天的例子,包括多用户和多房间的实现方式。

多用户、多房间的即时聊天示例:

  1. 前端代码: 使用 stompjs 库连接到 RabbitMQ 的 Web STOMP 并处理聊天消息。

    <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs"></script>
    
    <script>
      const username = prompt('Enter your username:'); // 用户输入用户名
    
      const client = new StompJs.Client({
        brokerURL: 'ws://your-rabbitmq-server:15674/ws',
        connectHeaders: {
          login: 'your-username',
          passcode: 'your-password',
        },
      });
    
      client.onConnect = () => {
        // 连接成功,订阅消息
        client.subscribe('/exchange/chat/global', (message) => {
          const msg = JSON.parse(message.body);
          displayMessage(msg.username, msg.text);
        });
      };
    
      client.activate();
    
      function sendMessage() {
        const message = document.getElementById('message').value;
        client.publish({
          destination: '/exchange/chat/global',
          body: JSON.stringify({ username, text: message }),
        });
        document.getElementById('message').value = '';
      }
    
      function displayMessage(sender, text) {
        const chatArea = document.getElementById('chat-area');
        const messageElement = document.createElement('p');
        messageElement.textContent = `${sender}: ${text}`;
        chatArea.appendChild(messageElement);
      }
    </script>
    
  2. 后端代码: 使用任意后端语言实现 WebSocket 服务,将聊天消息转发给 RabbitMQ。

    # 以 Python Tornado 框架为例
    
    import tornado.ioloop
    import tornado.web
    import tornado.websocket
    import pika
    
    class ChatHandler(tornado.websocket.WebSocketHandler):
        def open(self):
            print('WebSocket opened')
    
        def on_message(self, message):
            # 将接收到的消息发送到 RabbitMQ
            connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
            channel = connection.channel()
            channel.basic_publish(exchange='chat', routing_key='global', body=message)
            connection.close()
    
    app = tornado.web.Application([
        (r'/chat', ChatHandler),
    ])
    
    if __name__ == '__main__':
        app.listen(8888)
        tornado.ioloop.IOLoop.current().start()
    
  3. RabbitMQ 配置: 配置 RabbitMQ 以支持多用户和多房间的聊天。

    [
      {rabbit, [
        {loopback_users, []}
      ]},
      {rabbitmq_web_stomp, [
        {tcp_listeners, [61613]}
      ]}
    ].
    
  4. 多用户、多房间支持: 在实际应用中,可以通过在前端界面中提供选择用户和房间的功能,根据用户和房间发送和接收消息。

这个示例演示了一个简单的即时聊天功能,连接到 RabbitMQ 的 Web STOMP 实现实时消息传递。在实际应用中,你可能需要更多的功能,例如用户管理、房间管理、消息历史记录等,这取决于你的应用需求。

总结:

通过学习本文,你将深入了解RabbitMQ中rabbitmq_web_stomp插件的精髓。从协议基础到实际应用,我们一起揭示了这个插件的神奇之处。无论你是新手还是有经验的开发者,RabbitMQ Web STOMP都将为你带来更灵活、高效的消息传递解决方案。让我们一同跳进这场打破界限的消息传递之舞吧!

结语

深深感谢你阅读完整篇文章,希望你从中获得了些许收获。如果觉得有价值,欢迎点赞、收藏,并关注我的更新,期待与你共同分享更多技术与思考。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/248080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Certbot实现 HTTPS 免费证书(Let‘s Encrypt)自动续期

Certbot实现 HTTPS 自动续期 以前阿里云支持申请一年的免费https证书&#xff0c;那每年我们手动更新证书并没什么大问题&#xff0c;但现在阿里云的免费证书仅支持3个月&#xff0c;这意味着每三个月都要要申请一下证书显得非常麻烦。 下面我们使用Certbot实现ssl证书的自动…

[Linux] LVS负载均衡群集+NAT部署

一、LVS负载均衡群集知识 1.1 群集的的定义及意义 Cluster&#xff0c;集群&#xff08;也称群集&#xff09;由多台主机构成&#xff0c;但对外只表现为一一个整体&#xff0c;只提供一-个访问入口(域名或IP地址)&#xff0c; 相当于一台大型计算机。 群集的作用&#xff1…

常用函数之js复制图片至剪切板

背景 最近在工作中遇到了一个需求&#xff0c;点击按钮将Echart图复制到剪切板&#xff0c;然后按Ctrl&#xff08;command&#xff09;V可以直接复制到聊天软件&文档编辑器中。本以为这是一个比较简单的需求&#xff0c;好像找了一圈资料&#xff0c;发现事情并不简单&am…

java线程的几种状态

一、线程的状态 Java中的线程有以下几种状态&#xff1a; 1. 新建状态&#xff08;New&#xff09;&#xff1a;当线程对象被创建但还没有被调用start()方法时&#xff0c;线程处于新建状态。 2. 运行状态&#xff08;Runnable&#xff09;&#xff1a;当线程启动后&#xff0c…

西瓜视频RenderThread引起的闪退问题攻坚历程

背景 影响 西瓜之前存在过一类RenderThread闪退&#xff0c;从堆栈上看&#xff0c;全部都是系统so调用&#xff0c;给人的第一印象像是一个系统bug&#xff0c;无从下手。闪退集中在Android 5~6上&#xff0c;表现为打开直播间立即闪退。该问题在2022年占据Native Crash Top5&…

C++异步网络库workflow系列教程(3)Series串联任务流

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的两篇博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 简介 首先,workflow是任务流的意…

『番外篇二』Swift “黑魔法”之动态获取类实例隐藏属性的值

概览 在 Swift 代码的调试中,我们时常惊叹调试器的无所不能:对于大部分“黑盒”类实例的内容,调试器也都能探查的一清二楚。 想要自己在运行时也能轻松找到 Thread 实例“私有”属性的值吗(比如 seqNum)? 在本篇博文中您将学到如下内容: 概览1. 借我,借我,一双慧眼吧…

Dockerfile创建镜像LNMP+WordPress

目录 实验部署 nginx 配置mysql 配置php 实验部署 INMPwordpress nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php nginx 关闭防火墙和安全机制在opt目录创建nginx MySQL php目录 cd nginx mysql php vim Dockerfile#声…

rabbitmq-windows安装使用-简易后台界面-修改密码

文章目录 1.下载2.安装3.安装 RabbitMQ4.后台访问5.修改密码 1.下载 将erlang运行时和rabbitmq-windows版本&#xff0c;上传在csdn&#xff0c;下载链接。https://download.csdn.net/download/m0_67316550/88633443 2.安装 右键&#xff0c;以管理员身份运行rabbitmq。启动…

mysql:修改整数字段的显式长度不生效

例如&#xff0c;我使用mysql 8.2.0版本&#xff0c;想修改整数字段的显式长度&#xff0c;不会生效&#xff0c;提醒整数的显示长度已经废弃&#xff0c;会在将来某个版本去掉&#xff1a; mysql官网中也有说明&#xff1a; https://dev.mysql.com/doc/refman/8.2/en/numeric…

【JetBrains】将Gateway中的GoLand回滚到无bug旧版本

问题背景 2023-12-15 我把 Gateway 中使用的 GoLand 从 2023.2.x 升级到了 2023.3 &#xff0c;然后编辑文件过程中输入时时不时会显示错误信息&#xff0c;然后就会进入无法输入&#xff08;键入也不会看到增加字符&#xff09;但能粘贴的奇怪状态。 问题解决 升级到 2023.…

canvas基本绘制对象

目录 绘制画布 设置画布 绘制圆形 绘制矩形填充渐变色 绘制文字及文字样式 绘制画布 <canvas id"canvas" width"800" height"600"></canvas> 设置画布 //获得画布元素var canvasdocument.getElementById(canvas);var ctxca…

Android BluetoothAdapter 使用(二)

Android BluetoothAdapter 使用(二) 本篇文章主要讲下蓝牙设备的配对. 1: 蓝牙设备列表展示 下 面是蓝牙设备adapter的代码: package com.test.bluetooth;import android.bluetooth.BluetoothDevice; import android.content.Context; import android.view.LayoutInflater;…

人工智能多模态:看、听、说,智能感知的全方位融合

导言 人工智能多模态技术是指通过整合视觉、听觉、语言等多个感知模态的信息&#xff0c;实现对丰富、多样化数据的理解与处理。本文将深入研究人工智能多模态的技术原理、应用场景以及对未来感知智能的影响。 1. 简介 人工智能多模态技术通过整合多个感知模态的信息&#xff…

医学检验系统LIS源码,C# +.Net+Oracle

LIS是HIS的一个组成部分&#xff0c;通过与HIS的无缝连接可以共享HIS中的信息资源&#xff0c;使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。  体系结构&#xff1a;Client/Server架构 客户端&#xff1a;WPFWindows Forms 服务端&#xff1a;C…

stm32项目(12)——基于stm32f407zgt6的频率计设计

1.项目功能 配置stm32自带的定时器&#xff0c;以一定的周期产生中断&#xff0c;在中断服务函数里面&#xff0c;对某个IO口进行取反&#xff0c;这样就在该管脚上产生了一定频率的方波&#xff08;频率可以用按键调节&#xff09;。然后再使用stm32的捕获功能&#xff0c;对产…

解决nuxt3环境中css样式失效的问题

现象: 底部播放器进度条拖动按钮没有了&#xff01; 然后通过chrome开发工具检查html元素的结构&#xff1a; 发现progressbar这个元素是存在的&#xff0c;但是为什么没有显示呢&#xff0c;然后回到代码中&#xff1a; 发现原来是组件的名字写错了&#xff0c;多写了一个字母…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

Axure动态面-轮播图案例,多方式登录案例,后台主界面左侧侧边栏案例

一.轮播图案例 二.多方式登录案例 三. 后台主界面左侧侧边栏案例

中国社科院与新加坡新跃社科大联合培养博士—平凡≠平庸

英国文艺评论家赫兹利特说过&#xff0c;书籍深透骨髓&#xff0c;诗随血液回圈。小时候读书的美好感受&#xff0c;至今犹存。书中所言他人之事&#xff0c;更使我们如身临其境。无论何时何地&#xff0c;好书无须倾尽囊中物便可得之&#xff0c;而我们的呼吸也会充满书香之气…