2015-04-11 5 views
0

С веб-страницы ejabberd я узнаю, что можно расширить функциональность ejabberd, написав модули с помощью hooks/events и т. Д. Однако все примеры в erlang, которые я действительно не знаю, как использовать. Конечно, я могу научиться этому, но мой вопрос заключается в том, могу ли я вообще избежать этого. А именно, возможно следующее:http hook/callback с ejabberd

Я пишу некоторый сервер REST (используя что-то еще, например node.js/golang/python), а затем каким-то образом подключаю его к системе событий ejabberd.

Каков наилучший способ для этого? Любая ссылка на пример кода/учебник была бы замечательной!

Большое спасибо.

+0

Это похоже на вопрос, можете ли вы взломать основные модули ядра Linux, не будучи вынужденными использовать C. Кроме того, каждый язык, который вы упомянули, сосет * намного хуже * для записи как обработчиков событий *, так и * сетевого кода, чем тот, который уже написан в ejabberd, - что очень помогает объяснить, почему он был написан в Erlang для начала. Если бы Эрланг был тяжелым, я бы, возможно, заметил, но, написав сетевые сервисы на нескольких языках, я уверен, что изучение Erlang намного проще, чем создание надежной сетевой службы, которая делает что-то нетривиальное на большинстве других языков. – zxq9

+0

Я понимаю, что erlang замечательный, но есть и другие причины, по которым вы можете выбрать другие языки, одним из которых является наличие компонентов с полки, которые экономят много времени разработки. Предположим, я хочу написать своего рода бота. Будет что-то вроде этой работы? Напишите минимальный крючок в erlang, который по сути вызывает удаленный сервер REST. Затем сервер переходит к кластеру ejabberd, используя какой-то клиентский api. – brian

+1

Если вы хотите запустить службу чата, которая еще не существует, и присоединить к ней бота, который еще не существует, и вы не хотите использовать Erlang, если это возможно, тогда я бы рекомендовал использовать сервер чата, который не является ejabberd (или на основе Erlang). Если вам нужно * использовать ejabberd или MongooseIM или какой-либо сервис XMPP по какой-либо причине, и хотите присоединить бота, я бы рекомендовал вам использовать клиентскую библиотеку XMPP в OtherLang, подключиться через XMPP и реагировать на события (что означает, что вы, вероятно, можете булыться существующий IRC-бот, переписывая только биты IRC). – zxq9

ответ

0

Это зависит от того, какую функцию вы хотите написать. Для некоторых модулей вы можете использовать внутренний API. Обратите внимание, что вы можете использовать Erlang или Elixir, что намного проще. Например, вот как написать модуль Elixir: https://blog.process-one.net/elixir-sips-ejabberd-with-elixir-part-1/

Другой подход заключается в использовании протокола компонента Jabber XMPP. Он более ограничен, но позволяет писать компоненты XMPP на любых языках. Ниже приведено описание протокола компонента Jabber, поддерживаемого ejabberd: http://xmpp.org/extensions/xep-0114.html

Смежные вопросы