LINUX.ORG.RU

Реконнект при таймауте соединения в xmpp-python

 ,


1

1

Как реализовать, собственно? Есть код - https://gist.github.com/anonymous/5152863
Пока запилил так, но оно не работает -

while True:
    if (xmpp.protocol.ConnectionTimeout == "connection-timeout"):
        client.disconnect()
        client.connect()
        client.auth(jid.getNode(),password)
    client.Process(1)
Я в питоне нуб, поэтому не работать может и поэтому.
Хэлп ми

★★★
Ответ на: комментарий от netcat

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

kostett ★★★
() автор топика
Ответ на: комментарий от netcat
while True:
    client.RegisterDisconnectHandler(client.reconnectAndReauth())
    client.Process(1)

вечный реконнект :( *** добавлено: я тормоз, добавил в

client.RegisterHandler('message',message)
client.RegisterDisconnectHandler(client.reconnectAndReauth())
client.sendInitPresence()
пока работает :) спасибо

kostett ★★★
() автор топика
Последнее исправление: kostett (всего исправлений: 1)
Ответ на: комментарий от netcat

не, не работает :( пропал бот из онлайна, снова мне на работу придется ехать >_< неужели нет способа запилить такую простую фигню, которая есть в любом клиенте?

kostett ★★★
() автор топика
Ответ на: комментарий от kostett

пропал бот из онлайна

Причины тому могут быть разные. Посмотри, что в логе написано.

неужели нет способа запилить такую простую фигню, которая есть в любом клиенте?

DO NOT PANIC.

netcat ★★
()
Последнее исправление: netcat (всего исправлений: 2)
Ответ на: комментарий от netcat

вывод скрипта же в /dev/null перенаправляется, есть где-то еще дебаг?
вообще, машинка работает в средних масштабов локалке, через четверку свитчей выходит на роутер, который подключен к адслу. Собстна, коннект со шлюзом (он же DNS) никода не прерывается, а самому шлюзу наш добрый ростелеком пару раз в день рвет коннект с интернетом и он переподключается со сменой айпишника. Бот, видимо, такую тему не просекает и думает, что он все еще подключен (эхо-реквесты, по дефолту либа, похоже, не шлет). Вижу один выход: заставить либу слать эхо-реквесты и чтобы их неудачи как-то попадали в хэндлер, который ты предложил. Есть идеи, как запилить такое?

kostett ★★★
() автор топика
Ответ на: комментарий от kostett

XEP-0199. SleekXMPP поддерживает это расширение, хотя и самому написать не сложно. Еще сервер может пинги слать, к примеру ejabberd можно настроить на отключение клиентов, которые не отвечают.

anonymous
()
Ответ на: комментарий от anonymous

на jabber.ru последнее работает - клиент перестает показываться в онлайне. Но сам клиент думает, что он все еще подключен к серверу.
а ХЕР сча гляну.. не слышал о таком, спасибо

kostett ★★★
() автор топика
Ответ на: комментарий от kostett

Можешь добавить функцию, которая будет пинговать сервер каждые n секунд, и если что, вызывать client.ReconnectAndReauth(), и вынести ее в отдельный thread.

netcat ★★
()
Ответ на: комментарий от netcat

пока на википедии читаю, уже половину прочитал

kostett ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.