Read Massive
Boost.Beast and OpenSSL consume one real-time or delayed asset-class feed and timestamp each arriving frame.
Authorized feed → internal automated trading systems
goblin-slurp is the software event bus between your authorized Massive.com WebSocket feed and your internal automated trading systems. It connects to Goblin Core over a native shared-memory ringbuffer for low-latency ingest, then routes each event onto a Redis-compatible Pub/Sub channel inside your infrastructure.
Internal routing only Goblin Core ringbuffer Apache-2.0 C++23
The data path
Keep the feed connection draining, split each WebSocket frame into its individual events, and hand internal fan-out to Goblin Core.
Boost.Beast and OpenSSL consume one real-time or delayed asset-class feed and timestamp each arriving frame.
simdjson walks the array. Each object keeps its own bytes, receives ingest coordinates, and advances immediately.
The native shared-memory ringbuffer carries one event at a time into Goblin Core, where internal consumers use familiar Redis Pub/Sub channels.
Internal message model
One object in.
One message out.
A subscriber asks for T:IBM, Q:IBM, or a pattern such as XT:*. It never unpacks unrelated symbols.
An event does not wait for the rest of its WebSocket frame. The routing path advances object by object.
JSON carries received, _n, and _i; SBE carries the frame ingest time in a typed field.
Two payloads, same channels
Changing payload format never changes subscriptions. Consumers keep the same Redis channel names while the body moves between lossless JSON and fixed-layout SBE.
The individual Massive object, passed through byte for byte, with compact ingest metadata appended.
A compact, fixed-size market-data block nested inside the Goblin Core command envelope for constant-offset decoding.
--sbe-outFirst internal message
The goblin-slurp event bus uses Goblin Core's shared-memory ringbuffer for low-latency ingest and its Redis-compatible Pub/Sub interface for consumers inside your automated trading systems.
# terminal 1 — give Goblin Core an ingest ringbuffer $ goblin-core --port 6379 \ --ring /tmp/goblin-slurp 8mb \ --unsolicited-output-buffer-bytes 4mb # terminal 2 — bridge a Massive feed $ export MASSIVE_API_KEY=... $ ./build/goblin-slurp \ --type stocks IBM AMD SPY # terminal 3 — consume normal Redis Pub/Sub $ redis-cli PSUBSCRIBE 'T:*' 'Q:*'
Operator's desk