【问题标题】:why ejabberd not sending messages to client after receiving messages?为什么ejabberd在收到消息后不向客户端发送消息?
【发布时间】:2020-12-28 15:45:01
【问题描述】:

我正在使用 REST API /api/send_message 从 android 设备向 ejabbered 服务器发送消息,并在服务器端成功接收,但在收到 ejabberd 服务器未发送到客户端的消息后.我正在从客户端发送这样的消息: 192.168.1.24:5443/api/send_message?"type"= "normal",&"from"= "admin@faiqkhan-Virtualbox",&"to"= "faiq@faiqkhan-Virtualbox",&"subject"= "Restart",&"body"="In 5 minutes" 我还在 ejabberd 上登录 on_user_send_packet lister 并打印数据包的数据,显示的数据与我从客户端发送的数据相同。 我在 android 中使用 smack 库。 我收到消息的服务器端模块部分:

on_user_send_packet({#message{from = From, body = Body, 
    subject = Subject} = Packet, C2SState}) ->
      ?INFO_MSG("mod_stanza_ack message packet: ~p~n", [Packet]),
      ?INFO_MSG("mod_stanza_ack message subject: ~p~n", [Subject]),
      ?INFO_MSG("mod_stanza_ack message body ignored: ~p~n", [Body])
    end,
    {Packet, C2SState}.

服务器日志:

API call send_message [{<<"type">>,<<"normal">>},{<<"from">>,<<"67456efc-be57-4cbd-a176-527de2dce19d@faiqkhan-virtualbox">>},{<<"to">>,<<"e5d6d83c-ea77-4d10-aaac-4e0e38899ac2@faiqkhan-virtualbox">>},{<<"subject">>,<<"Restart">>},{<<"body">>,<<"In 5 minutes">>}] from ::ffff:192.168.1.46:51597
13:43:14.298 [info] mod_stanza_ack message packet: {message,<<"4325851467592961166">>,normal,<<>>,{jid,<<"67456efc-be57-4cbd-a176-527de2dce19d">>,<<"faiqkhan-virtualbox">>,<<>>,<<"67456efc-be57-4cbd-a176-527de2dce19d">>,<<"faiqkhan-virtualbox">>,<<>>},{jid,<<"e5d6d83c-ea77-4d10-aaac-4e0e38899ac2">>,<<"faiqkhan-virtualbox">>,<<>>,<<"e5d6d83c-ea77-4d10-aaac-4e0e38899ac2">>,<<"faiqkhan-virtualbox">>,<<>>},[{text,<<>>,<<"Restart">>}],[{text,<<>>,<<"In 5 minutes">>}],undefined,[],#{}}
13:43:14.298 [info] mod_stanza_ack message subject: [{text,<<>>,<<"Restart">>}]
13:43:14.298 [info] mod_stanza_ack message body ignored: [{text,<<>>,<<"In 5 minutes">>}]

尝试使用 smack 库的回调在客户端接收消息

public void newIncomingMessage(EntityBareJid from, Message message, Chat chat)

我错过了客户端的一些听众吗?

【问题讨论】:

    标签: android ejabberd smack asmack


    【解决方案1】:

    它对我来说可以正常工作。我注册账号adminfaiq,用Tkabber客户端登录faiq账号,然后我发送API查询:

    ejabberdctl send_message normal admin@localhost faiq@localhost Restart In5minutes
    

    客户端完美接收消息:

    <message to='faiq@localhost'
        from='admin@localhost'
        id='18338888910541408674'>
      <archived by='faiq@localhost'
        id='1599730686404819'
        xmlns='urn:xmpp:mam:tmp'/>
      <stanza-id by='faiq@localhost'
        id='1599730686404819'
        xmlns='urn:xmpp:sid:0'/>
      <body>In5minutes</body>
      <subject>Restart</subject>
    </message>
    

    您可以使用著名的 Jabber 桌面客户端(例如 Gajim 或 Psi)登录,以检查您的 API 调用是否正常工作。这样您就可以知道问题出在您的客户身上,还是出在哪里……

    【讨论】:

    • 收到关于 Psi 用户的消息。在 android 客户端查找问题。
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2014-11-03
    • 2019-12-31
    • 2015-04-07
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多