off_broadway_websocket provides a Broadway producer backed by gun for websocket APIs.
Use it when you need:
- back-pressure aware websocket ingestion through Broadway
- reconnect and retry handling
- optional post-upgrade subscribe/bootstrap frames
- optional session-aware inbound frame handling
Installation
Add the dependency to your mix.exs:
def deps do
[
{:off_broadway_websocket, "~> 1.2.1"}
]
endFetch dependencies:
mix deps.get
Minimal Broadway setup
defmodule MyApp.Broadway do
use Broadway
alias Broadway.Message
alias Broadway.NoopAcknowledger
def start_link(_opts) do
Broadway.start_link(__MODULE__,
name: __MODULE__,
producer: [
module: {
OffBroadwayWebSocket.Producer,
url: "wss://example.com",
path: "/stream",
telemetry_id: :example_ws
},
transformer: {__MODULE__, :transform, []},
concurrency: 1
],
processors: [
default: [min_demand: 0, max_demand: 100, concurrency: 4]
]
)
end
def handle_message(_stage, message, _context), do: message
def transform(payload, _opts) do
%Message{
data: payload,
acknowledger: NoopAcknowledger.init()
}
end
endNext steps
- See Configuration for producer options.
- See Auth Refresh and Handshake Failures for auth header rotation.
- See On Upgrade Bootstrap for subscription-style APIs.
- See Frame Handler for session-aware protocols such as channel-id multiplexing.