一、WebSocket和Socket区别

可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系。HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。WebSocket 协议它的最大特点就是:服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种

二、socket和http的区别

  1. Http协议:简单的对象访问协议,对应于应用层。Http协议是基于TCP链接的。 tcp协议:对应于传输层 ip协议:对应与网络层
  2. TCP/IP是传输层协议,主要解决数据如何在网络中传输;而Http是应用层协议,主要解决如何包装数据。
  3. Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
  4. Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。
  5. socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。
  1. HTTP的长连接一般就只能坚持一分钟而已,而且是浏览器决定的,你的页面很难控制这个行为。Socket连接就可以维持很久,几天、数月都有可能,只要网络不断、程序不结束,而且是可以编程灵活控制的。
  2. HTTP连接是建立在Socket连接之上。在实际的网络栈中,Socket连接的确是HTTP连接的一部分。但是从HTTP协议看,它的连接一般是指它本身的那部分。

TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,

每层都有相应的协议,如下图

  1. IP:网络层协议;(高速公路)
  2. TCP和UDP: 传输层协议;(卡车)
  3. HTTP: 应用层协议;(货物)。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
  4. SOCKET: 套接字,TCP/IP网络的API。(港口码头/车站)Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
  5. TCP/IP: 代表传输控制协议/网际协议,指的是一系列协议,TCP/IP 模型在 OSI
    模型的基础上进行了简化,变成了四层,从下到上分别为:网络接口层、网络层、传输层、应用层。与 OSI 体系结构对比如下:
  1. TCP/UDP区别:

TCP:(传输控制协议,Transmission Control Protocol):(类似打电话)

面向连接、传输可靠(保证数据正确性)、有序(保证数据顺序)、传输大量数据(流模式)、速度慢、对系统资源的要求多,程序结构较复杂,每一条TCP连接只能是点到点的,TCP首部开销20字节。

UDP:(用户数据报协议,User Data Protocol):(类似发短信)

面向非连接 、传输不可靠(可能丢包)、无序、传输少量数据(数据报模式)、速度快,对系统资源的要求少,程序结构较简单 ,UDP支持一对一,一对多,多对一和多对多的交互通信,
UDP的首部开销小,只有8个字节。

三、Websocket

  1. Websocket协议解决了服务器与客户端全双工通信的问题。

注:什么是单工、半双工、全工通信?

  1. 信息只能单向传送为单工;
  2. 信息能双向传送但不能同时双向传送称为半双工;
  3. 信息能够同时双向传送则称为全双工。

wensocket协议包含两部分:一部分是“握手”,一部分是“数据传输”。
要弄明白 http 和 socket 首先要熟悉网络七层:物 数 网 传 会 表 应,如图:

  1. HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据.
  2. TCP/UDP 协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。
  3. IP 协议:对应于网络层,同样解决数据在网络中的传输。

传输数据的时候只使用 TCP/IP 协议(传输层),如果没有应用层来识别数据内容,传输后的协议都是无用的。应用层协议很多 FTP,HTTP,TELNET等,可以自己定义应用层协议。
web 使用 HTTP 作传输层协议,以封装 HTTP 文本信息,然后使用 TCP/IP 做传输层协议,将数据发送到网络上。

  1. websocket协议解析

WebSocket是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(不知道的可以看下全双工通信RS-422标准),能更好的节省服务器资源和带宽并达到实时通讯,它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大不同是:

  1. WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动的向对方发送或接收数据,就像Socket一样;

  2. WebSocket需要类似TCP的客户端和服务器端通过握手连接,连接成功后才能相互通信。

非WebSocket模式传统 HTTP 客户端与服务器的交互如下:

使用 WebSocket 模式客户端与服务器的交互如下:
WebSocket 请求响应客户端服务器交互图

根据上面两张图对比可以看出,相对于传统的HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket是类似Socket的TCP长连接的通讯模式,一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。

  1. WebSocket 实现

如上文所述,WebSocket 的实现分为客户端和服务端两部分,客户端(通常为浏览器)发出 WebSocket 连接请求,服务端响应,实现类似 TCP 握手的动作,从而在浏览器客户端和 WebSocket 服务端之间形成一条 HTTP 长连接快速通道。两者之间后续进行直接的数据互相传送,不再需要发起连接和相应。
以下简要描述 WebSocket 服务端 API 及客户端 API。

WebSocket 服务端 API
WebSocket 服务端在各个主流应用服务器厂商中已基本获得符合 JEE JSR356 标准规范 API 的支持,以下列举了部分常见的商用及开源应用服务器对 WebSocket Server 端的支持情况:

四、HTTP 协议

http 为短连接:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接,因此为短连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。

HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。

五、Socket 连接

要想明白 Socket,必须要理解 TCP 连接。

TCP 三次握手:握手过程中并不传输数据,在握手后服务器与客户端才开始传输数据,理想状态下,TCP 连接一旦建立,在通讯双方中的任何一方主动断开连接之前 TCP 连接会一直保持下去。Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。创建 Socket 连接的时候,可以指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之。

Socket 原理

Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:

  1. 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;
  2. 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;
  3. 连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速网络,该节点处于活跃状态。

很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步。

若双方是 Socket 连接,可以由服务器直接向客户端发送数据。
若双方是 HTTP 连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。

因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。

文章转自

Http、Socket、WebSocket之间联系与区别相关推荐

  1. java http 面试题_Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别面试题12期...

    TCP协议 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络O ...

  2. TCP UDP socket http webSocket 之间的关系

    阅读目录 OSI & TCP/IP 模型 几者之间的关系 HTTP Socket WebSocket webSocket 概念 webSocket 优点 Websocket 的作用 ajax轮 ...

  3. socket/WebSocket/WebService/http/https概念

    学习了这么久的java技术, 但是这5个 socket/WebSocket/WebService/http/https  概念还不是很清楚, 总是很模糊,或者是弄混. 惭愧! ! 学习之前, 要对这个 ...

  4. 自定义Udp/Tcp协议,通信协议Socket/WebSocket,IM粘包、分包解决等(2),ProtocolBuffer

    > 自定义Udp/Tcp协议/通信协议(Java/C):自定义构建和解析IM协议消息:IM自定义UDP通信协议   类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成 ...

  5. https协议必须使用443端口吗_http、https、http2、websocket之间的关系

    http.https.http2.websocket之间的关系 http:目前绝大多数是http1.1版本,最原始的web协议,默认80端口,基于TCP协议. https:加密的http协议,默认44 ...

  6. 句法分析是什么?成分句法分析、依存句法分析又是什么?他们之间有什么区别?

    句法分析是什么?成分句法分析.依存句法分析又是什么?他们之间有什么区别? 目录

  7. 科普丨数据中心、云计算、大数据之间有什么区别和联系?

    不少人把数据中心.云计算数据中心.大数据搞混淆,觉得这三者是一样的产品,其实有显著地区别,数据中心机房是一整套复杂的设施,如今,云计算即将成为信息社会的公共资源,而数据中心则是支撑云计算服务的基础设施 ...

  8. 《中国人工智能学会通讯》——4.41 两种学习之间有什么区别?

    4.41 两种学习之间有什么区别? 来 看 一 下 剑 桥 大 学 信 息 工 程 教 授 ZoubinGhahramani 对贝叶斯规划学习(BPL)的评价,他认为 BPL 对人工智能.认知科学和机 ...

  9. 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?

    本文翻译自:What is the difference between "screen" and "only screen" in media queries ...

最新文章

  1. 软件测试工程师的职业生涯规划
  2. linux平台 一个简单的helloworld动态库的制作与使用
  3. 如何理解矩阵特征值?
  4. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?
  5. java swing 一闪而过_Java代码,为什么图形会一闪而过,怎么修改?
  6. 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
  7. iPhone 12刚发布,黄牛就出动:蓝色最火,加价一千是普遍水平
  8. oracle u4e00 u9fa5,Oracle 判断汉字 [\u4e00-\u9fa5]
  9. java中cleanup的使用_Eclipse使用代码清理功能(Clean Up)
  10. Keil5 MDK版 下载与安装教程(STM32单片机编程软件)
  11. nfs服务器_亿格瑞4K蓝光播放机怎么访问电脑上搭建的NFS服务器教程
  12. java数组数据结构_Java数据结构一维数组的应用
  13. 计算机应用基础论坛发帖,计算机应用基础串讲冲刺讲义(一)_IT教育论坛_计算机学习论坛_学赛网_IT在线教育平台...
  14. 5G来了,普通人看热闹,程序员看颠覆
  15. canvas 画布标签
  16. 【2019.05.23】JS逆向——破解裁判文书网参数(vl5x,guid )爬虫 超级详细
  17. Zabbix实现企业微信报警
  18. Linux如何记录运行的Bash命令?
  19. 赛门铁克为 Google 域名颁发证书
  20. 2018最新廖雪峰全套Java完整版

热门文章

  1. linux下使用yum安装新版php7.0
  2. [bzoj1187][HNOI2007]神奇游乐园
  3. Mysql Connector 5.1 好用的新特性
  4. 【bzoj2223】[Coci 2009]PATULJCI 主席树
  5. java继承覆盖总结
  6. SCU3033 Destroying a Painting(最小费用最大流)
  7. 项目后台的最新认识和对MVC封装性、可维护性的更深刻认识!
  8. Ruby的module(模块)
  9. matlab中基本函数的用法
  10. Linux /dev目录详解和Linux系统各个目录的作用