heartbeat: add timeout for client