上述警告(可能)与您面临的问题无关。这些mnesia 事件通常发生在需要转储事务日志但之前的事务日志转储尚未完成时。
您面临的问题需要调试,您可以{log_level, 5}
在里面设置ejabberd.cfg
。这将为 ejabberd 启用调试日志记录。然后查看日志以找出有关您为什么会发生这种情况的任何猜测。另外,回来在这里粘贴您的日志文件详细信息,也许我们将能够为您提供进一步的帮助。我从来没有遇到过 ejabberd 这样无意义的问题。
日志文件附件后更新:
正如乔在下面所写的,这确实是由于资源冲突而发生的。您的两个客户正在尝试使用相同的资源值登录。但在理想世界中,这应该无关紧要。Jabber 服务器应该通过在客户端请求的资源值之上附加或预先添加自定义值来处理此问题。
例如,以下是 gtalk(甚至是 facebook 聊天)服务器将执行的操作:
SENT <iq xmlns="jabber:client" type="set" id="1"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>jaxl#resource</resource></bind></iq>
RCVD <iq id="1" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>jabberxmpplibrary@gmail.com/jaxl#resou27F46704</jid></bind></iq>
如您所见,我的客户端请求绑定资源值jaxl#resource
,但 gtalk 服务器实际上将我的会话绑定到资源值jaxl#resou27F46704
。简而言之,这不是您客户端中的错误,而是 ejabberd 中的错误。
要解决此问题,您可以做两件事:
- 资源值可能在客户端配置中的某处硬编码。只需删除它。一个好的客户端会通过在它结束时生成一个随机资源值来自动处理这个问题。
- 修补 ejabberd 以表现 gtalk 服务器的行为(如上所示)。这是ejabberd_c2s.erl src 中的相关部分,需要进行一些调整。还要在c2s源文件里面搜索
Replaced by new connection
一下,你就会明白是怎么回事了。