Добрый день.
Пробую подключить 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 сервере? Другие клиенты не отваливаются.
По идее надо отправлять KeepAlive пакеты... но я не нашел подобной настройки.
Но что то мне подсказывает, что сервер не должен быть on-line. Должен просто подключаться каждый раз при отправке. А если включить дебаг в OpenFire, то при попытке отправки что то будет видно?
Сервер не должен быть в онлайне для отправки сообщений, но вот для получения команд в онлайне быть обязан)))
Сейчас все хорошо работает, как раз с помощью дебага openfire выяснилось, что по бездействию происходит отключение NetXMS клиента. Таймаут бездействия на OpenFire отключил - сервер вроде в онлайне всегда. Но, я так понимаю, что этот таймаут должен отключать повисшие сеансы, когда программа-клиент вылетела и сокет не закрыт корректно. Конечно же могу ошибаться, я не сильно вникал в работу XMPP со всеми его XEP, но надеюсь мыслю в верном направлении.
В общем нужен некий reconnect. Например у меня сервер xmpp на ночь отключается за ненадобностью, наверно после такого отключения NetXMS не вернется в онлайн, сегодня проверю.
Хватило на несколько часов и опять отвалился без видимой причины. Поставил дебаг на обоих серверах, посмотрим, что скажут.
По логам тоже ничего внятного не увидел.
Это последнее по 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), то подскажите как.
Заранее спасибо.
Костыль конечно... но попробуй чем нить посылать левые запросы на сервер. Это должно спасти...
Необходимые изменения будут добавлены вместе с исправлением этой https://dev.raden.solutions/issues/806 ошибки.
Проверьте в следующем релизе(2.0-М5). Необходимые изменения для возобновления соединения были внесены в код.
Quote from: Tatjana Dubrovica on June 11, 2015, 01:40:53 PM
Проверьте в следующем релизе(2.0-М5). Необходимые изменения для возобновления соединения были внесены в код.
Спасибо, работает, переподключается при отключении.
Всем привет.
Вынужден снова поднять эту тему.
Понаблюдал я немного за поведением модуля xmpp(далее бот) и вот что выходит на текущий момент:
- xmpp бот периодически отваливается от сервера. С релизом 2.0-М5 он научился возвращаться в онлайн.
- данные манипуляции он совершает от нескольких часов до нескольких суток, но в итоге оказывается в оффлайне.
- если бота нет в сети, но NetXMS создал тревогу, по которой в качестве действия отправка xmpp, то наш маленький герой в этот миг появляется в онлайне, правда сообщение не отсылает
- также замечено, что он может вывалится и тут же вернуться в момент тревоги, но также без оповещения.
- находясь в онлайне может не отвечать на запросы. Если перезагрузить сервер, то ответит на все, что не прочитал ранее.
Я снова погрешил на свой OpenFire и попробовал отправлять уведомления через общественный джаббер.ру, который работает на Ejabberd, но ситуация повторилась.