websocket学习笔记

2016-07-13  本文已影响601人  西普士

websocket

websocket是web传递消息的一种协议。web传递消息的方式主要有轮询(polling)、长轮询(long-polling)、流(streaming)、插件提供socket、websocket几种方式。

websocket是html5的协议,握手协议跟http一样,握手完成之后建立TCP链接。

websocket建立的链接是持久,http的链接是非持久的。

http的生命周期通过Request来界定,也就是一个Request一个Response,在HTTP1.0中,这次HTTP请求就结束了。

在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但Response是被动的,不能主动发起。

使用websocket需要服务端、客户端、代理同时支持。

socket.io

socket.io实现了polling和websocket两种协议。如何使用,github上有example

运行example,监听网络,可以看到发了4个?EIO***的请求(不知道为什么会发4次,第一个请求是客户端告诉服务端我支持websocket)。polling和websocket方式都有:

polling和websocket请求

polling和websocket最大的区别就是请求头不一样,websocket的请求头如下所示:

websocket请求头

把前端js代码调整下,设置socket.io的options,让它只连接websocket:

var socket = io({transports: ["websocket"]})

设置之后,只有一个websocket的?EIO***连接。连接完成之后第一次发送的数据设置多久执行一次心跳(ping-pong)。之后每隔一定时间data中都会多出两条数据。

websocket请求体

参考资料

socket.io源码
HTTP的长连接和短连接——Node上的测试
借助Nodejs探究WebSocket
Web 消息推送及 WebSocket 简介
WebSocket 是什么原理?为什么可以实现持久连接?

上一篇 下一篇

猜你喜欢

热点阅读