fixed: WebSocket dynamic routing