Поймать нужный ответ от websocket

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день. При отсыле на websocket сообщения message в ответ может прилететь один из трех вариантов:

Код:
{
    "payload": {
        "data": {
            "match": {
                },
                "markets": []
            }
        }
    },
    "id": "3",
    "type": "data"
}

Код:
{
    "id": "1",
    "type": "complete"
}

Код:
{
    "type": "ka"
}


Python:
for index, game in enumerate(all_games):
    message = json.dumps(
            xxx: yyy
        )
    ws.send(message)
    result = ws.recv()

В result может прилететь один из трех ответов. Нужные данные дает только первый вариант, а два других нужно игнорить. Сейчас, если ответ не первый, цикл начинается со следующего элемента, а данные предыдущего не получены.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 583
457
83
можно отталкиваться от размера (длины) ответа, если она одинакова всегда...
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 583
457
83
они получены, вы просто перезаписали их новыми данными...
и если
Нужные данные дает только первый вариант, а два других нужно игнорить
то зачем вам сохранять другие ответы, кроме нужного?
 

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Дело в том, что нужный ответ вебсокета, как я понял, прилетает немного с опозданием относительно запроса. А второй и третий варианты - это вообще служебные вебсокета, они прилетают рандомно и не несут никакой нагрузки, но сейчас их приход сбивает весь цикл. Думаю, что можно все это завернуть в while, но какое условие выставить?

Python:
for index, game in enumerate(all_games):
    message = json.dumps(
            xxx: yyy
        )
    ws.send(message)
    result = ws.recv()
    while result != 'условие':
        ws.send(message)
        result = ws.recv()
 

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
можно отталкиваться от размера (длины) ответа, если она одинакова всегда...
Да, спасибо, if len(result) > 2: break работает) А я пытался вхождение ключа в словарь проверить, но все как-то не так работало)
 

Форум IT Специалистов