【发布时间】:2018-05-14 06:49:27
【问题描述】:
我在客户端或服务器端都启用了流管理。我有两个用户 A 和 B。两个用户都在线。然后用户 A 突然失去连接。但是 A 用户仍然在线出现在用户 B 和服务器上。在此期间,用户 B 在用户 A 上发送消息。这些消息不会丢失,但是当用户 A 再次出现在线时,它将在 2-3 分钟后收到这些消息。我将在离线存储和交付收据上收到消息节在 SM 存储上。此问题同样发生在一对一聊天和 mucLight 上。我需要定制任何 mongooseIM 模块吗?请指导我为什么用户在失去连接时收到延迟消息。是否可以将 SM 存储更改为离线存储 (MAM)。这是相同问题的链接我在此链接 (https://www.ejabberd.im/faq/tcp) 上发现了相同的问题,但没有丢失我的消息,只是收到延迟。
我在我的 Android 应用上使用smack-4.2 lib。下面的代码用于在XMPPTCPConnection 中启用流管理。
static{
XMPPTCPConnection.setUseStreamManagementDefault(true);
XMPPTCPConnection.setUseStreamManagementResumptionDefault(true);
}
这是我的 ejabbered.cfg 文件,用于 mod_stream_management 模块
{mod_stream_management, [
% default 100
% size of a buffer of unacked messages
% {buffer_max, 100}
% default 1 - server sends the ack request after each stanza
% {ack_freq, 1}
% default: 600 seconds
% {resume_timeout, 600}
]},
我还在我的配置文件中启用了以下模块
%% Only archives for c2c messages, good performance.
{mod_mam_odbc_user, [pm]},
{mod_mam_cache_user, [pm]},
% {mod_mam_mnesia_dirty_prefs, [pm]},
% {mod_mam_odbc_arch, [pm, no_writer]},
{mod_mam_odbc_async_pool_writer, [pm]},
{mod_mam, []}
我在这里 smack connect to xmpp server with previous stream id 找到了很少的解决方案,但它不适用于 mongooseIM-2.0 服务器。
先谢谢你了。
【问题讨论】:
标签: android xmpp smack mongoose-im stream-management