Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Real-time WebSocket server with ActionCable protocol for Mothership

Notifications You must be signed in to change notification settings

seuros/orbitcast

Repository files navigation

OrbitCast

ActionCable WebSocket server for Mothership. Runs as a bay using the docking protocol.

What It Does

OrbitCast handles ActionCable WebSocket connections, multiplexed through Mothership's docking protocol. Multiple client connections share a single Unix socket.

Clients (WS) → Mothership → Unix Socket → OrbitCast
 ↓
 RPC
 (anycable-rails)
 ↓
 Pub/Sub
 (PostgreSQL or Memory)

Installation

# Production (multi-node coordination via PostgreSQL)
cargo install orbitcast
# Or explicitly:
# cargo install orbitcast --features postgres
# Development (single-node, in-memory)
cargo install orbitcast --no-default-features --features memory

Exactly one backend is required. Use --no-default-features to disable the default PostgreSQL backend when using memory.

Configuration

Add to your ship-manifest.toml:

[[bays.websocket]]
name = "orbitcast"
command = "orbitcast"
routes = [{ bind = "ws", pattern = "/cable" }]
config = { database_url = "postgres://localhost/myapp" }

Config Options

Key Description
database_url PostgreSQL connection (required for postgres feature)
ping_interval Seconds between pings (default: 3)
rpc_host AnyCable RPC host (default: 127.0.0.1:50051)
rpc_request_timeout_ms RPC request timeout in ms (optional)
rpc_headers Comma-separated header allowlist (default: cookie, * for all)

Environment Variables

Set automatically by Mothership:

Variable Description
MS_PID Mothership process ID
MS_SHIP Bay name
MS_SOCKET_DIR Unix socket directory

Pub/Sub Backends

PostgreSQL (--features postgres)

Uses LISTEN/NOTIFY for cross-node broadcasting. Required for multi-instance deployments.

TLS / sslmode

OrbitCast honors the sslmode query param in database_url:

  • disable: non-TLS only
  • allow: try non-TLS, then TLS
  • prefer (default): try TLS, then non-TLS
  • require: TLS only
  • verify-ca, verify-full: TLS only (certificate verification uses system roots)

Memory (--features memory)

Uses tokio::sync::broadcast. Single process only. Good for development.

Limitations:

  • No cross-node coordination
  • No persistence
  • Lagging receivers lose messages

Redis / NATS (not supported here)

OrbitCast requires PostgreSQL for multi-node pub/sub. If you need Redis or NATS backends, use AnyCable-Go directly as your WebSocket server instead of OrbitCast.

CLI

orbitcast --help
orbitcast --log-level debug

AnyCable RPC

OrbitCast speaks the AnyCable RPC protocol. Run the anycable-rails RPC server and point OrbitCast to it via rpc_host.

Protocol compatibility: AnyCable RPC protocol 1.6.2+.

Example ship config:

[[bays.websocket]]
name = "orbitcast"
command = "orbitcast"
routes = [{ bind = "ws", pattern = "/cable" }]
config = { rpc_host = "127.0.0.1:50051", database_url = "postgres://localhost/myapp" }

License

MIT

AltStyle によって変換されたページ (->オリジナル) /