持续连接的三种方式
HTTP Long Poll
原理:浏览器每隔几秒就发送一个请求,询问服务器是否有新信息(轮询方式)
例如
小白兔:老板老板,有100个胡萝卜吗?
老板:没有!
小白兔:老板老板,有100个胡萝卜吗?
老板:没有!
小白兔:老板老板,有100个胡萝卜吗?
老板:没有!
-loop
AJAX
原理:阻塞模式:一直问,收到反馈后继续问(轮询方式)
例如:
小白兔:老板老板,有100个胡萝卜吗?
老板:没有!
小白兔:老板老板,有100个胡萝卜吗?
老板:没有!
小白兔:老板老板,有100个胡萝卜吗?
老板:这次有了!
小白兔:那我要一个。
老板:...
小白兔:老板老板,有100个胡萝卜吗?
老板:没有!
-loop
分析Http Long Poll 和Ajax
一致性:均是基于Http协议,只能不断的建立http链接,等待服务器处理(映射出http的协议的"被动性")
缺点:
Long poll:无法提供高并发处理能力
Ajax:对服务器要求较高,需要有较快的速度和资源
WebSocket
优点:
解决了被动性,当服务器升级为WebSocket后,老板可以主动推送信息给小白兔。
解决了同步延迟:服务器有状态更新主动发送数据
解决了资源消耗:我们所用程序为Nginx转发,再给对应的Handler(php等)处理。但是转发够快,Handler处理慢。WebScoket让Handler有信息的时候通知Nginx,然后由Nginx转发给客户
原理:一次连接,无需重复验证:HTTP无状态,每次都要重新传输identity info(鉴别信息)告诉服务端身份
例如:
小白兔:老板,我要跟你建立WebSocket协议,需要的服务:chat,WebSocket协议版本:17(HTTP Request)
老板:好的,已升级为WebSocket协议(HTTP Protocols Switched)
小白兔:有100个胡萝卜的时候告诉我哦
老板:好的
老板:小白兔,今天有100个胡萝卜
老板:小白兔,今天有100个胡萝卜
老板:小白兔,今天有100个胡萝卜
…