代码之家  ›  专栏  ›  技术社区  ›  kiigass

XMPP:离线消息不是通过对话接收的,而是由ejabberd的Gajim接收的

  •  2
  • kiigass  · 技术社区  · 7 年前

    基本场景

    Bob离线时,Alice使用Conversations 1.23.8作为客户端向他发送消息。服务器正在debian上运行ejabberd 18.01。

    Bob被视为离线,当

    ejabberdctl connected_users
    

    没有列出他的名字。

    然后,ejabberd将消息存储在脱机消息存储中。检查人:

    ejabberdctl get_offline_count bob example.com
    

    在里面 /etc/ejabberd/ejabberd.yml mod\u offline已配置:

    access:
      max_user_offline_messages:
        admin: 5000
        all: 100
    ...
    modules:
      mod_offline:
        access_max_user_messages: max_user_offline_messages
    ...
    

    案例A:

    Bob使用gajim 1.0.0连接到服务器。他接收脱机消息

    ejabberdctl get\u offline\u count bob示例。com公司
    

    返回0(连接之前为>0)和日志( /var/log/ejabberd/ejabberd.log )表示:

    2018-03-24 17:32:10.132 [debug] <0.4422.0>@xmpp_socket:send:218 (tls|<0.4422.0>) Send XML on stream = <<"<message xml:lang='en' to='bob@example.com/gajim.8FNGJDH5' from='alice@example.com/phone' type='chat' id='643ah4c3-8920-4c52-82b1-89s6f759vff7'><request xmlns='urn:xmpp:receipts'/><markable xmlns='urn:xmpp:chat-markers:0'/><origin-id xmlns='urn:xmpp:sid:0' id='643ah4c3-8920-4c52-82b1-89s6f759vff7'/><active xmlns='http://jabber.org/protocol/chatstates'/><delay from='example.com' stamp='2018-03-24T16:31:54.745016Z' xmlns='urn:xmpp:delay'>Offline storage</delay><body>This is my message.</body></message>">>
    

    到目前为止,一切顺利。

    案例B:

    Bob使用Conversations 1.23.8连接到服务器。他没有收到脱机消息,但

    ejabberdctl get\u offline\u count bob示例。com公司
    

    返回0(在连接之前为>0)和日志( /var/log/ejabberd/ejabberd。日志 )没有类似于案例A的条目。

    问题:

    我已经为此工作了几天了。我调查了服务器的配置和客户端的配置。根据我的经验,我认为这是对话客户端的问题,但我不知道现在该去哪里查找。我应该在ejabberd中查找什么日志消息。日志

    1 回复  |  直到 7 年前
        1
  •  1
  •   kiigass    7 年前

    对话1.23.8似乎不支持脱机消息(XEP-0160),但它支持消息存档管理(MAM-XEP-0313)。

    现在,我的解决方案是将脱机消息重定向到MAM,客户端在连接到服务器时与其MAM同步。提示:默认情况下,在ejabberd 18.01中禁用MAM。

    我的MAM配置为:

    mod_mam:
      iqdisc: one_queue
      default: always
      assume_mam_usage: true
    

    我没有更改mod\u脱机配置。

    提示:执行此操作时,还需要mod\u ping和mod\u stream\u mgmt来检测丢失的连接并终止会话,以便mod\u offline捕获脱机消息并将其重新发送到mam。