Erlang ejabberd:生成自己的进程并将结果路由回客户端

Erlang ejabberd:生成自己的进程并将结果路由回客户端,erlang,xmpp,ejabberd,spawn,ejabberd-module,Erlang,Xmpp,Ejabberd,Spawn,Ejabberd Module,因为,ejabberd不再支持iqdisc选项。我试图创建自己的自定义队列,用自定义名称空间处理所有iq数据包,并将结果返回给客户端。 我能够生成自己的进程,运行函数并获得结果。但该过程最终失败,出现以下错误: 09:07:42.850 [error] Failed to route packet: #iq{id = <<"5b660017-c52c-4fe8-8a56-213c1a86bc12-3">>,type = get, lang = <<"e

因为,ejabberd不再支持iqdisc选项。我试图创建自己的自定义队列,用自定义名称空间处理所有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)

09:07:42.850[错误]无法路由数据包:
#iq{id=,type=get,
朗=,
从=
#吉德{
用户=,服务器=,
资源=,luser=,
lserver=,
lresource=},
到=
#吉德{
用户=,服务器=,资源=,luser=,
lserver=,lresource=},
子单元=
[#xmllel{
name=我明白了。
生成的进程未返回所需的结果,因此请求失败。

我仍在试图找出如何处理多个数据包(针对不同的名称空间)立即在ejabberd上运行,这样我就可以将所有数据包运行到我的自定义名称空间,以便在单个队列上运行。

您的目的地为空;我希望
ejabberd
无法理解消息路由到何处。请确保
to
键in
iq
下的值至少包含
user
字段。上面显示的数据包从客户端到服务器:这在我看来很好。ejabberd模块抱怨由于某种原因无法处理此数据包。是否有更好的方法生成进程并让它将数据包返回到客户端?