HTTP (HyperText Transfer Protocol)
HTTP是种无状态的协议,无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,
这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(Response),
连接就被关闭了,在服务器端不保留连接的有关信息。也就是说,HTTP 请求只能由客户端发起,而服务器不能主动向客户端发送数据。
HTTP是个基于 TCP/IP通信协议来传递数据(HTML 文件,图片文件,查询结果等)。
TCP协议进行三次握手之后,保持长连接,但是HTTP发送request和收回response之后就结束, 无状态,无连接。
在HTTP的boby里装着需要传输出去的数据,可以是Json格式,也可以是XML格式。
#个人理解,未必正确#
浏览器上的所有信息,包括HTML脚本、静态的图片、动态的数据(从DB中抽出的数据)都是使用Http协议传输到浏览器的。
都是通过协议中的body(报文的正文)传输,文件过大的时候可以拆分分成chunked。
通过浏览器下载几G的软件也是通过HTTP协议,所有的数据都是以字节流的形势传输。
WebSocket
应用层协议。服务器端可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,真正的双向平等对话。
属于服务器推送技术的一种。保持长连接。适用于聊天室等场景。
HTTP和WebSocket是基于浏览器和服务器间数据交互的协议。WebSoqket能够解决HTTP单向通信的问题。两者都是基于TCP协议。
Socket
Socket 是操作系统提供的对于传输层(TCP /UDP)抽象的接口,是一个编程概念。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,封装了TCP协议,内部还是需要握手等流程。
当两台主机通信时,必须通过Socket连接, Socket则利用TCP/IP协议建 立TCP连接。TCP连接则更依靠于底层的IP协议, IP协议的连接则依赖于链路层等更低层次。
Socket数据通道两边的插头。
1)Socket(套接字)开发网络应用程序被广泛采用,以至于成为事实上的标准。
2)通信的两端都要有Socket,是两台机器间通信的端点。网络通信其实就是Socket间的通信。
3)Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
4)一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。
Socket客户端处理
Socket服务器端处理
WebServiceWebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,把调用这个WebService的应用程字叫做客户端,
而把提供这个WebService的应用程字叫做服务端。
WebService采用HTTP协议传输数据,采用XML格式封装数据(XML中写明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。
它使用Web(HTTP)方式,接收和响应外部系统的某种请求。主要依赖于XML-RPC和SOAP(简单对象访问协议)等标准,通过HTTP协议进行交互。
SOAP协议= HTTP协议+ XML数据格式
我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,当用户从我们的网点看到天气信息时,
他会认为我们为他提供了很多的信息服务,但其实我们什么也没有做,只是简单调用了一下服务器上的一段代码而已。
学习WebService可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样。
#自己写的一段WebService类型的代码,放到网站,别人配置的方式就能把你的代码引入到自己的代码工程。
WebService例:
启动main方法之后, 在画面输入URL,会显示如下页面。相当于WebService的使用说明文档。
使用WebService:通过wsimport -s . http://localhost:8085/zl?wsdl命令或者配置,生成WebService的代码。
把这些代码(class文件)复制到表示客户端工程,在工程代码中随意的调用这些类即可。
微服务HTTP API本质上意味着,让服务就像响应浏览器或者Postman这样的桌面客户端那样发送信息。
俩个服务之间建立Client和Server的关系,通过HTTPRequest, HTTPResponse交互。 两个服务之间的交互就像浏览器和服务器之间-一样。
微服务架构中可以使用HTTP协议进行数据通信, 也可以使用Socket实现服务之间的数据交互。
RPC
RPC是种远程调用。http是协议,rpc是方法,rpc的实现可能也会用到http、Socket。 WebService都可以统称为RPC。
一些公司基于TCP/UDP协议自己实现了一 种远程数据传输框架, 例如GRPC。rpc=数据传输协议(tcp、http等)+数据格式规则(xml、yml、JSON)
良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少 了这些特性。
速度来看,RPC要比http更快, 虽然底层都是TCP,但是http协议的信息往往比较臃肿
难度来看,RPC实现较为复杂, http相对比较简单
灵活性来看,http更胜一筹,因为它不关心实现细节,跨平台、跨语言。
RUST
微服务之间需要相互通信以完成特定的业务处理. ,在典型的客户端~服务端设计模型中,
客户端和服务端通过消息请求响应的方式交互协作,REST 就是这样一套微服务之间交互接口的设计约束和原则规范。
REST是种软件架构接口设计风格,RPC 是种计算机通信协议,看起来是两个不同的概念,没法比较。
Web服务器、HTTP 服务器、应用程序服务器
web服务器和HTTP服务器是相等的。
通俗讲web服务器就是专门用来处理HTTP请求的应用程序服务器可以简称为应用服务器,
它主要的功能就是为客户端应用程序提供可调用的方法(应用程序提供(serves)商业逻辑)。
以这样的定义可对一些常见的服务器进行分类,IS、 Apache、 Tomcat 都可以属于Web服务器,Weblogic. WebSphere都属于应用服务器。
Apache:纯粹的web服务器
Tomcat、IIS: 因为具有了解释执行服务器端代码的能力,可以称作为轻量级应用服务器或带有服务器功能的Web服务器。
Weblogic、WebSphere: 因为能提供强大的J2EE功能,无疑问是绝对的应用服务器。
对于处于中间位置的Tomcat,它可以配合纯Web服务器Apache 一起使用,也可以作为应用服务器的辅助与应用服务器一起部署。
TCP协议:传输控制协议
1)使用TCP协议签,需要先建立TCP连接,形成传输数据通道。
2)传输前,采用“三次握手”方式,因此TCP协议具有可靠性特征。
第一次握手:客户端:hi,忙吗
第二次握手:服务端:不忙
第三次握手:客户端:不忙的话 ,找你说点事
开始说事。。。
3)TCP协议进行通信的两个应用进程:客户端,服务端。
4)在连接中可进行大数据量的传输。
5)传输完毕,需要释放已建立的连接,效率低。
UDP协议:
1)将数据,源,目的封装成数据包,不需要建立链接。
2)每个数据包的大小限制在64K内。
3)因无需连接,因此不可靠。
客户端⇒服务器端:明天上午10点开会哈。。。
4)发送数据结束时,无需释放资源(因为不是面向连接的),速度快。
如发送短信。
Socket和HTTP的不同
引:https://worktile.com/kb/ask/22918.html
1、主体不同
socket:socket不属于协议范畴,而是一个调用接口(API),是对TCP/IP协议的封装。实现服务器与客户端之间的物理连接,并进行数据传输。
http:HTTP是基于TCP/IP协议的应用层协议,定义的是传输数据的内容的规范。
2、所处层次不同
socket:Socket处于网络协议的传输层,主要有TCP/UDP两个协议(当然也有TCP/IP协议族中其他的协议)。
http:HTTP是基于TCP/IP协议的应用层协议。
3、连接状态不同
socket:socket连接是长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会使连接断开,比如:服务器端或客户端主机宕机了、网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息。
http:HTTP是基于请求-响应形式并且是短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。HTTP是无状态的协议,针对其无状态特性,在实际应用中又需要有状态的形式,因此一般会通过session/cookie技术来解决此问题。
4、传输数据量不同
socket:socket传输的数据可自定义,为字节级,数据量小。
http:HTTP的传输速度慢,数据包大。
5、数据安全性不同
socket:数据可以加密,数据安全性高,适合Client/Server之间信息实时交互。
http:数据传输安全性差,如实现实时交互,服务器性能压力大。
6、连接方式不同
socket:Socket是客户端跟服务器直接使用Socket”套接字”进行连接,并没有规定连接后断开,所以客户端和服务器可保持连接通道,双方都可以主动发送数据。
http:http是客户端用http协议进行请求,发送请求的时候需要封装http请求头,并绑定请求的数据,服务器一般有web服务器配合(当然也非绝对),http的请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开连接,以节省资源,服务器不能主动给客户端发起响应,主要使用类是NSURLConnection。