本地主机上 Smack 和 Openfire 之间的路由错误
Posted
技术标签:
【中文标题】本地主机上 Smack 和 Openfire 之间的路由错误【英文标题】:Routing error between Smack and Openfire on localhost 【发布时间】:2016-11-05 10:54:36 【问题描述】:我有一个实现 Smack 4.1.7 的 Java 应用程序,我将它用作 Openfire 4.0.2 的模拟客户端。目前,Openfire 正在我的本地主机上运行。 Smack 可以通过此连接正确登录和验证:
XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder()
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setServiceName(XMPP_HOST_NAME) // equals xmppDomain on server
.setUsernameAndPassword("user1", "pwd1")
.setResource("tester")
.setDebuggerEnabled(true)
.build();
现在,当 Smack 尝试创建或加入 MUC 时,请求超时 (SmackException$NoResponseException) 并且 Openfire 会记录以下内容:
2016.07.03 18:58:54 org.jivesoftware.openfire.spi.RoutingTableImpl -
Unable to route packet. Packet should only be sent to available sessions and the
route is not available.
<presence id="WrkXH-6" from="user1@localhost/tester" to="user1@localhost/tester">
<c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw="/>
</presence>
2016.07.03 18:58:54 org.jivesoftware.openfire.spi.RoutingTableImpl -
Failed to route packet to JID: user1@localhost/tester packet:
<presence id="WrkXH-6" from="user1@localhost/tester" to="user1@localhost/tester">
<c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw="/>
</presence>
我在服务器端和客户端都使用了“localhost”、“127.0.0.1”和我的机器名称为 XMPP_HOST_NAME,但我一直收到同样的错误。任何帮助将不胜感激。
【问题讨论】:
对不起,你用用户登录了吗? localhost 将不起作用,机器名称(但您必须在控制面板中检查 openfire 服务器名称)将起作用。对我来说,来自同一个人的存在似乎很奇怪,但我必须检查 是的,登录工作正常。它都适用于 localhost、127.0.0.1 和机器名称(无论在 openfire 端配置什么)。建立连接时 Smack 端出现警告:org.jivesoftware.smack.util.DNSUtil resolveDomain WARNING: Exception while resovling SRV records for localhost。考虑添加 '_xmpp-(server|client)._tcp' DNS SRV 记录,但该连接和身份验证都可以。 也许你有一个代理,你必须添加本地主机(是的,127.0.0.1)作为例外...... @R_R 嗨。请问您是否需要openfire(或任何其他服务器)才能正常工作?我只想在我的电脑上运行一个简单的例子。如果这对您来说很容易,您可以发布您的所有课程吗?或者你能指导我一些教程吗?谢谢 【参考方案1】:我发现了问题和错误。 如何处理:
Openfire 有 2 个值:
http.connection.timeout
http.socket.timeout
如果在属性中不可用,则两者都设置为默认值 2000/3000/5000 毫秒。
因此需要通过管理控制台(或数据库)将此值设置为更高的值,如 15000/20000 或更多(如果需要)。
更多,在 Openfire 4.0.2(也可能是旧版本)中,index.jsp 中有一个检查 rssfeed 的调用(默认启用 strong>) 但是这个调用会将这些值重置为 3000,所以基本上超时将是无用的。
禁用 rssfeed 设置为 false
rss.enabled
然后重新启动 Openfire。
【讨论】:
以上是关于本地主机上 Smack 和 Openfire 之间的路由错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 应用中使用 Smack 从 Openfire 服务器恢复两个用户之间的聊天记录
运行 localhost openfire 和 smack 客户端库 android