JS中的websocket

websocket是HTML5中新出的协议
websocket是一个持久化的协议(相对于HTTP协议来说)。HTTP的生命周期是通过Request来界定,也就是说一个Request一个Response,在1.0中,这样的http请求就结束了。在Http1.1中进行了改进,使得有一个keep-alive。也就是说在一个http连接中,可以发送多个request,接收多个response。但是请记住,在Http中永远是 Request=Response
websocket只需要一次http握手,所以说整个通信过程是建立在一次连接/状态中。也就避免了Http的非状态性。服务端会一直知道你的请求信息,知道请求关闭。
websocket使用
var ws = new WebSocket(url)
ws.open()	// 连接服务器
ws.onmessage()	// 连接服务器返回
ws.onerror()	// 连接通信报错
ws.onclose()	// 关闭连接 
ajax轮询
1.短轮询
客户端通过定时器向服务端发送ajax请求
function getting(){
	$.ajax({
		type,
		url,
		success:function(){},
		error:function(){}
	})
}
// 设置定时器发送请求
setInterval(getting,2000)
2.长轮询
浏览器发送一个请求到服务器,服务器一直保持连接打开,直到有数据可以发送。发送完数据之后,浏览器关闭连接,随即再发送一条请求过去,以此循环下去
var getting = function(){
	$.ajax({
		type,
		url,
		success:function(res){
			console.log(res)
			// 收到响应后再次调用
			getting()
		},
		error:function(err){
			console.log(err)
			// 响应出错后继续调用
			getting()
		}
	})
}
getting()
轮询虽然也可以实现相同效果,但是比较耗费服务器端资源
websocket优点
- 支持推送,服务端可直接将数据发送到客户端而不用等待客户端发起请求
- 只要建立了连接,就会一直保持连接,直到请求关闭。也就避免了HTTP的非状态性,和HTTP相比,不但每次连接时候的总开销少了,而且websocket首部位置的信息量也少,通信量也小了。
- 减少了服务器端的资源小消耗(由于Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值