У меня есть приложение xmpp/ejabberdb, которое использует внешнюю службу для предоставления событийных функций, но когда эта служба становится недоступной, я хочу отключить/выйти из всех моих клиентов. Это возможно? Как?Выйти клиентов из XMPP
ответ
Я получил работу, как мне было нужно. На самом деле, я не нашел простого способа заставить мой собственный сервер выйти из всех подключенных пользователей, учитывая какую-то ситуацию, поэтому я вникнул в код ejabberd и понял способ сделать это сам.
В модуле ejabberd_c2s.erl, когда клиент выходит из системы или его сокет по какой-либо причине отбрасывается, FSM завершается, выполняя всю необходимую очистку для поддержания согласованности ejabberd.
Что мне нужно было сделать, так это просто создать выгруженную функцию shutdown/1 в этом модуле, которая вызывает gen_fsm: send_all_state_event/2, отправляя сигнал для ее завершения. Что касается каждого подключения, то есть один процесс c2s, мне нужно вызвать эту функцию для каждого пользователя.
--- ОБНОВЛЕНИЕ --- На самом деле нет никакой необходимости создавать эту функцию выключения, так как ejabber_c2s уже имеет возможность обрабатывать «закрытые» сигнал, который делает то же самое. Таким образом, вместо создания функции shutdown достаточно просто выполнить ge_fsm: send_event (C2SPid, closed). --- ОБНОВЛЕНИЕ ---
Чтобы обнаружить C2s PID процесса пользователя я просто использовать ejabberd_sm: get_session_pid/1 или ejabberd_sm: dirty_get_sessions_list/0 (для всех сеансов).
Это работало отлично для меня, но если у кого-то есть лучшая идея, добавьте сюда.
Thanks
Я не знаю специфики ejabberd, но вы можете написать собственный компонент XMPP, который опросит внешнюю службу (или прослушивает события присутствия, если это другой компонент XMPP), а затем выгружает пользователей, когда служба становится недоступной.
- 1. Заблокировать других обычных клиентов xmpp при входе в систему XMPP
- 2. Использование AppEngine XMPP для уведомлений клиентов
- 3. Получение истории чата Facebook для мобильных клиентов xmpp
- 4. Как я могу выйти/выйти из PostgreSQL?
- 5. Неужели Node-XMPP бесполезен? Выбор сервера XMPP
- 6. Как мы можем завершить сеанс пратикулярного пользователя в XMPP и выйти из чата
- 7. Один из многих чатов с XMPP
- 8. Выйти из другой деятельности
- 9. Как выйти из билайн?
- 10. Выйти из нескольких приложений
- 11. Выйти из сценария многопроцессорности
- 12. Как выйти из Subshell
- 13. Как выйти из класса
- 14. Как выйти из цикла?
- 15. Выйти из jQtouch?
- 16. Выйти из Django Facebook?
- 17. Выйти из-под контроля
- 18. Выйти из родительской функции?
- 19. Как выйти из FBWebDialogs?
- 20. Как выйти из fbsession?
- 21. Как выйти из цикла
- 22. Как выйти из SWRevealViewController?
- 23. Как выйти из iframe
- 24. Выйти из SSO kerberos
- 25. Как выйти из рекурсии
- 26. Как выйти из Шибболета
- 27. Как выйти из Chroot
- 28. Как выйти из опр()
- 29. Как выйти из цикла
- 30. Выйти из Facebook
Пользовательский компонент XMPP - это именно то, что у меня есть. Дело в том, как я могу выйти из системы клиентов? Я не эксперт в XMPP/Ejabberd, поэтому я бы хотел узнать, как я автоматически выхожу из системы. – RobisonSantos