Liveview re-rendering, PartitionSupervisor, DynamicSupervisor, PubSub, GenServer and fult-tolerance experiment.
Each Particle is a GenServer under a DynamicSupervisor.
You can start 1, 2, 5 or 10 Particles(GenServer) at once and the PartitionSupervisor will be responsible to define under which DynamicSupervisor the child must be appended. PartitionSupervisor avoids bottlenecks caused by too slow init/1
functions in a GenServer.
Each GenServer initiates their Particle position randomly and in the down direction(From TOP to BOTTOM), every 60 milliseconds their positions are updated respecting the current :direction
.
On our LiveView side, we have a Live connection responsible for getting Particles from PartitionSupervisor and render each particle, again, every 60 milliseconds. Each Particle has their own state, it means they can move in different sides once their state is not shared between others. Also, is possible to kill each Particle without any side effect in the others. That's exactly the idea behind fault-tolerance.
To start your Phoenix server:
- Install dependencies with
mix deps.get
- Start Phoenix endpoint with
mix phx.server
or inside IEx withiex -S mix phx.server
Now you can visit localhost:4000/game
from your browser and start to playing.
- LinkedIn: @marcospgsilva