# iamakashtechie/webrtc-learning architecture

> Architecture diagram of the GitHub repository iamakashtechie/webrtc-learning, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/iamakashtechie/webrtc-learning
- Repository: https://github.com/iamakashtechie/webrtc-learning

## Overview

This is a hands-on RTC learning reference, not a single production service. Its runnable workflow is a browser connecting to the unified Node server, which serves a dashboard and demonstrates long polling, SSE, and WebSockets; separate files provide standalone versions. The README also documents short polling, broker-based WebSocket scaling, and WebRTC signaling and peer media as conceptual branches. Those latter capabilities are documented rather than implemented in the sampled runtime. The dashboard source was not sampled, so its protocol-specific wiring is not inferred.

Main entry points: [`server.js`](https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js) (Unified HTTP Server), [`README.md`](https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md) (Signaling Server), [`public/index.html`](https://github.com/iamakashtechie/webrtc-learning/blob/main/public/index.html) (Testing Dashboard), [`longPolling.js`](https://github.com/iamakashtechie/webrtc-learning/blob/main/longPolling.js) (Standalone Long Poll)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runnable Servers"]
  node_unified["Unified HTTP Server<br/>[server.js]"]
  node_dashboard["Testing Dashboard<br/>[index.html]"]
end

subgraph group_protocols["Communication Patterns"]
  node_unified_poll["Long-Poll Route<br/>[server.js]"]
  node_unified_sse["SSE Route<br/>[server.js]"]
  node_unified_ws["WebSocket Handler<br/>[server.js]"]
  node_poll_demo["Standalone Long Poll<br/>[longPolling.js]"]
  node_sse_demo["Standalone SSE"]
  node_ws_demo["Standalone WebSocket<br/>[webSocket.js]"]
  node_short_poll["Short Polling<br/>[README.md]"]
end

subgraph group_scaling["Scaling Concepts"]
  node_broker[("Message Broker<br/>[README.md]")]
  node_ws_nodes["WebSocket Server Nodes<br/>[README.md]"]
end

subgraph group_webrtc["WebRTC Concepts"]
  node_peer_a(("Peer A"))
  node_signaling["Signaling Server<br/>[README.md]"]
  node_peer_b(("Peer B"))
  node_peer_media["Direct Peer Media<br/>[README.md]"]
end

node_browser(("Browser Client"))

node_browser -->|"requests content"| node_unified
node_unified -->|"serves page"| node_dashboard
node_unified -->|"routes /poll"| node_unified_poll
node_unified -->|"routes /events"| node_unified_sse
node_unified -->|"attaches handler"| node_unified_ws
node_browser -->|"long-polls"| node_unified_poll
node_unified_poll -->|"returns response"| node_browser
node_browser -->|"opens event stream"| node_unified_sse
node_unified_sse -->|"pushes events"| node_browser
node_browser -->|"opens socket"| node_unified_ws
node_unified_ws -->|"echoes messages"| node_browser
node_browser -->|"requests /poll"| node_poll_demo
node_browser -->|"connects to /events"| node_sse_demo
node_browser -->|"opens socket"| node_ws_demo
node_browser -->|"repeats requests"| node_short_poll
node_ws_nodes -->|"publishes messages"| node_broker
node_broker -->|"broadcasts messages"| node_ws_nodes
node_peer_a -->|"sends SDP and ICE"| node_signaling
node_signaling -->|"forwards metadata"| node_peer_b
node_peer_b -->|"sends SDP and ICE"| node_signaling
node_signaling -->|"forwards metadata"| node_peer_a
node_peer_a -->|"streams directly"| node_peer_media
node_peer_media -->|"delivers media"| node_peer_b

click node_unified "https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js"
click node_dashboard "https://github.com/iamakashtechie/webrtc-learning/blob/main/public/index.html"
click node_unified_poll "https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js"
click node_unified_sse "https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js"
click node_unified_ws "https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js"
click node_poll_demo "https://github.com/iamakashtechie/webrtc-learning/blob/main/longPolling.js"
click node_sse_demo "https://github.com/iamakashtechie/webrtc-learning/blob/main/serverSentEvents.js"
click node_ws_demo "https://github.com/iamakashtechie/webrtc-learning/blob/main/webSocket.js"
click node_short_poll "https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md"
click node_broker "https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md"
click node_ws_nodes "https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md"
click node_signaling "https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md"
click node_peer_media "https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_unified,node_dashboard,node_browser toneBlue
class node_unified_poll,node_unified_sse,node_unified_ws,node_poll_demo,node_sse_demo,node_ws_demo,node_short_poll toneAmber
class node_broker,node_ws_nodes toneMint
class node_peer_a,node_signaling,node_peer_b,node_peer_media toneRose
```

## Components

### Runnable Servers

- [Unified HTTP Server](https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js): `server.js`
- [Testing Dashboard](https://github.com/iamakashtechie/webrtc-learning/blob/main/public/index.html): `public/index.html`

### Communication Patterns

- [Long-Poll Route](https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js): `server.js`
- [SSE Route](https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js): `server.js`
- [WebSocket Handler](https://github.com/iamakashtechie/webrtc-learning/blob/main/server.js): `server.js`
- [Standalone Long Poll](https://github.com/iamakashtechie/webrtc-learning/blob/main/longPolling.js): `longPolling.js`
- [Standalone SSE](https://github.com/iamakashtechie/webrtc-learning/blob/main/serverSentEvents.js): `serverSentEvents.js`
- [Standalone WebSocket](https://github.com/iamakashtechie/webrtc-learning/blob/main/webSocket.js): `webSocket.js`
- [Short Polling](https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md): `README.md`

### Scaling Concepts

- [Message Broker](https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md): `README.md`
- [WebSocket Server Nodes](https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md): `README.md`

### WebRTC Concepts

- **Peer A**
- [Signaling Server](https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md): `README.md`
- **Peer B**
- [Direct Peer Media](https://github.com/iamakashtechie/webrtc-learning/blob/main/README.md): `README.md`

### Other components

- **Browser Client**

## Connections

- Browser Client → Unified HTTP Server: requests content (evidence: `server.js`)
- Unified HTTP Server → Testing Dashboard: serves page (evidence: `server.js`)
- Unified HTTP Server → Long-Poll Route: routes /poll (evidence: `server.js`)
- Unified HTTP Server → SSE Route: routes /events (evidence: `server.js`)
- Unified HTTP Server → WebSocket Handler: attaches handler (evidence: `server.js`)
- Browser Client → Long-Poll Route: long-polls (evidence: `README.md`)
- Long-Poll Route → Browser Client: returns response (evidence: `server.js`)
- Browser Client → SSE Route: opens event stream (evidence: `README.md`)
- SSE Route → Browser Client: pushes events (evidence: `server.js`)
- Browser Client → WebSocket Handler: opens socket (evidence: `README.md`)
- WebSocket Handler → Browser Client: echoes messages (evidence: `server.js`)
- Browser Client → Standalone Long Poll: requests /poll (evidence: `longPolling.js`)
- Browser Client → Standalone SSE: connects to /events (evidence: `serverSentEvents.js`)
- Browser Client → Standalone WebSocket: opens socket (evidence: `webSocket.js`)
- Browser Client → Short Polling: repeats requests (evidence: `README.md`)
- WebSocket Server Nodes → Message Broker: publishes messages (evidence: `README.md`)
- Message Broker → WebSocket Server Nodes: broadcasts messages (evidence: `README.md`)
- Peer A → Signaling Server: sends SDP and ICE (evidence: `README.md`)
- Signaling Server → Peer B: forwards metadata (evidence: `README.md`)
- Peer B → Signaling Server: sends SDP and ICE (evidence: `README.md`)
- Signaling Server → Peer A: forwards metadata (evidence: `README.md`)
- Peer A → Direct Peer Media: streams directly (evidence: `README.md`)
- Direct Peer Media → Peer B: delivers media (evidence: `README.md`)
