Pusher Channels
Real-time gatewaypusher
Hosted pub/sub WebSocket service.
- Provider
- default
- Category
- Edge
- Official docs
- https://pusher.com/docs/channels/
| property | type | values | required | kind default | this component |
|---|---|---|---|---|---|
| ackIntervalSeconds | integer | — | no | — | inherited |
| autoscaling | boolean | — | no | false | ▸ true |
| channelAssignment | enum | random | hash | sticky | no | random | inherited |
| drainOnScaleIn | boolean | — | no | false | ▸ true |
| managed | boolean | — | no | false | ▸ true |
| messageSizeKb | integer | — | no | 10 | inherited |
| protocol | enum | websocket | sse | long-poll | grpc-stream | udp-multicast | no | websocket | ▸ websocket |
| pushFallback | boolean | — | no | false | inherited |
| sequenceNumbers | boolean | — | no | false | inherited |
| stampedeGuard | boolean | — | no | false | inherited |
| stateful | boolean | — | no | true | ▸ false |
| subscriptionsPerUser | integer | — | no | — | inherited |
Every rule whose selector covers this component's kind or its category. Whether a rule fires depends on the design: its properties, its edges and its groups.
reconnect-stampede-without-guard
When a gateway holding millions of sockets restarts, every client reconnects at once and the gateway asks the coordination service about each of them. Without a stampede guard that lookup storm takes the coordination service down too.
- — all of these hold:
- — the node has at least one synchronous outgoing edge to a coordination-service
- — the node's `stampedeGuard` is false
shared-host-per-channel-without-isolation
With heavy-tail traffic a few channels carry most of the load. Assigning channels at random lands those hot channels on arbitrary hosts, and every tenant sharing a host suffers for it.
- — all of these hold:
- — the node's `channelAssignment` is "random"
- — the design requirement `traffic.skew` is "heavy-tail"
stateful-websocket-scale-in-without-drain
Scaling a gateway down kills every live WebSocket on the removed instance at once. Without a drain step those clients all reconnect together.
- — all of these hold:
- — the node's `autoscaling` is true
- — the node's `drainOnScaleIn` is false
nodes:
- { id: "pusher", component: "pusher" }API Gateway WebSocket APIaws-api-gateway-websocketAWS AppSync Events APIaws-appsync-eventsAmazon IVS Chataws-ivs-chatAzure Fluid Relayazure-fluid-relayAzure SignalR Serviceazure-signalrAzure Web PubSubazure-web-pubsubAblyablyCentrifugocentrifugoLiveblocksliveblocksMercuremercureMulticast market-data feedmulticast-feedPartyKitpartykitPhoenix Channelsphoenix-channelsPushpinpushpinGeneric real-time gatewayrealtime-gatewayASP.NET Core SignalRsignalrSocket.IO serversocket-io-serverSoketisoketiWebSocket gatewaywebsocket-gateway
# yaml-language-server: $schema=../../schema/component.schema.json # Pusher Channels: managed pub/sub over WebSocket. 10 KB message limit. schemaVersion: "1" type: "component" id: "pusher" kind: "realtime-gateway" provider: "default" docs: "https://pusher.com/docs/channels/" defaults: managed: true protocol: "websocket" stateful: false autoscaling: true drainOnScaleIn: true properties: messageSizeKb: type: "integer" default: 10