WebSocket学习,理解WebSocket原理。

之前的想实现五子棋时使用socket.io进行客户端之间消息的传递,但是遇到了一些问题,无法读取服务端打开文件的内置css文件和js脚本,因此改用webSocket来实现客户端之间的通信。

在学习WebSocket之前先讲一下其他两种客户端与服务端通信的机制。

Ajax轮询

ajax轮询模拟长连接就是每隔一段时间就向服务器发起ajax请求,查询服务器端是否有数据更新。

      客户端:发起请求,询问。

      服务器端:回应如果有就返回数据。

      客户端:发起请求,询问。

      服务器端:回应如果有就返回数据。

      客户端:发起请求,询问。

      服务器端:回应如果有就返回数据。

      客户端:发起请求,询问。

      服务器端:回应如果有就返回数据。

其缺点显而易见,每次都要建立HTTP连接,即使需要传输的数据非常少,所以这样很浪费带宽;同时,这个过程是被动性的,即服务器不能主动推送消息给客户端。

长轮询

 原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直建立连接,没收到就不返回),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。

可以看出其实这两种方式,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性(服务端不能主动联系客户端,只能由客户端发起)。

不管怎么样,上面这两种都是非常消耗资源的。ajax轮询是需要服务器有很快的处理速度和资源,长轮询则需要有很高的并发,也就是说同时保存多个客户端的能力。

这时候Websocket出现了。他解决了HTTP的这几个难题。首先,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端了。

WebSocket相对于Http是一个持久化的协议——不会断开连接——利用一次简单的握手建立起tcp协议。

实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端(不同于HTTP协议)。

原理:在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” 。在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值