跳到主要内容
版本:7.0.3

概述

Hunyuan 7b 中英对照 Overview

STOMP(简单文本导向的消息协议)最初是为脚本语言(如Ruby、Python和Perl)创建的,用于连接企业消息代理。它旨在解决一组常用的消息模式中的最小子集问题。STOMP可以通过任何可靠的双向流网络协议(如TCP和WebSocket)进行使用。虽然STOMP是一种文本导向的协议,但消息的有效载荷可以是文本或二进制格式。

STOMP是一种基于帧的协议,其帧结构是参照HTTP设计的。以下列表展示了STOMP帧的结构:

COMMAND
header1:value1
header2:value2

Body^@

客户端可以使用SENDSUBSCRIBE命令来发送或订阅消息,同时需要提供一个destination头部信息,该信息用于描述消息的内容以及应该接收消息的对象。这样就实现了一个简单的发布-订阅机制,可以通过这个机制将消息通过代理发送给其他连接的客户端,或者向服务器发送消息以请求执行某些操作。

当你使用Spring的STOMP支持时,Spring WebSocket应用程序会充当STOMP代理与客户端进行通信。消息会被路由到@Controller消息处理方法,或者被发送到一个简单的内存代理中,该代理负责跟踪订阅关系并向已订阅的用户广播消息。你也可以配置Spring与专用的STOMP代理(如RabbitMQ、ActiveMQ等)配合使用以实现消息的实际传输。在这种情况下,Spring会维护与代理的TCP连接,将消息转发给代理,并从代理将消息传递给已连接的WebSocket客户端。因此,Spring Web应用程序可以依赖统一的基于HTTP的安全机制、通用的验证规则以及熟悉的编程模型来进行消息处理。

以下示例展示了一个客户端订阅接收股票报价的过程,服务器可以定期发送这些报价(例如,通过一个定时任务,利用Simp MessagingTemplate将消息发送给经纪商):

SUBSCRIBE
id:sub-1
destination:/topic/price.stock.*

^@

以下示例展示了一个客户端发送交易请求的情景,服务器可以通过@MessageMapping方法来处理该请求:

SEND
destination:/queue/trade
content-type:application/json
content-length:44

{"action":"BUY","ticker":"MMM","shares",44}^@

执行完成后,服务器可以将交易确认消息和详细信息广播给客户端。

在STOMP规范中,目的地的含义被有意地设计为不透明的。目的地可以是一个任意字符串,其语义和语法完全由STOMP服务器自行定义。不过,常见的情况是目的地为类似路径的字符串,其中/topic/..表示发布-订阅(一对多)的消息交换,而/queue/则表示点对点的消息交换。

STOMP服务器可以使用MESSAGE命令向所有订阅者广播消息。以下示例显示了一个服务器向已订阅的客户端发送股票报价:

MESSAGE
message-id:nxahklf6-1
subscription:sub-1
destination:/topic/price.stock.MMM

{"ticker":"MMM","price":129.45}^@

服务器不能发送未经请求的消息。服务器发送的所有消息必须是对特定客户端订阅的响应,且服务器消息中的subscription头部必须与客户端订阅的id头部相匹配。

上述概述旨在提供对STOMP协议最基本的了解。我们建议大家全面查阅该协议的规范文档