socket/WebSocket/WebService/http/https概念

学习之前, 要对这个网络七层协议有个了解

网络七层协议从低到高:

1、物理层(Physical Layer)

2、数据链路层(Data Link Layer)

3、网络层(Network Layer)

4、传输层(Transport Layer) ---------socket(发动机/提供了网络通信的能力。socket是一切通过端口通信的基础(包括http))

5、会话层(Session Layer)

6、表示层(Presentation Layer)

7、应用层(Application Layer) ---------http(轿车/提供了封装或者显示数据的具体形式(超文本传输协议)) /webSocket(是HTML5规范提出的一种协议,基于也是应用层) /FTP协议(File Transfer Protocol,文件传输协议)

 最通俗易懂的网络应用层协议详解 :https://blog.csdn.net/qq992817263/article/details/56669228

 

什么是协议? : 协议是一种约定,我们规定好一种信息的格式,如果发送方按照这种请求格式发送信息,那么接收端就要按照这样的格式解析数据。这就是协议。

一.socket(传输控制层接口)

1.1 socket传输的定义

 所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协议。socket处于网络协议的传输层。Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
    udp协议:广播式数据传输,不进行数据验证
    tcp协议:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流。

补充:

“Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,提供一套调用TCP/IP协议的API。
在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。”

当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次.

1.2 socket传输的特点:
   优点
   1) 传输数据为字节级,传输数据可自定义,数据量小(对于手机应用讲:费用低)
   2) 传输数据时间短,性能高
   3) 适合于客户端和服务器端之间信息实时交互
   4) 可以加密,数据安全性强
   缺点:
   1) 需对传输的数据进行解析,转化成应用级的数据
   2) 对开发人员的开发水平要求高
   3) 相对于http协议传输,增加了开发量

1.3  socket传输适用范围

  基于socket传输的特点 : socket 传输方式适合于对传输速度,安全性,实时交互,费用等要求高的应用中,如网络游戏,手机应用,银行内部交互等
 

二. WebSocket(应用层协议)

1.1 WebSocket协议是什么?

WebSocket是HTML5规范提出的一种协议;目前除了IE浏览器,其他浏览器都基本支持。和HTTP协议是并存的两种协议(Websocket和HTTP有关系,但是关系不大, websocket在首次建立连接时要使用下http协议(服务器返回101,则表示c/s由http协议升级websocket协议成功)。但是值得注意的是,这只是他们之间唯一的仅有的相同点。除此之外,他们完全不同。,如图:

 )。

 

WebSocket是HTML5中的协议。HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用Web Socket协议与远程主机进行全双工的通信。它引入了WebSocket接口并且定义了一个全双工的通信通道,通过一个单一的套接字在Web上进行操作。HTML5 Web Sockets以最小的开销高效地提供了Web连接。相较于经常需要使用推送实时数据到客户端甚至通过维护两个HTTP连接来模拟全双工连接的旧的轮询或长轮询(Comet)来说,这就极大的减少了不必要的网络流量与延迟。

1.2 WebSocket协议有什么特点?

♥ Websocket是基于HTTP协议的.但是和http最大的不同是:
  a. WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样;(而http服务端不能主动联系客户端,只能有客户端发起,太被动啦)
  b. WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信

补充: 传统http是 一发一收关闭,每次请求-应答都需要客户端与服务端建立连接的模式(每次都要重新发起连接请求).
     而一旦WebSocket连接建立后,在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。

♥ Websocket是一个持久化的协议.
  (只要建立一次HTTP请求,就可以连续不断的得到服务器推送的消息,节省带宽和服务器端的压力,也可以用long poll 和 ajax 轮询 来 模拟出类似的效果)
     eg: 客户端:我要建立websocket连接 
         服务器端:好的,已经切换到websocket协议,websocket连接已经建立
      客户端: 有什么消息要及时告诉(推送)我
      服务器端:好的
      服务器端:xxxxxx
         服务器端:yyyyyyy

1.3 WebSocket 协议案例

首先我们来看个典型的 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

 熟悉HTTP的同学可能发现了,这段类似HTTP协议的握手请求中,多了几个东西。我会顺便讲解下作用。

1

2

Upgrade: websocket

Connection: Upgrade

 这个就是Websocket的核心了,告诉 Apache 、 Nginx 等服务器:注意啦,我发起的是Websocket协议,快点帮我找到对应的助理处理~不是那个老土的HTTP。

1

2

3

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13

 首先, Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的,告诉服务器:不要忽悠窝,我要验证你是不是真的是Websocket助理。

然后, Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。简单理解:今天我要服务A,别搞错啦~

最后, Sec-WebSocket-Version 是告诉服务器所使用的 Websocket Draft(协议版本).

然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!

1

2

3

4

5

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

Sec-WebSocket-Protocol: chat

这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~

1

2

Upgrade: websocket

Connection: Upgrade

摘抄于: https://blog.csdn.net/frank_good/article/details/50856585 和    https://www.zhihu.com/question/20215561

 

1.4 Websocket应用场景

可以实现客户端与服务器端的通信,实现服务器的推送功能.

补充:(在程序设计中,这种设计叫做回调,即:你有信息了再来通知我,而不是我傻乎乎的每次跑来问你 )

三. WebService(服务)

1.1 什么是WebService?(建议看百度百科,有更详细的介绍)

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。

所谓远程调用,就是一台计算机a上 的一个程序可以调用到另外一台计算机b上的一个对象的方法。

 

1.2 WebService平台技术

XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

• XML+XSD

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关 的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这 些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就 是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所 有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。

• SOAP

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明 HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service

 SOAP协议 = HTTP协议 + XML数据格式

SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比 喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

• WSDL

好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方 法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

 WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。

  WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。 WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

 

1.3 WebService 开发

WebService开发可以分为服务器端开发和客户端开发两个方面

• 服务端开发:把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用。

• 客户端开发:调用别人发布的WebService服务。

 

1.4 WebService 的工作调用原理

对客户端而言,我们给这各类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,我调用 这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成 soap格式的数据,通过http响应消息回给客户端。

1.5 WebService与Socket的区别

https://www.cnblogs.com/ruiati/p/6632332.html

1.6 WebService的优点 / 缺点:

Webservcie由于是遵循标准的soap协议,soap 协议的内容格式固定,soap协议传递的内容是xml数据,由于webservice是基于http的,所以简单理解为soap=http+xml,适用于没有性能要求情况下且数据传输量小,推荐在公开接口上使用webservice,因为soap协议的标准的。

优点如下:

• 可操作的的分布式应用程序

可以实现不同应用程序和在不同系统平台上开发出来的应用程序之间通信。与RMI、DOCM、CORBA最大的不同就是:Web Service 以 SOAP 作为基本通信协议从而避免了复杂的协议转换.

•  Web Service 甚至可以穿越防火墙,真正的自由通信
一般要访问的Web服务器以及要访问的Web Service的客户端很可能位于防火墙后面,都默认关闭其它端口而开放HTTP端口,而Web service 正是基于HTTP的,所以它可以穿越防火墙.

•  普遍性、使用HTTP和XML进行通信
任何支持HTTP和XML 技术的设备都可以拥有和访问Web Service,不同平台不同开发语言照样可以调用我们发布的Web Service.

•  应用程序集成

企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需要从运行在IBM 主机上的程序中获取数据;或者把数据发送到主机或UNIX 应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过WebService ,应用程序可以用标准的方法把功能和数据“ 暴露” 出来,供其它应用程序使用。

•  B2B 的集成

用WebService 集成应用程序,可以使公司内部的商务处理更加自动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做B2B 集成。WebService 是B2B 集成成功的关键。通过WebService ,公司可以把关键的商务应用“ 暴露” 给指定的供应商和客户。

 

缺点如下:

缺点一:单机应用程序

目前,企业和个人还使用着很多桌面应用程序。其中一些只需要与本机上的其它程序通信。在这种情况下,最好就不要用WebService ,只要用本地的 API 就可以了。COM 非常适合于在这种情况下工作,因为它既小又快。运行在同一台服务器上的服务器软件也是这样。最好直接用COM 或其它本地的API 来 进行应用程序间的调用。当然WebService 也能用在这些场合,但那样不仅消耗太大,而且不会带来任何好处。

 

缺点二:局域网的同构应用程序

在许多应用中,所有的程序都是用VB 或VC 开发的,都在Windows 平台下使用COM ,都运行在同一个局域网上。例如,有两个服务器应用程序需要相互通信,或者有一个Win32 或WinForm 的客户程序要连接局域网上另一个服务器的程序。在这些程序里,使用DCOM(docm: 分布式组件对象模型,分布式组件对象模式) 会比SOAP/HTTP 有效得多。 与此相类似,如果一个.NET 程序要连接到局域网上的另一个.NET 程序,应该使用.NETremoting 。有趣的是,在.NETremoting 中, 也可以指定使用SOAP/HTTP 来进行WebService 调用。不过最好还是直接通过TCP 进行RPC(rpc: 远程过程调用) 调用,那样会有效得多。

 

对WebService作补充:

一、WebService是什么?
  1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)
  2. 一个跨语言、跨平台的规范(抽象)
  3. 多个跨平台、跨语言的应用间通信整合的方案(实际)

二、为什么要用Web service?
  web service能解决:
   跨平台调用
   跨语言调用
   远程调用
三、什么时候使用web Service?
  1. 同一家公司的新旧应用之间
  2. 不同公司的应用之间
  3. 一些提供数据的内容聚合应用:天气预报、股票行情

四、WebService中的几个重要术语
4.1、WSDL(web service definition language)
  WSDL是webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档, 定义了客户端与服务端发送请求和响应的数据格式和过程

4.2、SOAP(simple object  access protocal)
SOAP是"简单对象访问协议"
  1.是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据
  2.soap消息:请求消息和响应消息

4.3、SEI(WebService EndPoint Interface)
  SEI是web service的终端接口,就是WebService服务器端用来处理请求的接口

4.4、CXF(Celtix + XFire)
  一个apache的用于开发webservice服务器端和客户端的框架。

五.总结
  Web service是创建可互操作的分布式应用程序的新平台。Web service 的主要目标是跨平台的可互操作性。为了达到这一目标,Web service 是完全基于XML、XSD等独立于平台、独立于软件供应商的标准的。

  Web service在应用程序跨平台和跨网络进行通信的时候是非常有用的。Web service适用于应用程序集成、B2B集成、代码和数据重用,以及通过Web进行客户端和服务器的通信的场合。

  当然,Web service也不是万能的,你不能到处滥用Web service.在有些情况下,Web service 会降低应用程序的性能,而不会带来任何好处。
        例如,一台机器或一个局域网里面运行的同构应用程序就不应该用Web service 进行通信

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值