如何在ejabberd服务器中启用流管理?

时间:2015-02-07 06:53:33

标签: android xmpp ejabberd smack

我正在使用ejabberd服务器和smack 4.1.0 beta 2在android中开发一个聊天应用程序。在那里我想使用streammanagement(XEP-0198)。

在ejabberd http://www.process-one.net/docs/ejabberd/guide_en.pdf的安装和操作指南中,它指定默认启用流管理。但它在我的案例中并没有起作用。

所以我手动将streammanagement值设为true。但是当我调用issmavailable()方法时,仍然会返回false。

这是我的ejabberd.cfg代码,

listen,
[
  {5222, ejabberd_c2s, [

                        {access, c2s},

                        {shaper, c2s_shaper},

                        {max_stanza_size, 65536},

                        zlib,

                        starttls,

                        {certfile, "/etc/ejabberd/ejabberd.pem"},

                        {stream_management,true}

                       ]},

请帮助我..提前谢谢......

2 个答案:

答案 0 :(得分:2)

对于在禁用XEP-0198的升级后来到这里的任何人:使用ejabberd 17.03,该选项被重命名,如果配置中根本不存在则被禁用。新选项名为public class ACOne extends AbstractClass { @Override public void use(){System.out.println("Used item ACOne!");} } public class ACTwo extends AbstractClass { @Override public void use(){System.out.println("Used item ACTwo!");} } public abstract class AbstractClass { public abstract void use(); } public class UserClass { private AbstractClass item; public UserClass (AbstractClass item) { this.item = item; } public Class<? extends AbstractClass> getItemClass() { return item.getClass(); } public <T extends AbstractClass> T getItem (Class <? extends T> targetType) { return targetType.cast(this.item); } public void setItem (AbstractClass item) { this.item = item; } } public class CastingSubclasses { public void testCastingSubclasses() { UserClass user = new UserClass(new ACOne()); user.setItem(new ACTwo()); user.getItem(user.getItemClass()).use(); } }

https://blog.process-one.net/ejabberd-17-03/

答案 1 :(得分:1)

在ejabberd中,流管理是c2s监听器的一个选项。您应该将选项stream_management设置为true

参考是:http://docs.ejabberd.im/admin/guide/configuration/#listening-ports

请注意,在最新的ejabberd版本中,默认启用流管理。