XMPP

Started by maxwal, May 28, 2015, 01:21:28 PM

Previous topic - Next topic

maxwal

Добрый день.
Пробую подключить XMPP.
После запуска сервера сообщения отправляются и принимаются.
Примерно минут через 5 пользователь вываливается с сервера и больше не подключается.

По debug 6 вываливается:
[28-May-2015 12:46:45.982] [DEBUG] XMPP: RECV: </stream:stream>
[28-May-2015 12:46:45.982] [DEBUG] XMPP: Closing socket.
[28-May-2015 12:46:45.982] [DEBUG] XMPP: disconnected
[28-May-2015 12:46:45.982] [DEBUG] XMPP: Stopping event loop.


Только что нашел источник такого глюка. На xmpp сервере(OpenFire) стояла настройка на разрыв соединения при простое клиента больше 360 секунд.
Так что теперь у меня другой вопрос: как сделать так, чтобы NetXMS не находился в состоянии idle на xmpp сервере? Другие клиенты не отваливаются.




kozlov_ao

#1
По идее надо отправлять KeepAlive пакеты... но я не нашел подобной настройки.

Но что то мне подсказывает, что сервер не должен быть on-line. Должен просто подключаться каждый раз при отправке. А если включить дебаг в OpenFire, то при попытке отправки что то будет видно?

maxwal

#2
Сервер не должен быть в онлайне для отправки сообщений, но вот для получения команд в онлайне быть обязан)))
Сейчас все хорошо работает, как раз с помощью дебага openfire выяснилось, что по бездействию происходит отключение NetXMS клиента. Таймаут бездействия на OpenFire отключил - сервер вроде в онлайне всегда. Но, я так понимаю, что этот таймаут должен отключать повисшие сеансы, когда программа-клиент вылетела и сокет не закрыт корректно. Конечно же могу ошибаться, я не сильно вникал в работу XMPP со всеми его XEP, но надеюсь мыслю в верном направлении.

В общем нужен некий reconnect. Например у меня сервер xmpp на ночь отключается за ненадобностью, наверно после такого отключения NetXMS не вернется в онлайн, сегодня проверю.

maxwal

Хватило на несколько часов и опять отвалился без видимой причины. Поставил дебаг на обоих серверах, посмотрим, что скажут.

maxwal

По логам тоже ничего внятного не увидел.

Это последнее по NetXMS
[29-May-2015 01:52:18.388] [DEBUG] XMPP: RECV: <presence id="y82e8-67" to="[email protected]" type="unavailable" from="[email protected]/androidfl918JHf"><c hash="sha-1" xmlns="http://jabber.org/protocol/caps" ver="GyIX/Kpa4ScVmsZCxRBboJlLAYU=" node="http://www.igniterealtime.org/projects/smack/"/></presence>

А это по OpenFire

2015.05.29 01:49:59 org.jivesoftware.util.Log - getConversation: SELECT_CONVERSATIONS: org.hsqldb.jdbc.jdbcPreparedStatement@4e42c2[sql=[SELECT DISTINCT ofConversation.conversationID, ofConversation.room, ofConversation.isExternal, ofConversation.startDate, ofConversation.lastActivity, ofConversation.messageCount, ofConParticipant.joinedDate, ofConParticipant.leftDate, ofConParticipant.bareJID, ofConParticipant.jidResource, ofConParticipant.nickname, case when ofConParticipant.bareJID=ofMessageArchive.fromJID then ofMessageArchive.fromJID else ofMessageArchive.toJID end as fromJID, case when ofConParticipant.bareJID=ofMessageArchive.toJID then ofMessageArchive.fromJID else ofMessageArchive.toJID end as toJID FROM ofConversation INNER JOIN ofConParticipant ON ofConversation.conversationID = ofConParticipant.conversationID INNER JOIN ofMessageArchive ON ofConParticipant.conversationID = ofMessageArchive.conversationID WHERE ofConParticipant.bareJID = ? AND (ofMessageArchive.toJID = ? OR ofMessageArchive.fromJID = ?) AND ofConversation.startDate = ? ], parameters=[[[email protected]], [[email protected]], [[email protected]], [1432851118499]]]

А потом тишина. На всякий пожарный обновил OpenFire до последнего, но это не помогло. Нужно переподключение клиента XMPP. Если можно организовать самостоятельно(например перезапускать модуль XMPP), то подскажите как.
Заранее спасибо.


kozlov_ao

#5
Костыль конечно... но попробуй чем нить посылать левые запросы на сервер. Это должно спасти...

Tatjana Dubrovica

Необходимые изменения будут добавлены вместе с исправлением этой https://dev.raden.solutions/issues/806 ошибки.

Tatjana Dubrovica

Проверьте в следующем релизе(2.0-М5). Необходимые изменения для возобновления соединения были внесены в код.

maxwal

Quote from: Tatjana Dubrovica on June 11, 2015, 01:40:53 PM
Проверьте в следующем релизе(2.0-М5). Необходимые изменения для возобновления соединения были внесены в код.

Спасибо, работает, переподключается при отключении.

maxwal

Всем привет.
Вынужден снова поднять эту тему.
Понаблюдал я немного за поведением модуля xmpp(далее бот) и вот что выходит на текущий момент:

- xmpp бот периодически отваливается от сервера. С релизом 2.0-М5 он научился возвращаться в онлайн.
- данные манипуляции он совершает от нескольких часов до нескольких суток, но в итоге оказывается в оффлайне.
- если бота нет в сети, но NetXMS создал тревогу, по которой в качестве действия отправка xmpp, то наш маленький герой в этот миг появляется в онлайне, правда сообщение не отсылает
- также замечено, что он может вывалится и тут же вернуться в момент тревоги, но также без оповещения.
- находясь в онлайне может не отвечать на запросы. Если перезагрузить сервер, то ответит на все, что не прочитал ранее.

Я снова погрешил на свой OpenFire  и попробовал отправлять уведомления через общественный джаббер.ру, который работает на Ejabberd, но ситуация повторилась.