准备:若是不太了解网络的朋友能够先看一下我以前写的文章 须要了解的网络协议 。php
想必你们再作即时通信业务或须要替代轮训的时候,确定据说过 WebSocket 和 Socket 这两个东西,咱们今天就来简单说一下这二者的区别。web
WebSocket 是一种在单个 TCP 链接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,容许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只须要完成一次 HTTP 握手,二者之间就直接能够建立持久性的链接,并进行双向数据传输。浏览器
通常状况下咱们使用 HTTP 有一个很大的缺陷,就是 HTTP 只能由客户端来主动发起,若是有须要服务端主动通知的业务,就须要轮训。轮询的效率低,很是浪费资源。为了解决 Web 端即时通信的需求就出现了 WebSocket。服务器
WebSocket(2)--为何引入WebSocket协议websocket
WebSocket 最先是在 HTML5 标准中的一部分,基本现代浏览器都是支持的,均可以直接使用。虽然是 HTML5 的一部分,可是在浏览器以外也有相应的实现。好比 Socket.io 这个库支持 Java、C++、Swift、Datr ,Python 的 ws4py,C++ 的WebSocket++ 等等。 服务端主流的 Web 容器如 Apache、Nginx、Tomcat 也都支持 WebSocket,还有 WebSocket 服务端框架如 websocketd 等。网络
操做系统中也有使用到 Socket 这个概念用来进行进程间通讯,它和一般说的基于 TCP/IP 的 Socket 概念十分类似,表明了在操做系统中传输数据的两方,只是它再也不基于网络协议,而是操做系统自己的文件系统。框架
网络中的 Socket 并非什么协议,而是为了使用 TCP,UDP 而抽象出来的一层 API,它是位于应用层和传输层之间的一个抽象层。Socket 是对 TCP/IP 的封装;HTTP 是轿车,提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通讯的能力。在 Unix 一切皆文件哲学的思想下,Socket 是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在创建链接打开后,能够向本身文件写入内容供对方读取或者读取对方内容,通信结束时关闭文件。因此若是你想基于 TCP/IP 来构建服务,那么 Socket API 可能就是你会接触到的API。socket
正如如上所说:操作系统