Portal Community

Side-by-Side Comparison

EdgeStream

  • One-way: server pushes, client receives
  • No response expected from client
  • Stateless per message — fire and forget
  • Multiple subscribers per topic
  • No timeout semantics
  • Designed for event streams, dashboards, log feeds
  • Client does not need to act on the message

EdgeInteract

  • Two-way: server requests, user responds
  • Response required (or timeout fires)
  • Stateful — tracks pending/responded state
  • One responder per interaction (first-to-respond wins)
  • Configurable timeout per interaction
  • Designed for HIL, approvals, confirmations
  • Client must take an action to complete the cycle

Feature Comparison Table

FeatureEdgeStreamEdgeInteract
DirectionServer → Client (one-way)Server ↔ Client (two-way)
Response requiredNoYes (or timeout)
Message stateStatelessStateful (pending → responded)
TimeoutNonePer-interaction timeoutMs
UI renderingYour responsibilityBuilt-in typed components
Multi-subscriberYes — all subscribers receiveFirst-to-respond wins (for roles)
Awaitable on serverNoYes — Promise/Task resolves on response
Audit trailOptionalBuilt-in (request + response logged)
TransportSignalR / WebSocketEdgeStream (SignalR / WebSocket)
HooksMessage hooksPre-send, post-receive, validation, audit

Decision Guide — Which One to Use?

Use this decision tree to determine which system to reach for:

1

Does the server need a response from the user?

Yes → Use EdgeInteract. The server will block (asynchronously) until the user responds.
No → Use EdgeStream. Push the message and continue.

2

Does the workflow or process need to pause and wait?

Yes → Use EdgeInteract. The server awaits the InteractionResponse before continuing.
No → Use EdgeStream. The workflow continues regardless of client state.

3

Is the message a notification only (no action required)?

It's a notification but you need acknowledgement → Use EdgeInteract's notification type.
It's truly read-only with no action needed → Use EdgeStream.

4

Are you streaming real-time data (logs, metrics, activity feed)?

Always use EdgeStream. EdgeInteract is not designed for high-frequency event streams.

Use EdgeStream For

Use EdgeInteract For

Anti-Pattern: Using EdgeStream for HIL Do not use raw EdgeStream for Human-in-the-Loop flows. Without EdgeInteract's request/response model, you must implement timeout handling, response routing, state tracking, and audit trails yourself. Use EdgeInteract.

Architecture Layers

EdgeInteract sits above EdgeStream in the architecture — they are not alternatives at the same layer:

┌─────────────────────────────────────────────┐
│           EdgeInteract                       │
│  (request/response, typed UI, state, audit) │
├─────────────────────────────────────────────┤
│           EdgeStream                         │
│  (pub/sub, topics, subscriptions, fan-out)  │
├─────────────────────────────────────────────┤
│           Transport: SignalR / WebSocket     │
└─────────────────────────────────────────────┘

Your application code uses EdgeInteract for interactions and EdgeStream directly for event streams. Both coexist in the same WebSocket connection.