supports multiple clients and handles arbitrary disconnects and reconnects