http和websocket 是应用层协议,TCP/IP 是网络层和传输层的协议,socket 是对 TCP/IP 协议的抽象 API 封装层。
http的get、post请求和websocket通信都是会经过TCP/IP层的。
直接使用socket API 进行连接和数据传输,传输的数据可以是任意内容,比如发送 http 协议 GET 请求时,若服务器上使用 socket API 监听,会收到一串字符串,字符串的内容就是 http 协议相关的请求串。
同样的, websocket 也是通过 TCP/IP 来传输数据的,不过在建立 websocket 连接的阶段有所区别。websocket 建立连接先通过 http 协议与服务器进行握手,服务器解析相应的 http 协议,确认出本次连接是 http 还是 websocket连接,如果是 websocket 连接,则双端直接进入 TCP/IP 常规的三次握手阶段,建立连接,进行双向数据通信,同socket通信
以上所述,浏览器上使用 websocket 进行长连接双向通信时,需要服务器端对 websocket 协议进行解析,建立连接。若单纯用 socket api 接收数据的话,就需要自行对 websocket 协议进行解析。
现在有各种语言的websocket的第三方库,比如:基于C的libwebsocket.org;基于Node.js的 Socket.io;基于C++的 WebSocket++;基于Python的 ws4py以及Apache、Nginx、lighttpd都有相应的websocket库