If the other end fails to respond to KeepAliveRequest, we don't handle it. In this implementation the KeepAliveRequest is useless. Need a timeout with events to handle failed requests.