Websocket

Websocket是什么

Websocket是基于TCP的一种新的协议,相对于HTTP协议来说更为持久,它实现了浏览器与服务器全双工通信。

Websocket原理

现在很多网站为了实现即时通讯,所用的技术都是轮询。轮询是在特定的时间间隔(比如1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的HTTP请求的模式带来明显的缺点,浏览器需要不断的向服务器发出请求,然而HTTP request的头部信息是非常长的,里面包含的有用数据可能只是一个很小的值,这样反而会占用很多的带宽。
而比较新的技术去做轮询的效果是comet,用了Ajax,但这种技术虽然可达到全双工通信,但仍需要发出请求。
在Websocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此Websocket协议中,为我们实现即时服务带来了两大好处:
1.Header
互相沟通的Header是很小的,大概只有2Bytes
2.Server Push
服务器的推送,服务器不再被动地接收到浏览器的request之后才返回数据,而是在有新数据时就主动推送给浏览器。

Websocket头实例

请求头部

GET /chat HTTP/1.1
Host: server.example.com  
// 告诉服务器发起的websocket协议
Upgrade: websocket
Connection: Upgrade
// Base64 encode的值,浏览器随机生成,验证是否是真的Websocket助理
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
// 区分通URL下,不同的服务所需要的协议
Sec-WebSocket-Protocol: chat, superchat
// 使用的Websocket协议版本
Sec-WebSocket-Version: 13
Origin: http://example.com

响应头部

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
// 经过服务器确认并且加密过后的Sec-WebSocket-Key,用于验证
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
// 最终使用的协议
Sec-WebSocket-Protocol: chat

Socket.io与websocket的区别

socket.io封装了websocket,同时包含了其他的连接方式,比如Ajax。原因在于不是所有的浏览器都支持websocket,通过socket.io的封装,你不用关心里面用了什么连接方式。你在任何浏览器里都可以使用socket.io来建立异步的连接。socket.io包含了服务端和客户端的库。如果在浏览器中使用了socket.io的js,服务端也必须同样使用。如果你很清楚你需要的就是websocket,那可以直接使用websocket。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值