add: functional websocket