thin websocket wrapper