WebSocket协议

        一直以来,网络在很大程度上都是围绕着HTTP的请求/响应模式而构建的。客户端加载一个网页,然后直到用户单击下一页之前,什么都不会发生。在2005年左右,AJAX开始让网络变得更加动态,但所有的HTTP通信仍然是客户端控制的,这就需要用户进行互动或定期轮询,以便从服务器加载新数据

      由于HTTP协议的开销,导致它们不适用于低延迟应用。为了解决这些问题,WebSocket将网络套接字引入到客户端和服务端,浏览器和服务端之间可以通过套接字建立持久的连接,双方随时都可以互发数据给对方。而不是之前由客户端控制的一请求一应答模式

        本章主要内容包括:

        ①HTTP协议的弊端

        ②WebSocket入门

        ③WebSocket与AJAX的选择

一、HTTP协议的弊端

       将HTTP协议的主要弊端总结如下:

        (1)HTTP协议为半双工协议。半双工协议指数据可以在客户端和服务端两个方向上传输,但是不能同时传输。它意味着在同一时刻,只有一个方向上的数据传送。

         (2)HTTP消息冗长而繁琐。HTTP消息包含消息头、消息体、换行符等。通常情况下采用文本方式传输,相比于其他的二进制通信协议,冗长而繁琐。

         (3)针对服务器推送的黑客攻击。例如长时间轮询。

           现在,很多网站为了实现消息推送,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP   request,然后由服务器返回最新的数据给客户端浏览器。这种传统的模式具有很明显的缺点,即浏览器需要不断地向服务器发出请求,然而HTTP request的Header是 非常冗长的,里面包含的可用数据比例可能非常低,这回占用很多的带宽和服务器资源。

        为了解决HTTP协议效率低下的问题,HTML5定义了WebSocket协议,能更好地节省服务器资源和带宽并达到实时通信。

二、WebSocket入门

       WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通信的网络技术。在WebSocket中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道,两者就可以直接相互传送数据了。WebSocket基于TCP双向全双工进行消息传递,在同一时刻,既可以发送消息,也可以接受消息,相比于HTTP的全双工协议,性能得到很大提升。

        下面总结一下WebSocket的特点:

         ①单一的TCP连接,采用全双工模式通信;

         ②对代理、防火墙和路由器透明;

         ③无头部信息、Cookie和身份验证;

         ④无安全开销

         ⑤通过“ping/pong”帧保持链路激活;

         ⑥服务器可以主动传递消息给客户端,不再需要客户端轮询。

三、WebSocket与Ajax的选择

          轮询:就是在指定的时间间隔内,进行HTTP请求来进行实时数据的获取。但是这种方式会产生一些弊端。一方面是产生过多的HTTP请求,占用带宽,浪费资源。二是因为不是每一次请求都会有数据变化(就像聊天室),所以就会造成请求的利用率低。

         WebSocket是客户端与服务器之间建立一条通道,只进行一次请求,而且可以从通道中实时获取服务器的数据

         WebSocket设计出来的目的就是要取代轮询,使客户端浏览器具备像C/S架构下桌面系统一样的实时通信能力。浏览器通过JavaScript向服务器发出建立WebSocket连接的请求,连接建立以后,客户端和服务器端可以通过TCP连接直接交换数据。因为WebSocket连接本质上就是一个TCP连接,所以在数据传输的稳定性和数据传输量的大小方面,和轮询相比,具有很大的性能优势。

         在流量和负载增大的情况下,WebSocket方案相比传统的AJAX轮询方案有极大的性能优势。

四、场景

       比如机房收费系统中显示上机人数。比如ITOO的在线监控界面。需要实时显示已登录人数、已交卷人数。再比如签到系统的签到中页面,需要实时显示已签到的人数。再比如股票波动图,需要实时显示当前股票价格等。





       


评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值