Supported transport types
SignalR is an abstraction over some of the transports that are required to do real-time work between client and server
HTML 5 transports depend on browser support. If unsupported, older transports are used. WebSocket provides a persistent, two-way connection but requires modern browsers. Server Sent Events (EventSource) are supported by most browsers except Internet Explorer. Comet transports include Forever Frame (Internet Explorer only) and Ajax long polling, which maintains a long-held HTTP request for server push data.
- WebSockets
- SSE (Server sent events)
- Long Polling
SignalR by default uses WebSocket transport and it falls back to older transports mechanisms when WebSocket is not supported or if older transports are preferred.
Traditional HTTP
We know about basic HTTP request response model.
sequenceDiagram
participant Client
participant Server
Client->>Server: Request
Server-->>Client: Response
Websockets
WebSocket establishes persistent, two way connection between client and server.
flowchart TD
n1["Server"] <-- "<span style=color:>WebSocket </span>" --> n2["Client 1"]
n1 <-- "<span style=background-color:>WebSocket</span><span style=background-color:> </span>" --> n4["Client 2"] & n3["Client 3"]
n1@{ shape: rect}
n2@{ shape: rect}
n4@{ shape: rect}
n3@{ shape: rect}
SSE - Server-sent events
Also known as EventSource
Forever Frames
Long polling
Transportation selection steps followed by signalR
A flowchart to support explaining this selection process.
graph TD
A[V] --> B{Is browser IE8 or earlier?}
B -- Yes --> C[Use Long Polling]
B -- No --> D{Is JSONP configured?}
D -- Yes --> C
D -- No --> E{Is connection cross-domain?}
E -- No --> F{Do client and server support WebSocket?}
F -- Yes --> G[Use WebSocket]
F -- No --> H{Is Server Sent Events available?}
H -- Yes --> I[Use Server Sent Events]
H -- No --> J{Is Forever Frame available?}
J -- Yes --> K[Use Forever Frame]
J -- No --> C
E -- Yes --> L{Do client and server support CORS and WebSocket?}
L -- Yes --> G
L -- No --> C