关于Websocket、Ajax轮询和长连接(long pull)

题外话:我们在此先理解一下TCP/IP协议。

一:三次握手

一次完整的请求会经历三次握手:

  • 第一次握手:客户端会发送 SYN 包给服务端,以询求服务端是否能够正常通讯
  • 第二次握手:服务端在接受到客户端发来的包后,向客户端发送 SYN/ACK 数据包,用来告诉客户端,我这边是 OK 的,你能够向我发起连接
  • 第三次握手:客户端收到服务端回传的 SYN/ACK 包后,再次向服务端发送标注有 ACK 的数据包,用来告诉服务端,我这边也收到了你的回信,我们开始通信吧
  • 二:超时重试

    当发送者向接受者发送数据包后,如果过了一段时间(超时时间)还是没有收到回信,则视为本次包丢失,需要重新补发。

    Note: 如果一次性发送了三个包,只要最后一个包确认接收到了,则认为前两个包也接收到了。

    三:滑动窗口

    我们可以理解为是发送方式的协议,假设说发送端一次发送包的大小为 3,发送端可以边发边接受,这样就可以显著提高通信的效率。

    这里说的大小为 3,就是滑动窗口的大小。

    这里有个 TCP/IP协议的文章可以了解一下。还有一篇 阮一峰老师的websocket的教程

    后面我们开始理解Websocket以及Ajax轮询和长连接(long pull)。

    一、websocket与http

    WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)

    首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解

    有交集,但是并不是全部。

    另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。通俗来说,你可以用HTTP协议传输非Html数据,就是这样=。=

    再简单来说,层级不一样。

    二、Websocket是什么样的协议,具体有什么优点

    首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。

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

    在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = R

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值