WebSocket与Socket的关系
Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
早期互联网时代有人最先把TCP/IP协议封装在操作系统中,然后以Socket接口形式提供给上层应用使用,后来为了方便在不同的技术栈实现,逐渐抽象出了一组接口,最后甚至成为了事实标准,甚至还把其他网络通信协议封装到Socket接口中。
当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。
WebSocket则是一个典型的应用层协议。
区别
Socket是对TCP协议和IP协议的封装,本身不是通信协议,WebSocket是应用层协议。
WebSocket与HTTP的关系
相同点
- 1. 都是一样基于TCP的,都是可靠性传输协议。
- 2. 都是应用层协议。
不同点
- 1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
- 2. WebSocket是需要握手进行建立连接的。
联系
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。
HTML5与WebSocket的关系
WebSocket API 是 HTML5 标准的一部分, 但这并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。
实际上,许多语言、框架和服务器都提供了 WebSocket 支持,例如:
- * 基于 C 的 libwebsocket.org
- * 基于 Node.js 的 Socket.io
- * 基于 Python 的 ws4py
- * 基于 C++ 的 WebSocket++
- * Apache 对 WebSocket 的支持: Apache Module mod_proxy_wstunnel
- * Nginx 对 WebSockets 的支持: NGINX as a WebSockets Proxy 、 NGINX Announces Support for WebSocket Protocol 、WebSocket proxying
- * lighttpd 对 WebSocket 的支持:mod_websocket