#python #websocket
#python #websocket
Вопрос:
import json
import amino
from websocket import create_connection
from time import time as timestamp
client = amino.Client()
client.login(email=<email>, password=<password>)
subclient = amino.SubClient(comId=<comid>, profile=client.profile)
def listen():
ws = create_connection(
f"wss://ws1.narvii.com?signbody={client.device_id}|{timestamp() * 1000}amp;sid={client.sid}")
while True:
data = json.loads(ws.recv())
if data["t"] == 1000 and data["o"]["chatMessage"]["type"] == 0:
try:
if data["o"]["chatMessage"]["content"] == "!ping":
subclient.send_message(chatId=data["o"]["chatMessage"]["threadId"], message="Pong!")
print(data["o"]["chatMessage"]["content"])
except:
print("ERROR")
listen()
Проблема в том, что после 5 минут успешной работы он по какой-то причине перестает получать сообщения из чатов, при этом программа не вылетает. В чем может быть проблема и как ее исправить?
Комментарии:
1. вы уверены, что удаленный сайт не ограничивает скорость запросов?
2. Может быть тайм-аут прокси / сервера. В зависимости от вашей конфигурации, если обмен данными некоторое время не происходит, возникает тайм-аут (обычно через 50 секунд или около того), в результате чего посредник / сервер отключает сокет. Решение этой проблемы часто заключается в том, чтобы выполнить пинг сокета до истечения времени ожидания.
3. @Myst Да, я слышал об этом, могу ли я привести пример того, как решить эту проблему?
4. @lynx1 — Я не эксперт по python, но я думаю, вам нужно будет либо использовать другой цикл / подход, либо настроить пинг с сервера. Прямо сейчас вы блокируете on
read
, что не позволит вам просмотреть возможный тайм-аут или отправлять сообщения ping. Вы могли бы добавить еще один поток, который будетsleep(40)
и отправлятьping
, но это было бы грязным и расточительным взломом.