grapewire
v0.8.8
Published
Grapewire — MQTT client-local routing and upstream-subscriptions merger - the things you expected to be there, and nothing more
Downloads
24
Maintainers
Readme
Grapewire
It was called "Ratatosk", then "Ratatoskr", in-house. Now that we've extracted code for a WiP of open source, we realized there was another ratatoskr. So changed to the name that of an old pub/sub-lib based on ZMQ that I never published: "Grapewire".
MAJOR WARNING
This OSS-extraction is WiP - as long as you read this line - it's not ready for consumption. Expect a few more weeks or so more at least.
Objectives
- Aims to do as little as possible, only what "one would expect", and just a tiny tiny tad more
- Routes messages to topics within you application
- The router can be used standalone without the sub-reduction management etc.
- Upstream subscription topic reduction
- Important - without this functionality you will receive multiple duplicates of messages as soon as you subscribe to moderately mixed topics with different wild cards
- Does parameter extraction
- We've switched the route-string-syntax to Express-router syntax for familiarity
- Variable expansion
%c
,%u
is replaced withcliend_id
andusername
, respectively, whether in publish or subscribe
- Queues pubs and subs when disconnected. Sends pubs first.
- Handles reconnecting
- Currently utilizes mqtt.js as underlying transport
- shouldn't be to hard to refactor to allow different implementations
- Some additions that "aren't necessary"
- You're allowed to use
*
instead of+
, and**
instead of#
- You're allowed to use
**
in the middle of topic-patterns: MQTT doesn't support such patterns, so upstream the topic will be as wide as where the**
/#
first comes into play in the pattern - You can subscribe to "only messages that haven't been handled" - this will not generate subscribes upstream, only catch incoming messages after the regular queue when no handler has matcher or accepted them - TODO specs must change here.
- There's a
rcv
function that subscribes for exactly one message. The unsubscription is handled in the router to ensure this contract.
- You're allowed to use
- Relies on Promises (async code style)
- There is also a Kotlin-version that we use in Android - will be open sourced shortly
- A Swift-version for iPhone is planned.