STOMP协议规范

原文: STOMP Protocol Specification, Version 1.2

摘要

STOMP是一个简单的可互操作的协议, 被用于通过中间服务器在客户端之间进行异步消息传递。它定义了一种在客户端与服务端进行消息传递的文本格式.

STOMP已经被使用了很多年,并且支持很多消息brokers和客户端库。这个规范定义STOMP 1.2协议以及对1.1版本的更新。

发送反馈到stomp-spec@googlegroups.com.

概述
背景

由于需要用脚本语言如Ruby, Python, Perl去连接企业级的消息brokers, STOMP产生了.在这种情况下,STMOP实现了一些简单的操作,比如可靠地发送单一的消息,然后断开或者从目的地消费所有消息。

STOMP是除AMQP开放消息协议之外地另外一个选择, 实现了被用在JMS brokers中特定的有线协议,比如OpenWire. 它仅仅是实现通用消息操作中的一部分,并非想要覆盖全面的消息API.

STOMP目前已经是个成熟的协议,在wire-level方面, 它提供了一些简单的用例,但仍保持其核心设计原则:简单性和互操作性。 ### 协议概述

STOMP是基于frame的协议, 与HTTP的frame相似.一个frame包含一个command,一系列可选的headersbody.STOMP虽然是基于消息但同于也允许传递二进制消息。STMOP的默认消息格式是UTF-8,但是在消息体中同样支持其他格式编码。

STOMP服务器就好像是一系列的目的地, 消息会被发送到这里。STOMP协议把目的地当作不透明的字符串,其语法是服务端具体的实现。 此外STOMP没有定义目的地的交付语义是什么。 交付,或“消息交换”,语义的目的地可以从服务器到服务器,甚至从目的地到目的地。这使得服务器有可创造性的语义,去支持STOMP。

STOMP client的用户代理可以充当两个角色(可能同时): * 作为生产者,通过SENDframe发送消息到server * 作为消费者,发送SUBSCRIBEframe到目的地并且通过MESSAGEframe从server获取消息。

STOMP版本之间的变化

STOMP 1.2 大部分向后兼容1.1. 有两点不兼容的改变: * 用回车加换行符代替只用换行符结束frame * 简化了消息应答,用专用的header

除此之外,STOMP 1.2并没有增加新特性,而是阐述规格中的一些模糊概念,比如: * 重复的frame header条目 * content-lengthcontent-typeheaders的用法 * 必须支持servers STOMP frame * 连接延迟 * 作用域,订阅的唯一,事务的标示符 *RECEIPTframe的含义

设计哲学

简易性,互通性是STOMP主要设计哲学.
STOMP被设计成为轻量级的协议,它很容易用其他语言在client和server实现。这就意味着servers的架构没有太多的约束,以及没有太多的特性比如目的地命名空间,可靠的语法需要去实现。

在这份规格书里面,注意,我们没有明确定义的STOMP 1.2 servers特性。你应该查阅STMOMP servers 文档去获得这些特性的详细描述。

一致性

RFC 2119中详细地解释了MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT,RECOMMENDED, MAY, 和 OPTIONAL这些关键字
为了阻止来自服务端地攻击,保护内存溢出,消除平台限制,限制了不受约束的输入。

规格中一致性的级别适用于STOMP clients and STOMP servers.

STOMP Frames

STOMP是基于帧的协议,它假定底层为一个2-way的可靠流的网络协议(如TCP)。客户端和服务器通信使用STOMP帧流通讯。帧的结构看起来像:

COMMAND
header1:value1
header2:value2

Body^@

帧以command字符串开始,以EOL结束,其中包括可选回车符(13字节),紧接着是换行符(10字节)。command下面是0个或多个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值