我和我的 friend ,我们正在开发 iPhone 应用程序。此应用程序使用 XMPP 协议(protocol)来提供聊天功能。现在我们正在为应用程序设计架构。
所以我的 friend 在 iPhone 方面工作,而我是 ruby on rails 的家伙。
我的 friend 建议,我们将通常通过 HTTP 服务的每个调用包装到 XMPP 中。因此,用户注册、用户搜索、个人资料编辑、照片上传,一切都通过 XMPP 进行。根本没有 HTTP。
我的 friend 想使用 XMPP,因为他说,在客户端而不是 HTTP 上实现 XMPP 更容易。对我来说,这是胡说八道,但我们有一位产品负责人,他与我的 friend 合作了很长时间,他信任他。
因此,我试图做的是说服我的 friend 和产品所有者,将 XMPP 用于 HTTP 可以找到的东西 — 完全不是最好的主意。
我觉得,如果我们在 XMPP 上实现所有东西,我们会一直痛苦到生命的尽头。但是我如何证明呢?
附言我不反对通过 XMPP 聊天,我反对用户搜索、照片上传、排名、附近搜索和其他各种 restful 请求。
请留下回复。任何帮助表示赞赏。
一点更新:
昨天我们进行了长时间的讨论。事实证明,在 Objective-C 中很难同时接收到来自 XMPP 和 HTTP 的响应。因为每个对象及其数据都应该存储在 Core Data 模型中,而这个模型不能从各个地方安全地修改。比如说,如果您使用 HTTP 传输,您总是希望仅使用 HTTP 传输来更新模型中的数据。如果您使用 XMPP,您应该始终使用 XMPP。所以,你不能同时使用两者。
这就是我的 iPhone 伙伴告诉我的。 这对我来说听起来很奇怪,谁能给我解释一下?
最佳答案
这是与您的更新点相关的答案,关于无法从不同来源更新核心数据...
我觉得这完全不对。我用 HTTP、JSON 和 XML(XMPP 是其中的一个子集)完成了许多核心数据应用程序。以下是使用 Core Data 的模式的确切方式:
1) 从服务器获取数据 2) 使用所需的任何解析器(JSON、XML 等)进行解析。 3)从结果解析的字典或数组中获取数据,放入核心数据对象中。 4) 保存核心数据模型。
在 XMPP 的情况下,您可能有一个流式解析器,而不是在解析之前获取所有数据,但这并不重要。如果需要,有记录的方法可以使用不同的上下文将数据从后台线程存储到核心数据中。
基本上,该方法是将您的服务器请求分解为获取数据所需的任何操作,并且每个操作都可以将数据放入模型的不同部分。
也许他需要一些来自 HTTP 端的数据才能对 XMPP 数据采取行动?如果是这样,他可以只保存双方的部分数据,直到他有足够的数据,然后将该数据集标记为完整以供使用。
除了 XMPP 流量之外,没有任何场景对我来说有意义......
关于iphone - 使用 XMPP 而不是 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542238/