WebSocket convenience library