STOMP協議詳解
做者:chszs,轉載需註明。博客主頁:http://blog.csdn.net/chszs
1、STOMP協議介紹
STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,簡單(流)文本定向消息協議,它提供了一個可互操做的鏈接格式,容許STOMP客戶端與任意STOMP消息代理(Broker)進行交互。STOMP協議因爲設計簡單,易於開發客戶端,所以在多種語言和多種平臺上獲得普遍地應用。html
STOMP協議的前身是TTMP協議(一個簡單的基於文本的協議),專爲消息中間件設計。git
STOMP是一個很是簡單和容易實現的協議,其設計靈感源自於HTTP的簡單性。儘管STOMP協議在服務器端的實現可能有必定的難度,但客戶端的實現卻很容易。例如,能夠使用Telnet登陸到任何的STOMP代理,並與STOMP代理進行交互。github
STOMP協議與2012年10月22日發佈了最新的STOMP 1.2規範。
要查看STOMP 1.2規範,見: https://stomp.github.io/stomp-specification-1.2.htmlweb
2、STOMP的實現
業界已經有不少優秀的STOMP的服務器/客戶端的開源實現,下面就介紹一下這方面的狀況。apache
一、STOMP服務器
項目名 | 兼容STOMP的版本 | 描述 |
---|---|---|
Apache Apollo | 1.0 1.1 1.2 | ActiveMQ的繼承者 http://activemq.apache.org/apollo |
Apache ActiveMQ | 1.0 1.1 | 流行的開源消息服務器 http://activemq.apache.org/ |
HornetQ | 1.0 | 來自JBoss的消息中間件 http://www.jboss.org/hornetq |
RabbitMQ | 1.0 1.1 1.2 | 基於Erlang、支持多種協議的消息Broker,經過插件支持STOMP協議 http://www.rabbitmq.com/plugins.html#rabbitmq-stomp |
Stampy | 1.2 | STOMP 1.2規範的一個Java實現 http://mrstampy.github.com/Stampy/ |
StompServer | 1.0 | 一個輕量級的純Ruby實現的STOMP服務器 http://stompserver.rubyforge.org/ |
這裏只列了部分。ruby
二、STOMP客戶端庫
項目名 | 兼容STOMP的版本 | 描述 |
---|---|---|
activemessaging | 1.0 | Ruby客戶端庫 http://code.google.com/p/activemessaging/ |
onstomp | 1.0 1.1 | Ruby客戶端庫 https://rubygems.org/gems/onstomp |
Apache CMS | 1.0 | C++客戶端庫 http://activemq.apache.org/cms/ |
Net::STOMP::Client | 1.0 1.1 1.2 | Perl客戶端庫 http://search.cpan.org/dist/Net-STOMP-Client/ |
Gozirra | 1.0 | Java客戶端庫 http://www.germane-software.com/software/Java/Gozirra/ |
libstomp | 1.0 | C客戶端庫,基於APR庫 http://stomp.codehaus.org/C |
Stampy | 1.2 | Java客戶端庫 http://mrstampy.github.com/Stampy/ |
stomp.js | 1.0 1.1 | JavaScript客戶端庫 http://jmesnil.net/stomp-websocket/doc/ |
stompest | 1.0 1.1 1.2 | Python客戶端庫,全功能實現,包括同步和異步 https://github.com/nikipore/stompest |
StompKit | 1.2 | Objective-C客戶端庫,事件驅動 https://github.com/mobile-web-messaging/StompKit/ |
stompngo | 1.0 1.1 1.2 | Go客戶端庫 https://github.com/gmallard/stompngo |
stomp.py | 1.0 1.1 1.2 | Python客戶端庫 https://github.com/jasonrbriggs/stomp.py |
tStomp | 1.1 | TCL客戶端庫 https://github.com/siemens/tstomp |
這裏只列了部分。服務器
3、STOMP協議分析
STOMP協議與HTTP協議很類似,它基於TCP協議,使用瞭如下命令:websocket
CONNECT
SEND
SUBSCRIBE
UNSUBSCRIBE
BEGIN
COMMIT
ABORT
ACK
NACK
DISCONNECTmarkdown
STOMP的客戶端和服務器之間的通訊是經過「幀」(Frame)實現的,每一個幀由多「行」(Line)組成。
第一行包含了命令,而後緊跟鍵值對形式的Header內容。
第二行必須是空行。
第三行開始就是Body內容,末尾都以空字符結尾。
STOMP的客戶端和服務器之間的通訊是經過MESSAGE幀、RECEIPT幀或ERROR幀實現的,它們的格式類似。異步