或许很多用户都听说过 Websocket,但是真正接触过的并不多。Websocket是随着 HTML技巧涌现的一个最新的Web服务类型的协议标准,可以说它就是为HTML5配备的,它实现了客户端和高防服务器全双工的功效。
我们知道,原有的HmML标准都是被动式的,也就是客户端发送一段恳求,服务器吸收恳求并且将成果返回给客户端,如果用户不刷新,测览器的页面就永远不会刷新,这就是所谓的单工的功效,即某一侧只能吸收或者发送数据,并不能同时进行交互。
基于这个原因,随着时间的推移,很多开发者开端揣摩要找到一套良好的用户交互机制,虽然Web测览器上跑某些任务的效率完整不能和利用程序比,但至少要让用户能感受到良好的交互体验,于是Ajax和Comet技巧应运而生。
做Web前端的程序员非常明确Ajax技巧,所谓Ajax技巧,即将服务器端的事件排列在待处理的队列中,根据轮询的时间依次将处理完的成果发送给浏览器,用这种方法来模仿服务器主动发送恳求给浏览器,在轮询的空隙进行实时消息的传递,所以,Ajax技巧并不是真正实现双工通信,只是模仿了双工通信。
于是 Comet技巧应运而生。 Comet技巧就是在Ajax技巧的基础上让服务器端保持客户端的HP连接,尝试应用服务器进行推送消息。Comet技巧有几个变种:第一种是定时推送,也就是当客户端发起恳求后,服务器端不管如何都会每隔N秒进行消息反馈,这样虽然会将对服务器负載的影响降到最低,但是对于一些实时请求高的Web需求来说,用户体验会非常差;第二种是当服务器有内容更新后,立刻推送给客户端并且关闭连接,这样会进步用户体验,但是对于服务器的负载也是相当严重的;第三种就是一直保持客户端HTTP连接的开销,不停地传送数据给客户端,所以这种方法也称作 Strean流的方法。由于服务器推送的方法,这种 Comet技巧也被称为反向Ajax技巧。
由于所有这些内容都需要消费开销,于是 Flash等利用插件的 Socket技巧也蓬勃发展了起来,当然Fash等浏览器插件确实能实现双工通信但是开发起来并不容易(开发人员还要多学一门语言),运行效率也并不高(插件情势)。随着时代的发展,网页也变得更加纷察复杂,利用原生网页就能应用的双工通信就应运而生。