Skip to content

Fast Ferry — WebSocket Streaming Relay

A persistent, low-latency TCP tunnel for real-time telemetry or chat. Secures bi-directional streaming data at Layer 4 without sacrificing throughput.

Tags: Armored Tunnel | Single Cluster | WebSocket | 2 Pods


Overview

The Fast Ferry connects a WebSocket Initiator (ws-initiator) to a WebSocket Terminator (ws-terminator) over a persistent WoSP-secured TCP session. Armored Tunnel mode (xtra4) provides per-session key rotation — the WoSP identity is issued when the connection is established and held for the duration of the session.

Unlike Armored Car blueprints, the Fast Ferry is optimized for persistent connections where per-request teardown is not possible.

flowchart TD
    A["Gateway / Initiator\n(ws-initiator)"]
    B["Sink / Terminator\n(ws-terminator)"]
    A -->|"WoSP xtra4\npersistent session"| B

Use Cases

  • Real-time telemetry streams (IoT sensors, monitoring data)
  • Persistent chat or messaging channels
  • Live event feeds requiring low-latency delivery
  • Any workload where the overhead of per-request connection setup is unacceptable

Bundle Contents

fast-ferry/
├── initiator/        ← ws-initiator
├── terminator/       ← ws-terminator
├── deploy.sh
├── teardown.sh
├── blueprint.yaml
├── README.md
└── EULA.md

Note

The Fast Ferry does not include pinhole-setup.sh — it uses internal WoSP session tunneling rather than Pinhole TLS endpoints.

Deploy

Prerequisites: Docker Desktop, k3d >= 5.0, kubectl, valid Hopr license

cd initiator/app/ && docker build -t serial-app-wosp-node:latest . && k3d image import serial-app-wosp-node:latest
cd ../../terminator/app/ && docker build -t serial-app-wosp-node:latest . && k3d image import serial-app-wosp-node:latest
cd ../..
bash deploy.sh
bash deploy.sh

Verify

kubectl logs -n fast-ferry-initiator-ns \
  deployment/initiator -c web-app -f

Expected output:

🔁 Auto-trigger starting — sending 5 messages
🔁 Auto-trigger complete — 5/5 messages sent.

Customize

Hook functions for this blueprint:

  • on_trigger(payload, headers) — in initiator/app/app.py: initiate the streaming session
  • on_receive_terminator(payload) — in terminator/app/app.py: handle streamed messages at the receiving end

See Hook Functions Reference.

Pricing

2 WoSP units (1 per pod). See Commercial Licensing.