Skip to content

STOMP Protocol Client/Broker Implementation (with interactive CLI)

License

Notifications You must be signed in to change notification settings

tjs-w/go-proto-stomp

Repository files navigation

go-proto-stomp

GitHub release (latest SemVer) go workflow codeQL workflow Go Report Card Maintainability Test Coverage codecov GitHub

Simple Text Oriented Messaging Protocol

STOMP Protocol Implementation in Golang (with interactive CLI)

Go Reference GitHub release (latest SemVer) GitHub go.mod Go version

Includes:

  1. stomper: Interactive CLI for STOMP Client
  2. stompd: STOMP Broker
  3. stomp: STOMP Broker/Client Library

Supported Transports

  1. TCP
  2. Websocket

stomper

stomper -t tcp

stomper demo

stompd

Starting the STOMP Server/Broker:

stompd -t tcp <host> <port>

stomp

Fetching the module:

go get -u github.com/tjs-w/go-proto-stomp

Importing the package:

import "github.com/tjs-w/go-proto-stomp/pkg/stomp"

STOMP Library Documentation

GoDoc lists the APIs for integrating both the STOMP Broker and Client.

The implementation adheres to the spec leaning towards the version 1.2 of the protocol.

STOMP Frame: Augmented BNF Form

This implementation strictly follows the below grammar for frame construction and validation.

NULL                = <US-ASCII null (octet 0)>
LF                  = <US-ASCII line feed (aka newline) (octet 10)>
CR                  = <US-ASCII carriage return (octet 13)>
EOL                 = [CR] LF
OCTET               = <any 8-bit sequence of data>

frame-stream        = 1*frame

frame               = command EOL
                      *( header EOL )
                      EOL
                      *OCTET
                      NULL
                      *( EOL )

command             = client-command | server-command

client-command      = "SEND"
                      | "SUBSCRIBE"
                      | "UNSUBSCRIBE"
                      | "BEGIN"
                      | "COMMIT"
                      | "ABORT"
                      | "ACK"
                      | "NACK"
                      | "DISCONNECT"
                      | "CONNECT"
                      | "STOMP"

server-command      = "CONNECTED"
                      | "MESSAGE"
                      | "RECEIPT"
                      | "ERROR"

header              = header-name ":" header-value
header-name         = 1*<any OCTET except CR or LF or ":">
header-value        = *<any OCTET except CR or LF or ":">

#stomp #protocol #broker #server #client #cli

License

MIT License

Copyright (c) 2022 Tejas Wanjari