首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMPP:离线消息不是由对话接收的,而是由Gajim从ejabberd接收的。

XMPP:离线消息不是由对话接收的,而是由Gajim从ejabberd接收的。
EN

Stack Overflow用户
提问于 2018-03-24 16:52:55
回答 1查看 1K关注 0票数 2

基本情景

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

鲍勃被认为离线,当

代码语言:javascript
复制
ejabberdctl connected_users

没有列出他的名字。

然后,ejabberd将消息存储在脱机消息存储中。这是由下列机构检查的:

代码语言:javascript
复制
ejabberdctl get_offline_count bob example.com

/etc/ejabberd/ejabberd.yml中配置了mod_offline:

代码语言:javascript
复制
access:
  max_user_offline_messages:
    admin: 5000
    all: 100
...
modules:
  mod_offline:
    access_max_user_messages: max_user_offline_messages
...

案例A:

Bob使用gajim1.0.0连接到服务器。他收到离线消息

代码语言:javascript
复制
ejabberdctl get_offline_count bob example.com

返回0(连接前它是>0 ),日志(/var/log/ejabberd/ejabberd.log)说:

代码语言:javascript
复制
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使用会话1.23.8连接到服务器。他没有收到离线消息,但是

代码语言:javascript
复制
ejabberdctl get_offline_count bob example.com

无论如何,返回0(连接前它是>0 ),日志(/var/log/ejabberd/ejabberd.log)没有类似于A的条目。

问题:

我已经做了几天了。我查看了服务器的配置和客户端的配置,根据我的经验,这是会话客户端的一个问题,但我现在不知道该在哪里查找。我应该在ejabberd.log中查找哪些日志消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-25 16:57:22

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

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

我的MAM配置是:

代码语言:javascript
复制
mod_mam:
  iqdisc: one_queue
  default: always
  assume_mam_usage: true

我没有更改我的mod_offline配置。

提示:当您这样做时,您还需要mod_ping和mod_stream_mgmt来检测丢失的连接并关闭会话,这样离线消息就会被mod_offline捕获并重新发送到mam。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49467337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档