added WebSocket keepalives