Websocket

来源:互联网 发布:销售知乎 编辑:程序博客网 时间:2024/04/29 11:51

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

响应头部

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: 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。

0 0
原创粉丝点击