Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Общие разговоры о Miranda NG => Topic started by: Oneiron on 01 10 2014, 15:08:07

Title: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 01 10 2014, 15:08:07
Использую Openfire + Monitoring service в качестве сервера XMPP. Клиент - Miranda NG, 0.95.3 с доменным входом.
Проблема следующая - при использовании XEP-0136 вся история переписки дублируется, при первом подключении миранда скачивает всю историю с сервера. Если окно закрыть и открыть заново - все сообщения упорядочиваются и идут попарно.

Пытаясь избавиться от этой проблемы решил хранить историю только на сервере и получать за неделю при первом обращении. Возникла еще одна проблема - похоже, что сервер отдает историю единым пакетом, не слишком соблюдая последовательность разговоров. Из-за этого свежие сообщения оказываются между устаревшими, причем метки времени на них стоят верные - если окно закрыть и открыть, то история упорядочивается и последние сообщения оказываются там где и должны быть. До следующего скачивания с сервера.

У меня есть несколько вариантов решения этой проблемы, сгодится любой. Вопрос в следующем:
1. Возможно ли получать сообщения не при первом открытии окна контакта, а с помощью нажатия кнопки на панельке?
2. Возможно ли получать сообщения сразу при запуске миранды?
3. Заставить historyPP упорядочивать сообщения сразу после получения или по расписанию?
4. Удалять дубликаты в истории при первом запуске миранды?
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 01 10 2014, 19:01:01
хочу:
1. историю контакта перед заливкой
2. network log после заливки
3. историю контакта после заливки

или доступ к серверу
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 02 10 2014, 05:05:11
Доступ к серверу предоставить сложновато, но возможно. Вам какого уровня доступ нужен, к серверу выполняющему openfire или только непосредственно к веб-интерфейсу openfire?

Проблема еще и в том, что история не сразу приходит нормальная. Ее миранда сортирует только если открыть и закрыть окно. Тоже не знаю, как с этим бороться.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 02 10 2014, 17:45:05
мне нужно просто к этому серверу прилогиниться своей мирандой. желательно на выходных
за файлы спасибо, посмотрим
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 02 10 2014, 18:35:03
Хорошо. Завтра я перенесу сервер на debian с kerberos в качестве аутентификатора, и тогда старый виндовый можно будет использовать в качестве тестовой площадки. Достаточно будет пробросить 5222 порт наружу?
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: watcher on 02 10 2014, 18:43:56
Достаточно будет пробросить 5222 порт наружу?

Да, лишь бы свободно войти.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 03 10 2014, 08:52:34
ghazan, я вам отправил в личку JID и пароль. Порт пробросил, но протестить не с чего. Будем надеяться, что все отработает нормально.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 03 10 2014, 11:08:36
ghazan, я вам отправил в личку JID и пароль. Порт пробросил, но протестить не с чего. Будем надеяться, что все отработает нормально.
пока счастье не наступило. отправил лог
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 03 10 2014, 12:19:23
Поправил, теперь должно войти без проблем.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 03 10 2014, 12:42:54
Поправил, теперь должно войти без проблем.
Вошло, спасибо
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 04 10 2014, 14:32:48
Обнаружил крайне интересную вещь! Попытался я получить историю сообщений с сервера, подключившись через тот же адрес, который дал вам. Сервер находится в локальной сети, его имя, допустим, server.one
Сервер выглядывающий в интернет имеет имя bridge.one
В Miranda я не могу указать имя пользователя отличающимся, от имени сервера - т.е. указать имя как я@server.one а хост для подключения - bridge.one
Miranda просто не дает набрать @ в поле имени.
В результате Miranda определяет меня как я@bridge.one и запускает на сервер server.one, но историю не пересылает.

При этом Vacuum IM, в котором тоже есть поддержка XEP-0136, но можно указать имя "другого сервера" подключаясь к хосту. В результате история моментально втянулась.
Тогда я проверил еще одну вещь - подредактировал hosts, указав IP-адрес bridge.one как server.one
Подключился Мирандой к серверу server.one - и история моментально появилась.

Может быть, дать возможность вводить полный JID? Хотя бы опционально.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 04 10 2014, 14:50:36
В Miranda я не могу указать имя пользователя отличающимся, от имени сервера - т.е. указать имя как я@server.one а хост для подключения - bridge.one
Miranda просто не дает набрать @ в поле имени.
правильно не дает :) ибо нефиг(https://forum.miranda-ng.org/proxy.php?request=http%3A%2F%2Fi.imgur.com%2FXV0Yjd3.png&hash=c0796cbbaeb1ac3661ef9f4579b1c492c5cb950d)
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 04 10 2014, 15:22:11
А-а, вон где магия зарыта :)
А я все никак не понимал - на кой нужон тот connection host
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 06 10 2014, 04:20:11
Ну что, как там дела обстоят с выходными работами?
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 06 10 2014, 11:27:16
я вспомнил предыдущий заезд. краткое резюме - XEP-0136 говно :)

суть в том, что в жабере сервер не возвращает клиенту идентификатор отосланного сообщения.
соотв чистка дублей ведется исключительно по времени события, и, если время не совпадает, то заносится дубль.
а время на клиенте по atomic clock и у тебя на сервере расходится на 23 секунды, поэтому дубли исправно плодятся
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 06 10 2014, 18:09:31
Ой-ей... и какой у него временной порог? 0.1 секунды? :(
Синхронизировать время на всех машинах... бр-р-р, задачка не то чтобы трудная, но муторная.
И никаким костылем это подпереть не удастся? Как-то же с этим справляется Vacuum IM, дублей не плодит.

И еще одно, как мне историю-то сортировать? Она неправильно приходит, зараза :(
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 06 10 2014, 19:47:14
1 секунда.
История должна автоматом сортироваться по времени поступления.

не исключено, что vacuum вообще не держит локальной копии сообщений и всегда тупо грузит все с сервера
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 07 10 2014, 04:35:02
Дык в том-то и дело, что у меня она сортируется не по времени поступления а хй знает как... надо "хлопать окнами", чтобы оно нормально отрабатывало.
Скриншоты прилагаю.
На скриншоте "До" - то, что я получаю сразу же после открытия окна (история скачивается с сервера)
На скриншоте "После" - то, что отображается после того как я закрою окно и открою его снова.
Обратите внимание: метки времени верные, и поэтому все сортируется... но почему-то не сразу.

Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 07 10 2014, 09:54:58
Дык в том-то и дело, что у меня она сортируется не по времени поступления а хй знает как... надо "хлопать окнами", чтобы оно нормально отрабатывало.
Скриншоты прилагаю.
На скриншоте "До" - то, что я получаю сразу же после открытия окна (история скачивается с сервера)
На скриншоте "После" - то, что отображается после того как я закрою окно и открою его снова.
Обратите внимание: метки времени верные, и поэтому все сортируется... но почему-то не сразу.
ok, глянем.

кстати, о птичках - ты MAM не смотрел (XEP-0313)? есть его поддержка в сервере? если бы его поставить, можно было бы кошерное решение сделать, с хранением идентификаторов, исключающее дубли
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Magic on 07 10 2014, 10:10:33
В опенфайре, к сожалению, только 0136 поддерживается, плагином мониторинга.
А как получаются дубли, сервер разве не передает с сообщениями их таймштампы?
По идее же unix timestamp для сообщения не привязан к синхронизации времени, он записывается в базу 1 раз при сохранении сообщения?

Думаю тоже у себя сделать поддержку Xep-0136, но с такими спецэффектами ну ее нафиг(
Хоть среда и доменная, время отсинкано, но стремно.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 07 10 2014, 12:20:36
MAM сейчас поддерживается только Prosody, насколько я знаю. Ну и еще есть какой-то "фиг-знает-работает-ли" модуль для ejabberd. Ни то, ни другое мне не подходит, поскольку любая фигня будет привязана ко мне. Опенфайром-то кто хош рулить сможет.

Время синхронизировал на всем домене с 0.ru.pool.ntp. В домене у всех компьютеров время одно и то же, но! Дубли... остались.
Текущее время на \\мой.комп.local равно 07.10.2014 16:18:49
Текущее время на \\сервер.джаббер.local равно 07.10.2014 16:18:49

Post Merge: 08 10 2014, 11:41:47
Доступ к серверу по прежнему есть, так что можно тестить.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Oneiron on 28 10 2014, 07:31:26
ghazan, какие-нибудь обновления по моему вопросу? Пожа-а-а-алуйста :)
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: de1eted on 21 04 2015, 09:41:02
У меня заработало норм.
Просто удалил локальную историю переписки.
С других девайсов история подгружается только после релогона. Возможно имеет смысл реализовать подгрузку через таймаут, но и так хорошо!

 Миранда используется как корпоративный мессенджер, контакты на серваке, OpenFire.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Magic on 06 05 2015, 09:03:05
ok, глянем.

кстати, о птичках - ты MAM не смотрел (XEP-0313)? есть его поддержка в сервере? если бы его поставить, можно было бы кошерное решение сделать, с хранением идентификаторов, исключающее дубли
В Openfire 3.11.0 планируется поддержка MAM, судя по багтрекеру:
https://igniterealtime.org/issues/browse/OF-862

Можно ли в будущем ждать в миранде?
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: ghazan on 06 05 2015, 18:54:52
MAM - разумеется. как только появится сервер, на котором это можно тестить
что-то ejabberd не мычит и не телится пока
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: abyss on 20 11 2015, 06:54:51
Добрый день. Использую:
Code: [Select]
Miranda NG Version: 0.95.4 build #13028
Jabber.dll v.0.11.0.4 [22 Apr 2015 0:45:08] - Jabber protocol

совместно с Openfire 3.10.3 и monitoring plugin 1.4.5 в окружении AD, все клиенты и серверы синхронизируются с контроллерами домена, при мониторинге расхождение сотые/тысячные доли секунды между клиентом и сервером.
Но всё равно сообщения задваиваются. При просмотре истории таймштампы одинаковые (до секунд)
Судя по логу, сервер отдаёт таймштамп с точностью до тысячных секунд. И если мне не изменяет память, миранда тоже хранит таймштампы до тысячных. В результате не удивительно расхождение: таймштамп в xmpp не передаётся, соответственно назначенный мирандой всегда не совпадает с назначенным сервером (на передачу данных хоть тысячные секунды да тратятся)

Соответственно несколько вопросов:

1. Можно ли сделать в процедуре сравнения локальной истории и истории запрошенной с сервера округление до секунд?
2. Можно ли настройками протокола и комбинацией плагинов HistorySweeperLight и NoHistory сделать хранение истории только на сервере?
Я на самом деле пробовал это сделать сам, но если использовать NoHistory, то миранда вообще не запрашивает историю с сервера. А при использовании HistorySweeperLight происходит конфликт, т.к. при выходе история чистится, а при входе не забирается, т.к. протокол хранит(LastCollection) время на которое уже "типа получена" история с сервера и повторно её не забирает.

Так же подтверждаю проблему с неупорядочиванием сообщений в окне диалога при подгрузке истории. Даже была такая ситуация: пришло сообщение, я щелкаю по всплывшему окну, открывается окно диалога, запросилась история с сервера и вытеснила свежеполученное сообщение. Пришлось "хлопать окнами".

Кстати в monitoring plugin 1.4.7 для Openfire реализован MAM xep-0313, проверил, работает в Gajim. Но у меня остаётся вопрос, будет ли MAM панацеей от задваивания, т.к. id сообщений можно узнать только при запросе архива и соответственно не получится их сравнивать на предмет дубликатов, т.к. в архиве миранды этих id не будет.

Мне кажется нужно какое-то архитектурное решение хранения истории только на сервере и запрос по необходимости. MAM в этом конечно  сильно поможет в плане удобства запроса истории, построения календарика на котором видно за какие даты есть история и т.д.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: de1eted on 26 11 2015, 07:39:16
abyss, и я с такой же проблемой ковырялся.
Так что, +1.
Есть Xabber, который нормально с историей работает, но под Андроид.
Под виндой есть Vacuum-im, но там бедные настройки и выглядит не оч.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Davis on 04 12 2015, 14:39:20
+1
возьмите меня в компанию.
Такая же ситуация. Домен, время одинаковое, в истории дубли.

И еще явно связанный вопрос.
0.95.5 alpha build #15796
Первое после запуска открытие любого контакта отображает историю за время с прошлого запуска, т.е. за вчерашний день. Всю. Закрыть-открыть окно - начинают действовать настройки журнала беседы(60 минут). И так отдельно по каждому контакту.
Как следствие тяжелый случай: я обновляю саму миранду через политику. при этом удаляю и профиль, в автозапуск прописаны настройки и профиль создается автоматом. Но после этого при открытии любой беседы происходит загрузка и отображение ВСЕЙ истории контакта. Пока у меня тестовый период и то это у "болтливых" контактов занимает кучу времени.

Пока дописал сохранение .dat файла при обновлениях, но хотелось бы, конечно как-нибудь красиво жить.
Спасибо
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Davis on 17 12 2015, 14:47:52
А тут бывают разработчики?
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Evgenyatam on 20 12 2015, 19:42:21
А тут бывают разработчики?
иногда бывают, ghazan - один из них.
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: de1eted on 18 02 2016, 12:36:33
У ОпенФаера обновления вышли. Тут что-то про архивы говорят: https://community.igniterealtime.org/thread/58087
Title: Re: Дубликаты сообщений при использовании XEP-0136
Post by: Davis on 28 05 2016, 15:04:02
Я нашел ошибку - http://forum.miranda-ng.org/index.php?topic=4649.msg17078#msg17078