How We Built a Live Classroom on a 4GB Server
No WebSockets. No Redis. Just Django and 200 bytes per request.
When we decided live tutoring sessions needed to be more than video calls, we had a constraint: everything had to run on a single 4GB ARM VPS already serving four other applications.
Most real-time classroom platforms use WebSockets or Redis pub/sub. We cannot afford that. Our server costs 4 euros a month. So we built something simpler.
The architecture
Our live classroom uses polling. Every 3 seconds, the student's browser asks: "Is there a new activity?" The server responds with about 200 bytes of JSON.
30 students polling every 3 seconds = 10 requests per second. Each takes about 1ms. That is nothing.
How a session works
Daily.co handles video. We handle code activities:
- Instructor writes code and clicks "Push to Students"
- Code appears on every student's screen within 3 seconds
- Students edit and click "Submit"
- Instructor sees all responses with the AI summarizing patterns
Why not WebSockets?
WebSockets require persistent connections. Polling is stateless — each request comes in, gets answered, and closes. Nothing to hold in memory. If the server restarts, nothing breaks.
The trade-off is 3 seconds of latency. For a classroom, that is fine. We are teaching Python, not building a game.
It works on 2G
Video quality adjusts via Daily.co. Code activities are just text — a few hundred bytes. Even on 2G, a student can receive a challenge and submit.
— Ibukun Omonijo, Data Druid Tech