List of STOMP Client Libraries: Difference between revisions

From Open Rail Data Wiki
EvelynSnow (talk | contribs)
Edit preamble to more clearly note these are not recommendations exactly
EvelynSnow (talk | contribs)
Add NWR feeds navtable and NRE/NWR feeds categories
 
(7 intermediate revisions by the same user not shown)
Line 6: Line 6:
*  ''content-length'' – If a client doesn't support the content-length header, it won't work with the push port.
*  ''content-length'' – If a client doesn't support the content-length header, it won't work with the push port.


If using the Network Rail feeds on the Artemis server (which will eventually become the only option), if your client sends nothing for 60 seconds, you will be disconnected. If you're using a relatively high-volume feed, acknowledgements are one way around this with STOMP 1.0, on later versions, heartbeating is the way to go.
If using the Network Rail feeds on the Artemis server, if your client sends nothing for 60 seconds, you will be disconnected. If you're using a relatively high-volume feed, acknowledgements are one way around this with STOMP 1.0, on later versions, heartbeating is the way to go.


If a library supports all 1.2 features when tested, its name will be in bold.
If a library supports all 1.2 features when tested, its name will be in bold.


== List of STOMP clients ==
== Potentially viable STOMP clients ==
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
! Language !! Name/version !! Links !! Highest version supported !! heartbeating !! acknowledgements !! content-length !! remarks
! Language !! Name/version !! Links !! Highest version supported !! heartbeating !! acknowledgements !! content-length !! remarks
|-
|-
| PHP || stomp 2.0.3 || https://www.php.net/manual/en/class.stomp.php https://pecl.php.net/package/stomp || 1.0 || no || yes || yes ||
| PHP || '''stomp-php''' 5.1.0 || https://github.com/stomp-php/stomp-php https://packagist.org/packages/stomp-php/stomp-php || 1.2 || yes || yes || yes || OK for feeds, not necessarily for general use <ref>https://codeberg.org/Subarrow/Selenetherium/src/branch/main/examples/php/stomp-php</ref>
|-
|-
| Java || Gozirra || https://github.com/pedroteixeira/gozirra || 1.0 || no || no || ? || ''Not suitable for feeds''
| Python || '''stomp.py''' 8.1.0 || https://pypi.org/project/stomp.py/ || 1.2 || yes || yes || yes ||
|-
|-
| JS || stomp-client 0.9.0 || https://www.npmjs.com/package/stomp-client || 1.0 || no || yes || yes || claimed 1.1 support is broken<ref>https://codeberg.org/Subarrow/Selenetherium/src/branch/main/examples/js/stomp-client/README.md</ref>
| Perl || '''Net::STOMP::Client''' 2.5 || https://metacpan.org/pod/Net::STOMP::Client || 1.2 || yes || yes || yes ||
|-
|-
| JS || '''stompit''' 1.0.0 || https://www.npmjs.com/package/stompit || 1.2 || yes || yes || yes ||  
| JS || '''stompit''' 1.0.0 || https://www.npmjs.com/package/stompit || 1.2 || yes || yes || yes ||  
|-
| Go || '''stomp''' 3.0.5 || https://pkg.go.dev/github.com/go-stomp/stomp/v3 || 1.2 || yes || yes || yes ||
|-
| Ruby || stomp 1.4.10 || https://rubygems.org/gems/stomp || 1.1 || yes || yes || yes ||
|-
|-
| Elixir || '''Barytherium''' 0.6.2 || https://hex.pm/packages/barytherium || 1.2 || yes || yes || yes ||
| Elixir || '''Barytherium''' 0.6.2 || https://hex.pm/packages/barytherium || 1.2 || yes || yes || yes ||
|-
|-
| Erlang || '''Platybelodon''' 0.1.0 || https://hex.pm/packages/platybelodon || 1.2 || yes || yes || yes ||
| Erlang || '''Platybelodon''' 0.1.0 || https://hex.pm/packages/platybelodon || 1.2 || yes || yes || yes ||
|-
|}
== Non-recommended STOMP clients ==
Clients which only support 1.0 with a viable alternative, or which have significant bugs
{| class="wikitable sortable"
|-
! Language !! Name/version !! Links !! Highest version supported !! heartbeating !! acknowledgements !! content-length !! remarks
|-
| PHP || stomp 2.0.3 || https://www.php.net/manual/en/class.stomp.php https://pecl.php.net/package/stomp || 1.0 || no || yes || yes ||
|-
| Java || Gozirra || https://github.com/pedroteixeira/gozirra || 1.0 || no || no || ? || ''Not suitable for feeds''
|-
| JS || stomp-client 0.9.0 || https://www.npmjs.com/package/stomp-client || 1.0 || no || yes || yes || claimed 1.1 support is broken<ref>https://codeberg.org/Subarrow/Selenetherium/src/branch/main/examples/js/stomp-client/README.md</ref>
|-
|-
|}
|}
Line 31: Line 50:
== References ==
== References ==
<references />
<references />
{{Navtable-DataFeeds}}
[[Category:Network Rail Data Feeds]]
[[Category:National Rail Enquiries Data Feeds]]

Latest revision as of 14:28, 9 January 2025

STOMP is a relatively simple protocol, which means that there's a large number of third-party libraries available for it, of varying quality. This list is intended to help with the process of working out which libraries to avoid, and which might be more suitable. Note that this list is not exhaustive, is not based on extensive testing, and it's not a comprehensive list of recommendations.

The table

  • Highest version supported – Highest STOMP version the client supports. 1.2 is best, 1.1 is usually acceptable, 1.0 lacks support for heartbeating.
  • Acknowledgements – Can you send an ACK for a frame? If not, you won't be able to set up a durable subscription.
  • content-length – If a client doesn't support the content-length header, it won't work with the push port.

If using the Network Rail feeds on the Artemis server, if your client sends nothing for 60 seconds, you will be disconnected. If you're using a relatively high-volume feed, acknowledgements are one way around this with STOMP 1.0, on later versions, heartbeating is the way to go.

If a library supports all 1.2 features when tested, its name will be in bold.

Potentially viable STOMP clients

Language Name/version Links Highest version supported heartbeating acknowledgements content-length remarks
PHP stomp-php 5.1.0 https://github.com/stomp-php/stomp-php https://packagist.org/packages/stomp-php/stomp-php 1.2 yes yes yes OK for feeds, not necessarily for general use [1]
Python stomp.py 8.1.0 https://pypi.org/project/stomp.py/ 1.2 yes yes yes
Perl Net::STOMP::Client 2.5 https://metacpan.org/pod/Net::STOMP::Client 1.2 yes yes yes
JS stompit 1.0.0 https://www.npmjs.com/package/stompit 1.2 yes yes yes
Go stomp 3.0.5 https://pkg.go.dev/github.com/go-stomp/stomp/v3 1.2 yes yes yes
Ruby stomp 1.4.10 https://rubygems.org/gems/stomp 1.1 yes yes yes
Elixir Barytherium 0.6.2 https://hex.pm/packages/barytherium 1.2 yes yes yes
Erlang Platybelodon 0.1.0 https://hex.pm/packages/platybelodon 1.2 yes yes yes

Non-recommended STOMP clients

Clients which only support 1.0 with a viable alternative, or which have significant bugs

Language Name/version Links Highest version supported heartbeating acknowledgements content-length remarks
PHP stomp 2.0.3 https://www.php.net/manual/en/class.stomp.php https://pecl.php.net/package/stomp 1.0 no yes yes
Java Gozirra https://github.com/pedroteixeira/gozirra 1.0 no no ? Not suitable for feeds
JS stomp-client 0.9.0 https://www.npmjs.com/package/stomp-client 1.0 no yes yes claimed 1.1 support is broken[2]

References


Network Rail Open Data Feeds
Data Feeds About the Feeds Account States Durable Subscriptions Example Code ( PHP / C# / Java / Ruby / Node.js) • STOMP Client Libraries Advanced UsesFAQ Release Notes
RTPPM RTPPM Feed
Train Movements Train Movements Feed Train Activation Train Cancellation Train Movement Train Reinstatement Change of Origin Change of Identity Change of Location TSPEED Field Planned Cancellations Cancellation Codes
TD TD Feed C-Class Messages S-Class Messages Train Describers TD Berths
VSTP VSTP Feed
TSR TSR Feed Route Codes
SCHEDULE SCHEDULE Feed TIPLOC Records Schedule and Location Records Association Records CIF Codes How Scheduling Works Allowances
Reference Data Reference Data Feed TOC Codes CIF Codes Delay Attribution Codes Identifying Locations (STANOX, TIPLOC, NLC and 3-Alpha Codes) STANOX Geographical Areas Train Planning data (BPLAN)