可以将HTTP REST API用于聊天应用程序吗?

Madhur Ahuja

我们正在Android中构建一个聊天应用程序。我们正在考虑使用HTTP REST API发送出站消息。是否想知道与使用WebSockets或XMPP相比,它是一种好方法还是有缺点(这似乎是传输聊天消息的事实上的标准)?

我可以想到的一些优点/缺点:
+ HTTP端点很容易在服务器端水平扩展(这是一个主要问题)
+ Websockets的学习曲线比HTTP陡峭
-与websocket相比,HTTP消息的有效负载更大

根据本文档,似乎Facebook最初也使用AJAX处理聊天消息:

https://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf

随机的

我们可以使用REST API进行聊天消息传递,但是恕我直言,XMPP是更好的选择。让我们考虑一下XMPP提供的功能。

XMPP除了支持TCP传输外,还提供HTTP(通过轮询绑定)和websocket传输。通过HTTP和WebSocket传输读取XMPP

从XMPP的角度了解每种传输方式的利弊是很有趣的。

XMPP可以通过两种方式使用HTTP:轮询[18]和绑定

XMPP over HTTP轮询

现在已弃用的轮询方法实质上意味着XMPP客户端会通过HTTP“ GET”和“ POST”请求定期获取(并发布)存储在服务器端数据库中的消息。


XMPP over HTTP绑定(BOSH)

绑定方法被认为比轮询方法中的常规HTTP'GET'和'POST'请求更有效,因为与其他HTTP轮询技术相比,它减少了延迟和带宽消耗

但是,这也带来了一个缺点,那就是套接字将保持打开状态延长时间,以等待客户端的下一个请求

绑定方法是使用双向HTTP上的双向流(BOSH)实现的,[19]使服务器可以在消息发送后立即将消息推送到客户端。这种通知的推送模型比轮询更有效,在轮询中,许多轮询都不返回新数据。

如果我们了解BOSH技术如何工作的,那就太好

BOSH所采用的技术有时称为“ HTTP长轮询”,与其他HTTP轮询技术相比,它减少了延迟和带宽消耗。当客户端发送请求时,连接管理器不会立即发送响应。而是将请求保持打开状态,直到它有实际要发送给客户端的数据为止(或者已经达到约定的不活动时间)。然后,客户端立即向连接管理器发送新请求,继续进行长轮询循环。

如果连接管理器在约定的时间长度[12]之后没有任何数据要发送到客户端,则它将发送一个为空的响应。这与空白保持活动或XMPP Ping(XEP-0199)[13]的目的相似。它有助于使套接字连接保持活动状态,从而防止某些中介(防火墙,代理等)无声地丢弃它,并有助于在合理的时间内检测到中断。


通过WebSocket绑定的XMPP

XMPP支持WebSocket绑定,这是一种更有效的传输方式

WebSocket是一种可能更有效的实时消息传输方式,它是一种Web技术,可通过单个TCP连接提供双向全双工通信通道。在IETF提出的标准RFC 7395中定义了基于WebSocket绑定的XMPP。

说到学习曲线,是的,您可能很想使用REST API,但是现在有一些资源可以学习Android和XMPP以及可以用于通过Internet运行自己的XMPP服务的XMPP服务器软件。或在局域网上。在决定您的体系结构之前,花点功夫是值得的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用react native使用Django rest api构建移动应用程序吗?

来自分类Dev

Spring Boot应用程序可以为REST API具有单独的安全性吗?

来自分类Dev

将语义信息放在REST API的HTTP原因短语中可以吗?

来自分类Dev

GAE Channel API是仅用于创建聊天室,还是可以用于实现一对一聊天应用程序?

来自分类Dev

我可以使用REST Web服务和Spring Boot将Servlet中的应用程序转换为Spring吗?

来自分类Dev

适用于Android应用程序的Magento REST API

来自分类Dev

我们可以在 apache kafka 消费者中从 spring boot rest api 应用程序调用服务方法吗?

来自分类Dev

聊天应用程序:通过Websocket的图像?还是REST端点?

来自分类Dev

聊天应用程序:通过Websocket的图像?还是REST端点?

来自分类Dev

是否可以在Java Swing应用程序中使用REST或Web API

来自分类Dev

从 Java 应用程序到 TFS REST API 的 HTTP PATCH 请求获得 400(错误请求)错误

来自分类Dev

将django-rest-framework与常规HTTP应用程序结合

来自分类Dev

如何将Office 365 REST API集成到我的Ruby on Rails应用程序中?

来自分类Dev

如何为单页应用程序将Django Rest API与BackboneJS前端集成

来自分类Dev

REST PHP API尝试从Android应用程序将数据插入数据库

来自分类Dev

授权代码流,将代码从移动应用程序发送到REST API

来自分类Dev

REST PHP API尝试从Android应用程序将数据插入数据库

来自分类Dev

我可以使用Clojure构建移动聊天应用程序吗?

来自分类Dev

iOS中使用Quickblox的两个不同的应用程序可以共享聊天/对话吗?

来自分类Dev

我可以将Windows存储应用程序C#代码(命名空间)用于桌面应用程序吗?

来自分类Dev

单页应用程序概念可以用于创建独立的桌面应用程序吗?

来自分类Dev

WCF和REST应用程序在同一端口上使用不同的端点,这样可以吗?

来自分类Dev

我们可以将Expression Blend用于Asp.net MVC应用程序吗

来自分类Dev

您可以将Apple的mapkit用于混合应用程序吗?

来自分类Dev

我可以将Spring Framework用于非Web应用程序吗?

来自分类Dev

我可以将Google的数据存储区用于桌面应用程序吗?

来自分类Dev

我可以将Jasig CAS服务器用于android移动应用程序吗?

来自分类Dev

我可以将React js用于长时间运行的应用程序吗

来自分类Dev

我们可以将Expression Blend用于Asp.net MVC应用程序吗

Related 相关文章

  1. 1

    我可以使用react native使用Django rest api构建移动应用程序吗?

  2. 2

    Spring Boot应用程序可以为REST API具有单独的安全性吗?

  3. 3

    将语义信息放在REST API的HTTP原因短语中可以吗?

  4. 4

    GAE Channel API是仅用于创建聊天室,还是可以用于实现一对一聊天应用程序?

  5. 5

    我可以使用REST Web服务和Spring Boot将Servlet中的应用程序转换为Spring吗?

  6. 6

    适用于Android应用程序的Magento REST API

  7. 7

    我们可以在 apache kafka 消费者中从 spring boot rest api 应用程序调用服务方法吗?

  8. 8

    聊天应用程序:通过Websocket的图像?还是REST端点?

  9. 9

    聊天应用程序:通过Websocket的图像?还是REST端点?

  10. 10

    是否可以在Java Swing应用程序中使用REST或Web API

  11. 11

    从 Java 应用程序到 TFS REST API 的 HTTP PATCH 请求获得 400(错误请求)错误

  12. 12

    将django-rest-framework与常规HTTP应用程序结合

  13. 13

    如何将Office 365 REST API集成到我的Ruby on Rails应用程序中?

  14. 14

    如何为单页应用程序将Django Rest API与BackboneJS前端集成

  15. 15

    REST PHP API尝试从Android应用程序将数据插入数据库

  16. 16

    授权代码流,将代码从移动应用程序发送到REST API

  17. 17

    REST PHP API尝试从Android应用程序将数据插入数据库

  18. 18

    我可以使用Clojure构建移动聊天应用程序吗?

  19. 19

    iOS中使用Quickblox的两个不同的应用程序可以共享聊天/对话吗?

  20. 20

    我可以将Windows存储应用程序C#代码(命名空间)用于桌面应用程序吗?

  21. 21

    单页应用程序概念可以用于创建独立的桌面应用程序吗?

  22. 22

    WCF和REST应用程序在同一端口上使用不同的端点,这样可以吗?

  23. 23

    我们可以将Expression Blend用于Asp.net MVC应用程序吗

  24. 24

    您可以将Apple的mapkit用于混合应用程序吗?

  25. 25

    我可以将Spring Framework用于非Web应用程序吗?

  26. 26

    我可以将Google的数据存储区用于桌面应用程序吗?

  27. 27

    我可以将Jasig CAS服务器用于android移动应用程序吗?

  28. 28

    我可以将React js用于长时间运行的应用程序吗

  29. 29

    我们可以将Expression Blend用于Asp.net MVC应用程序吗

热门标签

归档