参考文章:
http://abbshr.github.io/2013/11/05/new46.html

http://www.zhihu.com/question/20215561 等
首先,
HTTP WEBSCOKET SCOKET是三个网络协议,http网络协议目前最新版本为1.1 相关的API有HTML5等,使用httprequest httpresponse来收发数据,数据采用应答式,即客户端主动向服务端发送数据请求,服务端返回数据,应答结束,连接结束。当然可以使用keep-alive的应答模式,但是即使在这种模式中也是通过客户端ajax,comet(还没研究)等技术来实现,本质上服务端还是无法主动向客户端发送数据。(而且目前的web server中普遍有timeout的概念如apache2.0为15s 2.2为5s timeout后会断开keep-alive的连接)

socket基于TCP/IP的网络协议,数据以数据包package的形式传递,多用于桌面程序中,比较成熟,应用广泛,基于transport layer数据传递。
数据接收过程中以package的形式传递,接收的时候不保证一次接收到想要的数据长度,需要循环接收知道数据完整,常用的函数:

socket("ip","port") 

bind() 

send() 

recv() 

read() 

write()等



websocket是html5中提供的api 基本原理是在http协议层上实现了tcp通信(可双向收发信息,和http有本质的不同html5的新东西嘛,不过底层实现的原理还没有研究呢)。
和http的区别在于真正实现了双向收发数据(一个是application layer 一个是 TCP layer),但是是为了解决浏览器和web server通信不能使用tcp来实现而出现了,因此为了兼容在websocket和web server进行handshake的时候使用了http协议(只有这一个地方使用了http协议,之后数据交互使用的是tcp协议),和普通http不同的是协议中发送的数据为:
upgrade : websocket 明确告诉服务器使用升级版本协议websocket如果服务器不支持会返回错误 ,支持则连接创建成功(这个要说明的是websocket的连接需要客户端服务器同时支持否则无法成功连接)

client: 

Upgrade: websocket 

Connection: Upgrade 

Sec-WebSocket-Key: ************== 

Sec-WebSocket-Version: ** 

server: 

Upgrade:websocket 

Connnection: Upgrade 

Sec-WebSocket-Accept: ******************


和socket不同的是首先websocket是为了解决browser和web server的数据传输而产生的,因此为了兼容使用了http协议的handshake,其次数据传输使用了frame格式的数据 区别于socket的package数据包的格式,如
下面就是一个Frame:(以bit为单位表示)

0 1 2 3 

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 

 +-+-+-+-+-------+-+-------------+-------------------------------+ 

 |F|R|R|R| opcode|M| Payload len | Extended payload length | 

 |I|S|S|S| (4) |A| (7) | (16/64) | 

 |N|V|V|V| |S| | (if payload len==126/127) | 

 | |1|2|3| |K| | | 

 +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + 

 | Extended payload length continued, if payload len == 127 | 

 + - - - - - - - - - - - - - - - +-------------------------------+ 

 | |Masking-key, if MASK set to 1 | 

 +-------------------------------+-------------------------------+ 

 | Masking-key (continued) | Payload Data | 

 +-------------------------------- - - - - - - - - - - - - - - - + 

 : Payload Data continued ... : 

 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 

 | Payload Data continued ... | 

 +---------------------------------------------------------------+




三者都是基于TCP协议的,socket TCP协议 websocket HTTP + TCP协议 HTTP TCP协议(HTTP通信本质上是server开启了一个TCP连接来处理HTTP请求,keep-alive的原理就是开启并保持一个持久了tcp channel来处理多个HTTP请求,非keep-alive则是处理完一个http请求后tcp channel 随之关闭)。
另外,websocket(ws)使用端口80(http) websocket security(wws)443(https)使用HTTP一样的端口。