free4chat
free4.chat is a real-time audio chat service. It is designed by the local first and privacy first
principle, and is very easy to use.
⚠️ This project is just using for technical test purpose, use at all your risk!
⚠️ There is freedom of speech, but I cannot guarantee freedom after speech. (- Idi Amin)
Features
- Real-time Communicating
- Voice chat in room
- Text chat in room, can sent text or emoji
- Persist text messages to browser localStorage
- Can send arbitrary data by WebRTC datachannel 🚩
- Room permission setting, like public/private type setting
- private room can't been seen on room discovery, and it needs password to enter. The password is End-to-End Encryption, server only need check the answer which given by the client like the
PoW
in blockchain. - Public rooms discovery, like hot room list or filter rooms by type/tag
- private room can't been seen on room discovery, and it needs password to enter. The password is End-to-End Encryption, server only need check the answer which given by the client like the
- Real-time Collaborating
- User real-time collaboration, like whiteboard, you draw I guess, etc.
- Use CRDT to impelement real-time collaboration
- Whiteboard
- User real-time collaboration, like whiteboard, you draw I guess, etc.
- Real-time Contesting
- AI Robot user, like game robot who can play or facilitate game
- robot use Web Speech API to play with user in room
- Azure Text to speech service.
- robot can play some voice games like language learning, technical interview, etc.
- AI + Voice
- Deep learning models are changing the world
- @midjourney can generate fatastic image from text
- @GitHubCopilot can generate context-awared code from short code segment
- @OpenAI GPT-3 model can generate text paragraph from short sentence segment
- Voice conversation from text?
- Deep learning models are changing the world
- robot use Web Speech API to play with user in room
- AI Robot user, like game robot who can play or facilitate game
Architecture
-
Common
- Use WebSocket to replace http protocol of JSON-RPC
- Compatibility
- Make Safari(WebKit) compatibility better
-
Tech Stack
- Use Elixir/Phoenix to rewrite the backend code
- Use Recat/Next.js to rewrite the frontend code
-
Infra
-
Use docker to deploy to PaaS platform like Railway or Fly - Use GitHub Actions + AWS Lightsail to deploy backend server
- Backend service cluster, auto scaling, load balancing, etc.
- Backend service use Elixir libcluster to build cluster
- Frontend app use the client load balance strategy
- TURN cluster scale
- Fix by start turn before the libcluster, still wait the upstream library to fix it normally
- Room process rebalance, that means if the node where room in is offline, then the room process can rebalance to another node, the rebalance can use Consistent hashing to implement
-
For now, we just ignore this issue, because it can be resolved by reconnect another node and create the room again
-
Some Elixir simple approaches
-
A complex approach is use Riak Core which implement the
Consistent hashing
and can rebalance the process by VNode- NkDIST, a Erlang distributed registration and load balancing lib which is base on
Riak Core
- NkDIST, a Erlang distributed registration and load balancing lib which is base on
-
Tinode chat solve this issue by implementing the Raft Consensus Algorithm
More
-
- Security enhancement, like coturn TLS setup, end-to-end encryption, etc.
- TURN enable TLS
- Privacy enhancement.
- IPV6 support.
-
Documentation
Contribution
If you are interested in webRTC
, peer-to-peer(P2P)
, real-time collaboration(CRDT)
, distributed system
or robot design
, you can join this project and contact with me by twitter.
Thanks
- free4.chat Elixir version is build on the top of Membrane Framework, thanks for their heart of open source.
- free4.chat Golang version is build on the top of Kraken, Mornin, coturn and Pion, thanks for their heart of open source.
- These websites also inspired me:
- Random voice and text chat rooms that you’ll love. | Speakrandom
- Practice Speaking English Online Free - Language Practice Community
- Agora Real-Time Voice and Video Engagement
- An open network for secure, decentralized communication - Matrix
- Introduction to Realtime Web Applications
- Gather | Building better teams, bit by bit