ejabberd: порождает собственный процесс и направляет результат обратно клиенту - PullRequest
0 голосов
/ 07 января 2020

С тех пор ejabberd больше не поддерживает опцию iqdis c. Я пытаюсь создать свою собственную очередь для обработки всех iq-пакетов с пользовательским пространством имен и возврата результата обратно клиенту. Я могу порождать свой собственный процесс, запускать функции и получать результат. Но процесс завершается с ошибкой:

09:07:42.850 [error] Failed to route packet:
#iq{id = <<"5b660017-c52c-4fe8-8a56-213c1a86bc12-3">>,type = get,
    lang = <<"en">>,
    from =
        #jid{
            user = <<"check">>,server = <<"localhost">>,
            resource = <<"64195176449188261912514">>,luser = <<"check">>,
            lserver = <<"localhost">>,
            lresource = <<"64195176449188261912514">>},
    to =
        #jid{
            user = <<>>,server = <<"localhost">>,resource = <<>>,luser = <<>>,
            lserver = <<"localhost">>,lresource = <<>>},
    sub_els =
        [#xmlel{
             name = <<"....
......
.......
exception error: no try clause matching ok
   in function  gen_iq_handler:process_iq/4 (src/gen_iq_handler.erl, line 110)
   in call from ejabberd_router:do_route/1 (src/ejabberd_router.erl, line 399)
   in call from ejabberd_router:route/1 (src/ejabberd_router.erl, line 92)
   in call from ejabberd_c2s:check_privacy_then_route/2 (src/ejabberd_c2s.erl, line 842)
   in call from xmpp_stream_in:process_authenticated_packet/2 (src/xmpp_stream_in.erl, line 697)
   in call from xmpp_stream_in:handle_info/2 (src/xmpp_stream_in.erl, line 392)
   in call from p1_server:handle_msg/8 (src/p1_server.erl, line 696)
   in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 249)

Пакет, показанный выше, передается от клиента к серверу: мне это нравится. Я использую последнюю версию ejabberd: 19.09.1 ​​Я думаю, у меня проблемы с маршрутизацией ответа iq-пакета обратно клиенту? Я что-то здесь упускаю? Пакет мне кажется нормальным. Каков идеальный способ выделить очередь для обработки всех iq-пакетов в пользовательском пространстве имен и затем вернуть ответы обратно клиенту, не блокируя при этом основную очередь, чтобы ejabberd мог по-прежнему обрабатывать другие входящие пакеты.

Буду очень признателен за любые идеи / указатели. Спасибо!

1 Ответ

0 голосов
/ 07 января 2020

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

...