티스토리 뷰
STOMP 란
STOMP 는 Simple/Stream Text Oriented Messaging Protocol 약자이다. 말 그대로 간단한 문자 기반 메세징 프로토콜이다. 프로토콜이란 원거리에서 메세지를 서로 주고 받을때 정의된 양식 규칙 체계이다. 즉 STOMP는 텍스트 송 수신을 위한 미리 정의된 어떠한 규칙이다.
STOMP 스펙에 정의한 규칙만 잘 지키면 여러 언어, 여러 플랫폼간 메세지를 상호 운영할 수 있다.
Easy
AMQP 나 MQTT 와 같은 메세지 전송을 위한 다른 프로토콜은 존재한다. 하지만 STOMP 가 그것들과 다른점은 binary 기반이 아닌 텍스트 기만 프로토콜이라는 점이다. 그렇기 때문에 개발자가 읽기 쉽고 사용하기에 좋다. 이런점은 마치 HTTP 와 유사한 점이다. 이런 부분때문에 여러 언어, 호스트, 런타임환경에서의 클라리언트를 구현을 몇 시간이면 가능했다고 한다.
TCP 위에서 STOMP에서 정의한 Frame 구조에서 Client Server 간 상호 메세지를 전달한다. Frame 은 몇 개의 텍스트 라인으로 지정된 구조인데 첫번째 라인은 텍스트 이고 이후 key:value 형태로 header 정보를 포함한다. 이후 빈 라인 추가 후 Payload 가 존재한다. 이 구조를 보면 HTTP 요청과 왜 유사한지 알 수 있다. 아래는 Frame 의 예시이다.
COMMAND
header1:value1
header2:value2
Body^@
프로토콜의 COMMAND 아래와 같고 상세한 구현 내용은 아래 STOMP 공식 페이지에 가면 확인할 수있다. 아래 구현 스펙을 이해하면 누구나 어떤 언어로 클라이언트 구현이 가능하다.
- CONNECT
- SEND
- SUBSCRIBE
- UNSUBSCRIBE
- BEGIN
- COMMIT
- ABORT
- ACK
- NACK
- DISCONNECT
stomp.github.io/stomp-specification-1.2.html#STOMP_Frames
구현체
STOMP 는 현재 여러 서버/클라이언트 구현체가 있다. 서버로는 요즘 많이 사용되는 RabbitMQ, ActiveMQ 같은 메세지 큐등이 있고 Client 로는 java, php, python, Go, javascript 등 많은 언어에서 구현하고 있다. 아래는 그 목록이다.
Server
the most popular and powerful open source messaging and Integration Patterns server | 1.0 1.1 | |
Apache ActiveMQ Artemis has a proven non blocking architecture. It delivers outstanding performance. | 1.0 1.1 1.2 | |
a redesigned version of ActiveMQ | 1.0 1.1 1.2 | |
a lightweight pure Python STOMP broker inspired by StompServer | 1.0 | |
a lightweight Java STOMP broker | 1.0 | |
puts the buzz in messaging | 1.0 | |
a STOMP publish/subscribe server with absolutely no potential to cluster | 1.0 | |
an Erlang-based, multi-protocol broker with full support for STOMP via a plugin | 1.0 1.1 1.2 | |
written in Python and runs on Unix type platforms | 1.0 | |
a Java implementation of the STOMP 1.2 specification | 1.2 | |
provides a bridge to any other JMS provider | 1.0 | |
a lightweight pure Ruby STOMP server | 1.0 |
Client
Ruby | an attempt to bring the simplicity and elegance of Rails development to the world of messaging | 1.0 | |
Perl | a lightweight event-driven STOMP client | 1.0 | |
C++ | is a JMS-like API for C++ | 1.0 | |
C# and .Net | a JMS-like API for .Net | 1.0 | |
Flash | an actionscript 3 implementation of the STOMP protocol | 1.0 | |
Delphi and FreePascal | a STOMP client for Embarcadero Delphi and FreePascal | 1.0 | |
Dynamic C | a STOMP client library written in Dynamic C for Rabbit | 1.0 | |
Java | a lightweight implementation of the STOMP specification | 1.0 | |
Haxe | a TCP socket-based STOMP protocol client library written for the Haxe language | 1.0 | |
C | an APR based C library | 1.0 | |
Perl | a Streaming Text Orientated Messaging Protocol client | 1.0 | |
Perl | STOMP object oriented client module | 1.0 1.1 1.2 | |
Objective-C | a simple STOMP client based on AsynSocket | 1.0 | |
Perl | a Perl extension for the POE Environment | 1.0 | |
Ruby | client library for message passing with brokers that support the STOMP protocol | 1.0 1.1 | |
Pike | Public.Protocols.Stomp | 1.0 | |
Python | module for communicating with the ActiveMQ message broker | 1.0 | |
PHP | STOMP bindings for React | 1.1 | |
PHP | a simpler STOMP client for PHP | 1.0 | |
Java | a Java implementation of the STOMP 1.2 specification | 1.2 | |
PHP | STOMP client extension | 1.0 | |
Ruby | client for the STOMP messaging protocol | 1.0 1.1 | |
Python | a client implementation of the STOMP protocol | 1.0 | |
Erlang | a STOMP client for Erlang | 1.0 | |
Python | a full-featured STOMP implementation for Python including both synchronous and asynchronous clients | 1.0 1.1 1.2 | |
Objective-C | modern event-driven Objective-C library for STOMP | 1.2 | |
Python | implementation of the STOMP protocol in Python | 1.0 | |
Go | a STOMP 1.1+ Client Package | 1.0 1.1 1.2 | |
PHP | the FuseSource PHP client implementation | 1.0 | |
Python | a Python client library which can also be run as a standalone, command-line client for testing. | 1.0 1.1 1.2 | |
JavaScript | is a JavaScript library for Web browsers using STOMP Over HTML Web Sockets | 1.0 1.1 | |
TCL | a STOMP Implementation for TCL | 1.1 | |
PHP | for Zend PHP clients | 1.0 |
참고
stomp.github.io/index.html
iotbyhvm.ooo/stomp/
medium.com/@bilal.rifas/stomp-protocol-dc54813c3b95
'Web Development' 카테고리의 다른 글
Base64 Encoding (0) | 2020.09.16 |
---|---|
Build Docker Image with Maven (java) (0) | 2020.06.25 |
Jenkins 계정 권한 관리 (Role-based Authorization Strategy Plugin) (0) | 2020.03.26 |
Shiro JdbcRealm(Postgresql) (0) | 2020.03.20 |
OSGI for Java Bundle Programing (0) | 2020.03.16 |
- Total
- Today
- Yesterday