In this talk, I will share my experience and learnings about how I built a production-grade video chat system with Elixir and Phoenix.
My video chat app makes use of following features of Elixir and Phoenix.
- Real-time with Phoenix channels
How a Video Chat benefits with real-time features of Phoenix framework. In a Video Chat app, there are so many interactions which happen in a group, so you need real-time capabilities on your server.
- Agents, Tasks, GenSevers
How I used Agents to wrap the state, I need to talk to a third party server, how I used Tasks to perform certain operations, how I used GenServers for long-running features like Cache servers and recorded media file uploaders.
- Supervisors
Instead of crashing, how we gracefully stop services. When users close tabs, other users in video chat should be gracefully informed that users have quit. I will cover, how we make use of supervisors and GenServers for the use case.
- GenStage for events processing with a remote WebRTC media server
Third party media server has API and continually sends different events such as network is slow, user's video is unpublished or audio went off etc. We will see how I make use of GenStage's event handling to show user's feedback interactively.
- Debugging
We will see how Erlang's debugging tools come in handy when there is something wrong.
Anil was a long time Ruby developer, then turned Polyglot developer to do Node.js, Java, and Scala. For last 1.5 years, he is writing an Elixir Phoenix web application to build a team collaboration product. This product involves WebRTC and chat taking full benefit of BEAM's way of concurrency and OTP abstractions.
Anil loves to listen to world music. He is an avid reader. Anil is interested in solving problems with better software architectures and learning distributed systems.