ejabberd:生成自己的进程并将结果路由回客户端
ejabberd: spawn own process and route the result back to client
从那以后,ejabberd 不再支持 iqdisc 选项。我正在尝试创建自己的自定义队列来处理所有具有自定义命名空间的 iq 数据包,并将结果 return 返回给客户端。
我能够生成自己的进程和 运行 函数并获得结果。但该过程最终失败并出现以下错误:
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-packet 响应路由回客户端时遇到了问题?我在这里还缺少其他东西吗?这个包对我来说似乎很好。什么是专用队列来处理所有 iq 数据包到自定义命名空间然后 return 将响应返回给客户端的理想方法,同时不阻塞主队列,以便 ejabberd 仍然可以处理其他传入数据包。
任何 ideas/pointers 将不胜感激。谢谢!
我想通了。
生成的进程未返回所需的结果,因此请求失败。
我仍在尝试弄清楚如何在 ejabberd 上一次处理多个数据包(针对不同的名称空间),以便我可以 运行 所有数据包到我的自定义名称空间到 运行 在单个队列上。
从那以后,ejabberd 不再支持 iqdisc 选项。我正在尝试创建自己的自定义队列来处理所有具有自定义命名空间的 iq 数据包,并将结果 return 返回给客户端。 我能够生成自己的进程和 运行 函数并获得结果。但该过程最终失败并出现以下错误:
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-packet 响应路由回客户端时遇到了问题?我在这里还缺少其他东西吗?这个包对我来说似乎很好。什么是专用队列来处理所有 iq 数据包到自定义命名空间然后 return 将响应返回给客户端的理想方法,同时不阻塞主队列,以便 ejabberd 仍然可以处理其他传入数据包。
任何 ideas/pointers 将不胜感激。谢谢!
我想通了。 生成的进程未返回所需的结果,因此请求失败。 我仍在尝试弄清楚如何在 ejabberd 上一次处理多个数据包(针对不同的名称空间),以便我可以 运行 所有数据包到我的自定义名称空间到 运行 在单个队列上。