【问题标题】:Using XMPP as a push server?使用 XMPP 作为推送服务器?
【发布时间】:2012-10-27 23:54:15
【问题描述】:

在过去的几天里,我一直在兜圈子,试图为我的问题找到一个好的解决方案。这里的主要关键是这是针对 iOS 应用程序的。我想要的是从一台设备快速通信到另一台设备更新。所以如果用户 1 执行了一个动作,我想实时告诉用户 2 用户 1 已经执行了这个动作。

出于各种原因,我不想使用 Apple 推送通知。所以这是不可能的。我研究了 Pusher 和 PubNub 之类的服务,但这些服务太贵了(并且只允许并发连接数少得离谱,~2500)。我还研究了 Google App Engine 的 Channel API,但它通过 Javascript 工作,并且必须在 iOS 上使用阴暗的技术来实现。老实说,我宁愿不使用它。

所以现在我正在研究 Google App Engine 中的 XMPP。似乎它会做我想做的事,但我不确定我是否理解了整个画面。难道我不能使用 XMPP 消息完成我想要的,即当用户 1 执行操作时,我可以通过 JSON 消息快速通知用户 2?

这里的主要关键是我必须在后台使用用户的唯一 ID 为 XMPP 执行用户注册。这是否可以在没有用户干预的情况下自动创建一个 Jabber ID,例如 user-unique-id@my-app-engine-domain.com?

总的来说,这是一个可行的解决方案吗?我错过了什么?有哪些例外?

【问题讨论】:

    标签: ios google-app-engine xmpp push-notification


    【解决方案1】:

    您所描述的一切听起来都可以通过 XMPP 轻松实现。

    只有几点。

    • 当然,您确实意识到它是基于 XML 的,因此您的 JSON 消息将嵌入到 XML 节中,并在必要时进行适当的转义。
    • 您的用户注册将由服务器实现决定,但我相信大多数将允许自定义身份验证挂钩(如 LDAP)。因此,拥有外部注册机制应该不成问题,并且是一种相当普遍的方法。
    • 由于您使用的是 ios,因此您应该将 XMPPFramework 视为您的 XMPP 库。
    • 根据您的用例,您可能还需要查看XMPP pubsub 以获取更新,具体取决于在进行更改时应该有多少其他设备收到消息。我使用过这种方法,它适用于实时客户端到客户端更新。

    【讨论】:

      【解决方案2】:

      AppEngine 仅支持 XMPP 作为客户端:它可以发送和接收消息。这里的关键是,如果您查看 sending XMPP message 的文档,每个客户都需要拥有自己的地址 (JID),而 GAE 未提供该地址。

      因此,为了支持您的情况,您需要有一个外部 XMPP 服务器,每个客户端都有自己的 JID,然后您可以向他们发送 XMPP 消息。

      【讨论】:

      • 是否有任何托管 XMPP 服务器可以仅用于为我的域生成 JID?还是我必须在 AWS 之类的东西上托管自己?
      • 我是否至少可以在 apppot 域上注册具有 JID 的用户?还是这也不可能?
      • 不,GAE 不是 XMPP 服务器。
      • 我知道这是一个老话题,但我想警告那些阅读本文的人,如果 XMPP 服务器未向 Apple 的推送通知服务注册,您将无法在 iOS 设备上推送通知... 这是 Apple 做出的设计决定,因此只有他们的服务才能唤醒设备。
      猜你喜欢
      • 2014-07-11
      • 2020-03-13
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多