https://blog.rubberduckapp.com/12-understanding-client-server-architecture/