Как получить ответ «pong» на вызов «ping» с помощью библиотеки Python websockets? - PullRequest
3 голосов
/ 05 марта 2020

У меня есть приложение, которое подключается к веб-сокету и время от времени получает от него некоторую информацию. В некоторых случаях может случиться, что мое приложение ничего не получит в течение относительно длительного времени. В этом случае я могу заподозрить, что веб-сокет "умер". Тем не менее, это также может быть случай, когда веб-сокету просто не нужно ничего отправлять, и мне просто нужно подождать дольше.

Итак, в таких ситуациях я не хочу догадываться, в чем причина задержка. Я просто хочу «активно» спросить веб-сокет, жив ли он еще. Я узнал, что это можно сделать с помощью «ping», но я не уверен, как именно это работает.

Например, я могу сделать следующее:

pong_waiter = await ws.ping()

Но что я должен делать с этим объектом? Я думаю, мне нужно увидеть строку "pong", когда веб-сокет жив, но где я могу его увидеть? Что возвращает эту строку?

ДОБАВЛЕНО

Если я выполню:

pong_waiter = await ws.ping()
await pong_waiter

Я ничего не получил. После этого я также выполняю:

pong_waiter.result()

Это также ничего не возвращает. Но я знаю, какой веб-сокет жив (я все еще получаю информацию от него).

ДОБАВЛЕНО 2

Если я выполню:

pong_waiter

Я получу:

<Future finished result=None>

Итак, где же «понг»?

1 Ответ

2 голосов
/ 05 марта 2020

Вам следует await, если вы хотите дождаться pong:

pong_waiter = await ws.ping()
await pong_waiter

Если вы ожидаете, что pong будет содержать пользовательскую полезную нагрузку, вы, скорее всего, сможете получить ее из pong_waiter Future, позвонив result() после его завершения.

...