15
Сен
2021

Не могу понять как правильно использовать Websocet и React Hooks

Всем привет! Использую Websocet и ReactHook в целом все работает, но получается каждый раз, как я изменяю тикер, сокет закрывается и заново открывается. А мнеб хотелось, чтоб я подключался к сокету один раз и когда соединение разрывалось переподключался. Самое главное, чтоб когда я подключался, отправлялось сообщение subscribe, а когда менял тикер, получается должно отправляться unsubscribe и потом снова subscribe. После долгих попыток реализовать, решил написать сюда. Я новичок буду очень благодарен помощи, вот мой код:

  const [asks, setAsks] = useState([[0,0]]);
  const [bids, setBids] = useState([[0,0]]);
  const [maxLots,setMaxLots] = useState(0);


  useEffect(() => {
    const headers = {
        Authorization: 'Bearer ' + props.object._apiToken
    }
    const subscribe = {
            "event": "orderbook:subscribe",
            "figi": props.object.figi,
            "depth": 14
    };

    const unsubscribe = {
            "event": "orderbook:unsubscribe",
            "figi": props.object.figi,
            "depth": 14
    };

        const ws = new WebSocket('wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws', null, {headers});

    ws.onopen = () => {
      ws.send(JSON.stringify(subscribe));
    };

    ws.onerror = (e) => {
      console.log(e.message);
    };

    ws.onmessage = (event) => {
      const response = JSON.parse(event.data);
      console.log(response.payload.asks[0]);
      const muss = [...response.payload.asks, ...response.payload.bids];
      setAsks(response.payload.asks);
      setBids(response.payload.bids);
      var sorted = muss.slice().sort(function(a, b) {
        return a[1] - b[1];
      });
      setMaxLots(sorted[sorted.length-1][1]);
    };

    ws.onclose = () => {
      ws.close();
    };
    
    return () => {
      ws.send(JSON.stringify(unsubscribe));
      ws.close();
    };
  },[props.object.figi]);

    return (

Источник: https://ru.stackoverflow.com/questions/1328555/%D0%9D%D0%B5-%D0%BC%D0%BE%D0%B3%D1%83-%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C-%D0%BA%D0%B0%D0%BA-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-websocet-%D0%B8-react-hooks

Тебе может это понравится...

Добавить комментарий