1. 介绍

websocket和http都属于应用层协议,网络层都基于TCP协议。

PS:

  1. 虽然TCP协议是全双工的协议,但是应用层不一定是全双工的(看具体实现)
  2. websocket和socket是两个东西:Socket是一个针对TCP和UDP编程的接口。应用程序通过它来发送和接收数据,借助它建立TCP连接等等。这里需要重点说明的,socket不是一个协议,只是一个编程接口。当然,websocket也用到了socket接口来实现其协议。

2. websocket

websocket的特点主要如下:

  1. 全双工协议:http协议基于请求应答,现在只能做单向传输,是半双工协议;websocket是全双工协议
  2. 必须使用长连接

PS: 关于http协议,以及长连接、轮询等知识可以参考我的文章:网络通讯之长连接、长轮询、短轮询理解

3. comet不等价于全双工

3.1 说明

这里特别提一下: comet不等价于全双工。

一般我们说comet即指服务器支持在一个请求中,等待有数据后才推送数据给客户端。但是comet仍然是基于请求应答模式的。在一个HTTP连接通道中,某个时刻只能做单向传输。即当客户端正在主动给服务端发送数据时,服务端是没法主动发起发送请求给客户端发送数据的。

3.2 关于推拉模型

向HTTP协议这种,都可以看成是拉模型。虽然comet支持服务器在有数据的时候推数据,但是其本质还是基于请求应答的拉模型。

如果服务器能主动发送数据给客户端,那么则可以理解为是推模型了(PS:comet这种不是哦,因为没有主动发起请求)。

而websocket这种全双工协议,自然就是推拉结合的方式了。

参考资料:

  1. WebSocket 与 Socket.IO