长连接,长轮询,websocket有什么区别和联系?

今天看websocket原理,发现网上有的人说websocket是HTTP长连接,有的说是webSocket TCP连接。
HTTP长连接的意思是设置connection:keep-alive的意思吗?是不是连接时间很长就算是长连接啊?

对于长轮询,发送请求后HTTP连接不断开,除非数据变动需要响应或者超时或者断网。那么在这一次轮询中HTTP连接也是长久的啊,这算是长连接吗?

为什么网上说“使用传统的 HTTP 轮询或者长连接的方式也可以实现类似服务器推送的效果,但是这类方式都存在资源消耗过大或推送延迟等问题。”使用websocket建立了连接之后服务端就会一直推送消息给客户端,而不需要像长轮询那样每次轮询都有建立新的HTTP,TCP连接。那么使用websocket的时候一直不断开连接难道不算是长连接?

阅读 7.1k
2 个回答

轮询就是一般就是设置一个无限的循环,不停的发起ajax请求,直到得到需要的结果。

例如:

h5支付,当打开支付页面后不断发送请求,查询用户是否完成了支付
如果没有,继续请求
如果是,跳到支付成功显示页面

所以,轮询只是一波又一波的ajax请求而已,并不是长连接

轮询就是自己不断去看有没数据。

以点餐排号为例,轮询就是每隔一段时间就去看看有位没有。短的轮询就是看到没位时就坐下来休息一下再去问。长轮询就是一直在前台耗着,一定要服务员给你个位,通常坚持一段时间之后服务员把你赶走(或者你自己放弃了),你一坐下也不休息马上又去找服务员,开始新一轮长轮询。

短轮询就是没结果时直接返回,长轮询就是没结果等到有结果。

keep-alive说的是对底层tcp链接的复用,没keep-alive也能长轮询。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题