使用XMPP代替HTTP

3
我和我的朋友正在开发iPhone应用程序。该应用程序使用XMPP协议提供聊天功能。现在我们正在设计应用程序的架构。
所以我的朋友正在处理iPhone端,而我是Ruby on Rails的开发人员。
我的朋友建议我们将每个通常通过HTTP提供的调用包装到XMPP中。因此,用户注册、用户搜索、配置文件编辑、照片上传等所有内容都通过XMPP进行。没有HTTP。
我的朋友想使用XMPP,因为他说,在客户端实现XMPP比HTTP容易得多。对于我来说,这是废话,但我们有一个产品负责人,他和我的朋友一起工作了很长时间,他信任他。
因此,我试图说服我的朋友和产品拥有者,使用XMPP代替HTTP完全不是最好的选择。
我觉得,如果我们在XMPP上实现所有功能,我们将一直遇到麻烦。但是,我如何证明呢?
附言:我不反对使用XMPP进行聊天,我反对用户搜索、照片上传、排名、附近搜索和其他各种restful请求。
请留下回复,任何帮助都会受到赞赏。
更新一下:
昨天我们进行了长时间的讨论。结果发现,在Objective-C中从XMPP和HTTP接收响应非常困难。因为每个单独的对象及其数据都应存储在Core Data模型中,而该模型无法从各个位置进行安全修改。例如,如果您使用HTTP传输,您始终希望仅使用HTTP传输来更新模型中的数据。如果您使用XMPP,则应始终使用XMPP。因此,您不能同时使用两种传输方式。
这就是我的iPhone伙伴告诉我的内容。 对我来说听起来很奇怪,有人能解释一下吗?
4个回答

2

这是与您更新的要点相关的答案,关于无法从不同来源更新Core Data...

这听起来对我来说完全不正确。我已经使用HTTP和JSON以及XML(其中XMPP是子集)完成了许多Core Data应用程序。以下是处理Core Data模式的确切方法:

1)从服务器获取数据 2)使用所需的任何解析器(JSON、XML等)进行解析。 3)从结果解析的字典或数组中获取数据,放入Core Data对象中。 4)保存Core Data模型。

在XMPP的情况下,您可能需要一个流解析器而不是在解析之前获取所有数据,但这并不重要。如果需要,有记录的使用不同上下文将数据存储到后台线程的Core Data中的方法。

基本上,方法是将服务器请求分解为获取数据所需的任何操作,并且每个操作可以将数据放入模型的不同部分。

也许他需要一些来自HTTP方面的数据才能对XMPP数据采取行动?如果是这样,他可以保存来自两个方面的部分数据,直到他有足够的数据,并标记该数据集为完成以使用。

对我来说,除了XMPP流量之外,没有任何情况是有意义的...


好的,我会考虑。但是你认为一般情况下使用XMPP代替HTTP怎么样? - pavel
当你已经有一个像HTTP这样的已建立的协议时,这就没有任何意义了。问他如果iPhone在仅转发HTTP调用的代理后面时会发生什么...我刚刚更新了我的答案,加入了更多细节。 - Kendall Helmstetter Gelner

1

指导他使用ASIHttpRequest进行所有HTTP调用,然后询问相应的库在哪里,以使将数据包装在XMPP调用中变得同样容易...

XMPP非常适合其构建的用途:聊天。HTTP非常适合它所做的事情-与Web服务器或Web服务通信。您可以获得理解POST和GET之间差异的Web服务器,可以获得了解如何优化HTTP流量的代理,可以自动压缩大负载的服务器端,可以在任何浏览器中分析调用,可以获得像Charles这样的工具,旨在分析HTTP流量,以便查看您正在发送的内容。

当然,HTTP协议内置多种身份验证类型,库会为您处理,而不是在XMPP上构建有缺陷的身份验证系统(第一次设计任何身份验证系统都会存在缺陷)。


1

在iPhone上实现XMPP比直接使用JSON消息更难。只需添加一些HTTP调用并使用JSON响应来处理数据即可轻松完成。这里有一个适用于你的iPhone开发人员的tutorial

实现新的和有趣的事情非常棒,如果你有一个经验丰富的团队可以处理它。直到你们两个可以良好地进行编程并且思考设备和服务器的交互,我建议你还是坚持使用标准。


我同意,在这种情况下使用XMPP而不是HTTP就像是重新发明自行车。我更新了我的问题以提供更多细节。 - pavel

-1

XMPP有一些明显的优势:易于在客户端实现、发布-订阅基础设施(在大多数情况下比HTTP轮询更好)、可扩展性和设计上的开放源代码社区等。

当然,HTTP比XMPP/Jabber更成熟。使用XMPP可能会遇到一些安全配置问题(端口阻塞等),而HTTP则更容易使用。

在实现功能和业务逻辑(排名、搜索等)方面,在XMPP世界中,您必须创建一些非标准模块实现和/或修改现有服务器代码库。

您可以检查通过BOSH的XMPP over HTTP,使用双向流到HTTP服务器使用XMPP协议的http协议。

最近有一些基于XMPP协议运行的Web应用程序推出:chesspark(已关闭)、drop.io。

请注意:大多数XMPP服务器支持现代身份验证机制和加密类型(TLS)。

XMPP是一种成熟、文档完备且相当有能力的协议,适用于许多事情,但您必须非常小心地选择它作为项目的主要开发环境。您必须花费一些时间来检查它是否真正适合您的需求。我建议参考O'Reilly的XMPP Book。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接