简介

  WebSocket是一种自然的全双工,双向,单套接字连接,是H5平台的关键组件。

  HTML5连接性领域包括WebSocket,服务器发送事件和跨文档消息传递(Cross-Document Messaging)等技术。跨文档消息传递定义了postMessage API,作为发送和接收消息的标准手段。跨文档消息传递提供了不同JavaScript上下文之间的异步消息传递。跨文档消息传递的HTML5规范还通过引入了源(origin)的概念,澄清并提升了域安全性,这一概念由方案(scheme),主机(host)和端口(port)来定义。根本上,两个URI当且仅当有相同的方案,主机和端口时才被认为是同源的。在源值中不考虑路径。跨文档消息传递通过允许消息在不同源之间交换,克服了同源策略的限制。当发送消息时,发送者指定接收者的源;当你接收消息时,发送者的源会被作为消息的一部分。消息的源由浏览器提供,不会被伪造。在接受这一端,可以决定处理哪些消息,忽略哪些消息。还可以保留一个白名单,只处理来自具有信任源的文档的消息。跨文档消息传递被限制在跨窗口,选项卡和iFrame的通信上。

  HTTP是C/S模式中的请求-响应所用的协议,在这种模式中,客户端向服务器提供HTTP请求,服务器响应请求的资源和关于页面的附加信息。在HTTP/1.0中,每个服务器请求需要一个单独的连接。HTTP/1.1增加了可重用的连接。HTTP是无状态的,它将每个请求当成唯一和独立的。

  HTTP/1.0和HTTP/1.1中,低效的根源主要是:HTTP用于文档共享,而不是丰富的交互性应用程序。随时客户端和服务器之间交互的增加,HTTP协议在客户端和服务器之间通信所需要的信息量快速增加。从根本上讲,HTTP是半双工的协议。

  当前对提供实时Web应用程序的尝试多半是围绕“轮询”(polling)技术进行,这种结束模拟其他服务器端“推”技术。本质上是推迟完成HTTP响应,向客户端提交信息。轮询是一种定时的同步调用,客户端向服务器发送请求看是否有可用的新信息。请求以固定的时间间隔发出,客户端都会得到响应,若有可用信息,服务器发送这些信息,若没有,服务器返回一个拒绝响应,客户端关闭连接。长轮询(long polling)是客户端向服务器请求信息,并在设定的时间段内打开一个连接,服务器若没有任何信息,会保持请求打开,直到有客户端可用的信息或直到指定的超时时间用完为止。此时客户端重新向服务器请求信息。长轮询也称Comet或反向Ajax。Comet延长HTTP响应的完成,知道服务器有需要发送给客户端的内容,这种技术常称作为“挂起GET”或“搁置POST”。当信息量很大时,长轮询对于传统轮询并没有明显性能优势,同事缺乏标准的实现。在流化技术中,客户端发送一个请求,服务器发送并维护一个持续更新和保持打开的开放响应。每当服务器有需要交付给客户端的信息时,它就更新响应。但代理和防火墙可能缓存响应,导致信息交付的延迟增加。

  WebSocket是一种自然的全双工,双向,单套接字连接。WebSocket是一个底层网络协议,可以在它的基础上构建其他标准协议。

原文地址:https://www.cnblogs.com/forerver-elf/p/8086905.html