XMPP 服务器名和 XMPP 服务名之间的区别?

Posted

技术标签:

【中文标题】XMPP 服务器名和 XMPP 服务名之间的区别?【英文标题】:difference between XMPP servername and XMPP servicename? 【发布时间】:2011-07-08 18:31:51 【问题描述】:

在 Smack API 中,有一个用于连接的配置类,在此页面中有描述

ConnectionConfiguration

我对服务名称和服务器名称之间的区别感到困惑。

假设我有一台名为“mybox.mydomain.com”的计算机,并且我在它上面安装了一个名为“myhost”的配置主机(使用 ejabbed.cfg 中的 hosts, ["myhost"]. 行),

本例中的主机名、服务器名和服务名是什么?

【问题讨论】:

【参考方案1】: myhost:服务名称(或 XMPP 域) mybox.mydomain.com:主机名和服务器名。

您可以在任何主机上托管 XMPP 域,前提是您在 DNS 中正确设置了 SRV 记录,或者如果客户端指定它应该连接到哪个主机(如电子邮件)。

【讨论】:

所以主机名和服务器名总是相同的?【参考方案2】:

想想您用于登录的 JID,其中包含 username @domaindomain 是您正在使用的服务的逻辑名称。对于某些服务,例如jabber.org,服务运行在与服务同名的盒子上。对于许多其他人来说,比如 WebEx Connect 和 GoogleTalk,服务域是确定在哪里打开套接字的起点,而不是机器的名称。如果一切设置正确,您可以使用SRV record 在 DNS 中查找要连接的机器的名称。例如,使用挖掘:

$ dig +short -t SRV _xmpp-server._tcp.gmail.com
20 0 5269 xmpp-server4.l.google.com.
20 0 5269 xmpp-server2.l.google.com.
20 0 5269 xmpp-server1.l.google.com.
5 0 5269 xmpp-server.l.google.com.
20 0 5269 xmpp-server3.l.google.com.

如果在 DNS 中未正确配置服务域,或者您只是在进行测试,那么能够独立于域指定此连接主机通常很有用。因此,对于您的示例,您将使用:

ConnectionConfiguration("mybox.mydomain.com",
                        5222,
                        "myhost");

如果您希望网络外的人(客户端到服务器或服务器到服务器)也可以访问此服务,将您的服务域重命名为完全限定的名称是有意义的,您可以附加 SRV 记录以供这些外部实体使用。

【讨论】:

以上是关于XMPP 服务器名和 XMPP 服务名之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

XMPP Server项目的初探

XMPP 作为软件组件/服务器之间的消息传递解决方案?

在不公开服务名称和主机名的情况下使用 Android XMPP Smack

XMPP 主机名问题

如何在android设备和xmpp服务器之间建立连接?

Tigase、Openfire 和任何其他开源 XMPP 服务器之间的比较