站长杂谈

WebSockets简介

时间:2018-12-27 16:18 点击:

  Web主要围绕所谓的HTTP请求/响应范例构建。客户端加载网页,然后在用户点击下一页之前没有任何操作。大约在2005年,AJAX开始让网络感觉更具活力。尽管如此,所有HTTP通信都由客户端引导,客户端需要用户交互或定期轮询以从服务器加载新数据。在知道新数据可用的那一刻,服务器能够将数据发送到客户端的技术已经存在了相当长的一段时间。它们的名称如“推”或“彗星”。创建服务器启动连接错觉的最常见的黑客之一称为长轮询。通过长轮询,客户端打开与服务器的HTTP连接,使其保持打开状态,直到发送响应。每当服务器实际拥有新数据时,它就会发送响应(其他技术涉及 Flash, XHR多部分 请求和所谓的htmlfiles)。长轮询和其他技术运作良好。您每天都可以在GMail聊天等应用程序中使用它们。但是,所有这些解决方案都存在一个问题:它们带来了HTTP的开销,这使得它们不适合低延迟应用程序。

  跨源通信

  作为一种现代协议,跨源通信直接进入WebSocket。虽然您仍应确保只与您信任的客户端和服务器通信,但WebSocket可以在任何域上的各方之间进行通信。服务器决定是将其服务提供给所有客户端还是仅提供给驻留在一组定义良好的域上的服务。

  代理服务器

  每种新技术都带来一系列新问题。在WebSocket的情况下,它与代理服务器的兼容性在大多数公司网络中调解HTTP连接。WebSocket协议使用HTTP升级系统(通常用于HTTP / SSL)将HTTP连接“升级”到WebSocket连接。某些代理服务器不喜欢这样,会丢弃连接。因此,即使给定客户端使用WebSocket协议,也可能无法建立连接。这使得下一部分更加重要:)

  使用WebSockets

  WebSocket仍然是一项年轻的技术,并未在所有浏览器中完全实现。但是,您可以在今天使用WebSocket ,只要WebSocket不可用,就会使用上述回退之一的库。在这个领域非常流行的一个库是socket.io,它带有一个客户端和协议的服务器实现,并包括回退(socket.io不支持二进制消息,截至2012年2月)。还有商业解决方案,例如PusherApp,它可以通过提供HTTP API将WebSocket消息发送到客户端,轻松集成到任何Web环境中。由于额外的HTTP请求,与纯WebSocket相比总会有额外的开销。

  服务器端

  使用WebSocket为服务器端应用程序创建了一个全新的使用模式。虽然传统的服务器堆栈(如LAMP)是围绕HTTP请求/响应周期设计的,但它们通常不能很好地处理大量开放的WebSocket连接。保持大量连接同时打开需要一种以低性能成本获得高并发性的体系结构。这种体系结构通常围绕线程或所谓的非阻塞IO设计。以上就是小编对websockets的一些了解,如果您也知道相关的详细欢迎前来和小编交流。