简介

在之前的理解中,讲述了socket、websocket等相关的理解,本文就socket、websocket、http理解一下其对应的联系和区别。

HTTP 协议

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

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

HTTP协议中分为TCP和UDP协议,区别如下:

TCP/UDP区别:

  • TCP

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

    面向连接、传输可靠(保证数据正确性)、有序(保证数据顺序)、传输大量数据(流模式)、速度慢、对系统资源的要求多,程序结构较复杂,

    每一条TCP连接只能是点到点的,

    TCP首部开销20字节。
  • UDP

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

    面向非连接 、传输不可靠(可能丢包)、无序、传输少量数据(数据报模式)、速度快,对系统资源的要求少,程序结构较简单 ,

    UDP支持一对一,一对多,多对一和多对多的交互通信,

    UDP的首部开销小,只有8个字节。

socket介绍:

1.socket是什么?

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口

2.socket的流程?:

服务端绑定ip端口并监听端口

客户端向对应ip端口发起连接

服务端接收客户端并处理

服务端将处理后的结果返回给客户端

3.socket的种类:tcp和udp

tcp: 面向连接、可靠、支持单播、有序的、速度慢、系统开销会大,因为有三次握手 TCP首部开销20字节。程序结构较为复杂
适用场景:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。 udp: 无连接、不可靠的、速度快、系统开销少,数据只有前面8个字节, 无序的,程序较为简单
适用场景:效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

4.socket的作用

Socket 处于应用层和传输层之间,是应用程序与tcp、ip协议交互之间的接口, 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,

Socket 连接

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

TCP 三次握手:握手过程中并不传输数据,在握手后服务器与客户端才开始传输数据,理想状态下,TCP 连接一旦建立,在通讯双方中的任何一方主动断开连接之前 TCP 连接会一直保持下去。

除了 TCP,也可以使用 UDP 协议来传递数据。

创建 Socket 连接的时候,可以指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之。

Socket 原理

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

(1) 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;

(2) 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;

(3) 连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

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

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

若双方是 Socket 连接,可以由服务器直接向客户端发送数据。

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

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

socket与http之间的联系与区别

1.http是建立在tcp连接上的,经过三次握手,握手后开始传输数据
2.http是客户端建立连接发起请求,服务端响应后断开连接,是一种短连接
3.socket是封装tcp、udp协议的接口,通过socket可以使用tcp、udp协议
4.socket是双向通信,客户端服务端均可以发起请求或者响应请求,是一个长连接、在s
5.socket需要一对套接字,客户端和服务端socket,
服务端监听端口
客户端连接服务端对应地址端口
服务端接收客户端并响应客户端

websocket与http联系与区别

1.websocket是一个持久的协议,http是非持久的协议

2.Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。

3.http是无状态协议

4.http协议只能是客户端发送数据给服务端,然后服务端响应返回数据

websocket支持服务端主动推送数据到客户端

websocket的流程:

1.建立连接, 客户端与服务器端连接

2.握手:验证服务器是否支持websocket

发送的数据如下:

GET /chat HTTP/1.1

Host: server.example.com

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13

Origin: http://example.com

Sec-WebSocket-Key:浏览器随机生成的key,base64生成
Sec-WebSocket-Protocol:websocket的协议
Sec-WebSocket-Version:websocket的版本
其中客户端有一个:Sec-WebSocket-Key字段,服务器有一个:Sec-WebSocket-Accept字段,
浏览器发送随机生成的key到服务器,
服务器返回对应Sec-WebSocket-Accept key的原理:
取出Sec-WebSocket-Key(随机产生),与一个magic string “258EAFA5-E914-47DA-95CA-C5AB0DC85B11” 连接成一个新的key串
将新的key串SHA1编码,生成一个由多组两位16进制数构成的加密串
把加密串进行base64编码生成最终的key,这个key就是Sec-WebSocket-Accept
简化:取出浏览器发送的key 与magic string连接成一个新字符串
对新key进行sha1加密返回新的加密串
对新的加密串进行base64加密并将结果返回给浏览器
浏览器接收到key与自己本地加密的key进行比较,如果验证通过则说明支持websocket协议,则进行下一步收发数据动作
为了表示服务器同意和客户端进行Socket连接, 服务器端需要使用客户端发送的这个Key进行校验 ,然后返回一个校验过的字符串给客户端,客户端验证通过后才能正式建立Socket连接。

3.收发数据

4.关闭连接

1.websocket是一个持久的协议,http是非持久的协议

2.Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。

3.http是无状态协议

4.http协议只能是客户端发送数据给服务端,然后服务端响应返回数据

websocket支持服务端主动推送数据到客户端

socket、websocket、http联系及区别

http只能有客户端发起,服务端进行响应
websocket既可以客户端发起,也可以服务端主动推送,是 全双向通信
socket是应用层与传输层之间的抽象层,是一组api接口,不是协议,是tcp、udp的封装的接口,方便调用
http是建立在socket连接之上的,是应用层的协议,http一般建立在tcp连接之上
http是短连接,向服务端请求一次后就会断开连接
socket是长连接,除去网络或者服务器宕机可以保持较长时间的连接

最新文章

  1. JAVA编程思想(第四版)学习笔记----11.10 Map
  2. github.com使用方法
  3. eclipse调试
  4. SpringMVC单元测试之MockMVC,模拟登入用户
  5. vertx verticle
  6. 取得ascii的例子
  7. SSH框架总结(框架分析+环境搭建+实例源码下载)
  8. hdu 4005 双联通 2011大连赛区网络赛E *****
  9. CMDB反思1
  10. ArcGIS Server 10.2 实战(三)图层标注及图例中文显示乱码的解决
  11. oracle 有关大数据
  12. Effective C++ 条款39
  13. 【万能的搜索,用广搜来解决DP问题】ZZNU -2046 : 生化危机 / HDU 1260:Tickets
  14. Centos6.5搭建分布式压力测试工具Tsung的环境搭建
  15. Douglas Adams - 3 Rules That Describe Our Reactions To Technologies 科技影响生活的三个规律
  16. 海量数据,大数据处理技术--【Hbase】
  17. StringBuffer&StringBuilder
  18. java在进程启动和关闭.exe程序
  19. django之路由分析
  20. VC++使用MapFileAndCheckSum完成自检测

热门文章

  1. Vue3 与依赖注入
  2. GET 与 POST 其实没有什么区别
  3. 思索 p5.js 的最佳实践
  4. 【java并发编程】ReentrantLock 可重入读写锁
  5. WinUI3开发笔记(Ⅱ)
  6. linux篇-修改mysql数据库密码
  7. 116_Power Pivot 先进先出原则库龄库存计算相关
  8. mysql外键与表查询
  9. 【Java面试】JVM如何判断一个对象可以被回收
  10. go-zero微服务实战系列(三、API定义和表结构设计)