HTTP和Websockets:了解现在的Web通信技术

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP和Websockets:了解现在的Web通信技术相关的知识,希望对你有一定的参考价值。

参考技术A

API有很多分类。但是当涉及到网络通信时,我们可以确定两种重要的API类型 Web Service APIs (例如SOAP,JSON-RPC,XML-RPC,REST)和 Websocket API 。但是,这些到底是什么意思?让我们深入了解Web通信协议的世界,并在最后讨论如何选择最佳的API机制。

HTTP是互联网的基础通信协议。 HTTP在客户端-服务器计算模型中充当请求-响应协议。 HTTP / 1.1是现代Web浏览器和服务器中使用的最常见的HTTP版本。与HTTP的早期版本相比,此版本可以实现关键的性能优化和功能增强,例如持久性和流水线连接,分块传输,请求/响应主体中的新标头字段等。其中,以下两个标头非常值得注意,因为HTTP的大多数现代改进都依赖于这两个标头。

到目前为止,REST(REpresentational State Transfer)的体系结构样式是构造用于请求的Web API的最标准化的方式。REST纯粹是一种基于多种原则的建筑风格。遵循REST原理的API称为RESTful API。REST API使用请求/响应模型,其中来自服务器的每个消息都是对来自客户端的消息的响应。通常,RESTful API使用HTTP作为其传输协议。在这种情况下, 查找 应使用 GET 请求。 PUT , POST 和 DELETE 的要求应当用于 修改 插入 ,和 删除 分别(避免 GET 用于更新信息的请求)。

在HTTP轮询中,客户端通过遵循以下机制之一来轮询请求新信息的服务器。如今,大多数应用程序都使用轮询,并且大多数情况下轮询是通过RESTful实践进行的。实际上,很少使用HTTP短轮询,并且始终选择HTTP长轮询或定期轮询。

HTTP流传输—提供长期连接,可进行即时和连续的数据推送

客户端发出一个HTTP请求,服务器发送一个不确定长度的响应(就像无限轮询一样)。HTTP流是高性能,易于使用的,并且可以替代WebSockets。

HTTP / 2是基于复用的流的有效传输层 -根据IETF,“流”是一个HTTP / 2连接内的客户机和服务器之间交换的帧的独立的,双向序列。它的主要特征之一是单个HTTP / 2连接可以包含多个并发打开的流,其中任一端点都可以从多个流中插入帧。

WebSocket允许服务器和客户端在任何时间推送消息,而与先前的请求没有任何关系。使用WebSockets的一个显着优势是, 几乎每个浏览器都支持WebSockets 。

WebSocket解决了HTTP的一些问题:

示例应用程序:IM / Chat应用程序,游戏,管理前端

尽管据说每个浏览器都支持WebSockets,但中介程序中也可能有例外:

如果对REST和Websockets进行性能测试,则可能会发现存在高负载时Websockets的性能更好。这并不一定意味着REST效率低下。我个人的看法是,将REST与Websockets进行比较就像将苹果与橙子进行比较。这两个功能解决了两个不同的问题,无法与像这样的简单性能测试进行比较:

但是,您现在应该了解,WebSockets是以近乎实时的方式处理长期存在的双向数据流的绝佳选择,而REST非常适合偶尔进行的通信。使用WebSockets本身占用资源比较多,因此对于偶尔的连接来说是过大的选择。

如果要在数据更改时从API获取数据,则必须首先考虑使用轮询。但是,当涉及服务器之间的通信时,低效率的轮询使我们付出了很多代价(平均而言,浪费了98.5%的轮询)。

Webhooks —在没有长期轮询连接的服务器之间发送数据的简单方法

Webhooks是此问题的救星。在此请记住,通信通常发生在服务器之间。首先,发送方节点预先在接收方节点中注册一个回调URL。当发送方发生事件时,Webhook会被触发,并使用在每个接收方中注册的回调URL,将带有新数据的事件对象作为HTTP POST请求发送到接收方节点。

很酷的事情是,可以通过webhooks大大减少发送方和接收方节点的服务器负载。它可以确保更好的用户体验,同时开发人员可以将服务端点用于有意义的事情,而不会浪费轮询。

Webhooks通常用于在事件发生时在服务器之间发送通知和状态更改。例如,当用户通过单击电子邮件中的按钮取消订阅时,它到达服务器,并且发生用户取消订阅事件,此事件触发相应的Webhooks,并且他们通知所有服务器/服务该用户现在已经从其订阅服务器中取消订阅。服务

使用哪种技术取决于在您的应用程序上下文中什么才更有意义。当然,您可以使用一些技巧来模拟一种技术与另一种技术的行为,但是通常更可取的是使用一种更适合您的通讯模型的技术(当被本书使用时)。

HTTP and Websockets: Understanding the capabilities of today’s web communication technologies

以上是关于HTTP和Websockets:了解现在的Web通信技术的主要内容,如果未能解决你的问题,请参考以下文章

用于 HTTP 但不是 WebSockets 的 HAProxy SSL 重定向

解读 JavaScript 之深入探索 WebSockets 和 HTTP/2

用于多个主题的 Spring WebSockets

Websockets 代理并与 IIS Web 服务器同时使用端口 443

了解java中Websockets的简单示例[关闭]

django websockets无法在频道上发送消息