【问题标题】:XMPP Client incompabilitiesXMPP 客户端不兼容
【发布时间】:2010-10-21 23:13:42
【问题描述】:

我目前正在开展一个项目,该项目正在构建一个基于 Java 的桌面应用程序以与网站交互。我们想要整合 IM 功能,所以我们决定使用 XMPP。

问题是我们的应用程序有其他功能,任何使用其他客户端连接到我们的 XMPP 服务器的人都会导致我们的网站出现问题(例如,我们的客户端将能够发送用户不会发送的具有特定消息类型的消息'无法使用,但与另一个客户端他们可以发送这些消息类型)。

有没有人可以只允许我们的客户端访问 XMPP 服务器或阻止其他客户端使用某些功能?我知道这违背了开放标准的想法,但我们不想从头开始构建专有的 IM 解决方案。

【问题讨论】:

  • 请澄清:“我们的客户端将能够使用用户无法使用的特定消息类型发送我们的消息,但使用另一个客户端,他们可以发送这些消息类型)。”您的意思是您的服务器将无法处理标准客户端,或者您的客户端无法与标准服务器一起使用?我猜是前者,但如果是这样的话,为什么互操作性会成为问题并不明显。
  • 本质上,我们希望能够使用 XMPP 发送某种状态消息(不同于正常的 IM 状态更改),这些消息来自我们应用程序的不同功能(例如,它监控某些内容然后发送熄灭时发出状态消息)。我们的客户端将能够使用与标准聊天消息类型不同的消息类型来发送和接收这些消息,但另一个客户端则不能。我们认为这是专有的,但 XMPP 功能非常好,我宁愿使用 Smack API 之类的东西并运行 XMPP 服务器,而不是自己做所有这些。

标签: java client xmpp instant-messaging


【解决方案1】:

正在构建一个专有解决方案,它可能不是完全从头开始,这不一定是坏事。但请不要将其称为 XMPP 服务,除非您要支持 XMPP 客户端。您将获得与需要您的专有浏览器的“网站”相同的反应。

对于可以协商的功能,请查看Feature Negotiation,您可能会说您的服务器对其他客户端没有特定功能,但您自己的秘密支持它。这实际上不会阻止尝试进行某些操作,因此这是一个非常糟糕的解决方案。

您可以在不构建桌面应用程序的情况下获得即时消息传递功能(需要解决所有平台支持问题)。考虑一下Orbited,它可以为您提供所需的即时消息交互性,并且可以更轻松地集成到服务器上。

顺便说一句,不应该有任何消息会导致您的网站出现问题,也不应该有导致问题的 URL 或查询组合等。

【讨论】:

  • 由于其他功能,我们需要桌面应用程序。 XMPP 非常易于使用,我宁愿只运行 XMPP 服务器并使用 Smack API。问题是我不想将其称为 XMPP 服务,也不想让其他 XMPP 客户端工作,但我看不出有任何方法可以忽略不属于我们的客户端。我想类似的东西就像 Steam,在 Steam 所做的所有其他事情(管理游戏、他们的商店等)之上,你有一个 IM 程序。我们不希望有人能够只编写自己的 IM 客户端,因为我们希望他们为其他所有事情运行我们的客户端。
  • 嗯。劫持连接身份验证怎么样?也许使用单独的身份验证服务返回一些可以传递给连接 API 的令牌。阻止其他客户端连接,因为他们不能做同样的舞蹈。可能有点丑。
  • @Joel - 你可能对我提到的 pubsub 内容感兴趣。您可以创建可以访问给定节点的用户白名单,为您提供所需的安全性。
【解决方案2】:

不确定您的所有要求,但听起来您可能可以使用 XMPP 的 pubsub 或 pep 功能。这些是 XMPP 的扩展,允许您创建可以在用户到用户级别访问的专用有效负载(个人事件协议 XEP-0163)。如果它只是对所有感兴趣的人的一般通知,那么 PubSub (XEP-0060) 可能就是您想要的。

这些协议允许保护对 pubsub 节点的访问,并且不会受到标准聊天消息的影响,因为它们是不同的协议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 2011-08-25
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2014-09-29
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多