zoukankan      html  css  js  c++  java
  • webserver技术总结之一:webserver概念

    WebService的简介, 原理, 使用,流程图

    第一部分: 直观概述

    WebService的几种概念:

    以HTTP协议为基础,通过XML进行客户端和服务器端通信的框架/组件

    两个关键点:

    1.       服务端提供的功能, 通过xml描述

    2.       第一步中的描述的功能, 嵌入到HTTP协议中, 使得能通过HTTP协议进行通信【所谓的SOAP】.

    用图可以如下表示:

     

    图一: WebService的简要表示

    采用这两个技术的目的主要是:

    1.       跨平台, 支持HTTP协议的主机和服务器, 都能够建立通信联系, 并且大部分的主机和服务器(99.999%以上)将支持HTTP协议。一般而言,不同目标主机之间的通信,需要通过防火墙,打开某个端口, HTTP协议的优势在于,防火墙一般不会封掉80端口, 这样就可以方便,安全的通信。

    2.       跨语言, 任何语言, 都支持XML文本解析, 这个的目的是为了实现不同语言之间的通信, 通信的内容,是被xml限制的,因此这样进行通信,能跨越语言障碍,即, Java开发的服务端,客户端可以用C访问, 可以用java,VB等访问, 反之亦然。

    第二部分: 基本原理和架构

    当然,架构比我们上面说到的图要更为复杂,上面只是说明了一来一回的通信, 实际情况还需要考虑以下问题, 参照图例说明:

    1. 服务器端(Provider) 提供统一的标准化服务。就像开办一个公司(即Server Provider), 工商行政管理局,注册一下公司地址和性质。目的是, 别人要用公司的服务,从工商管理局就知道你的地址。这样统一的做法,是方便所有的公司以及所有需要公司提供服务的客户。并且这些信息是最大限度的公开。

    2. 客户端(Requester) 到注册中心(Registry)拿到公司的基本信息之后, 去找到这个公司, 然后使用该公司提供的服务。

     

    图二: 基本的WebService架构流程图

    注意上面图中的基本步骤的标号, 解释如下

    1. Provider节点提供好服务后, 首先注册到节点Registry

    2和3. Requester节点到Regitry节点查信息, 找到需要的Provider及其提供的Service

    4. Requester使用Provider提供的服务

    更具体的介绍, 参照参考文献[2], 下面这些基本由这个参考文献翻译而来:

     

    图三: 细节步骤流程图

    上图这些东西, 完完整整的呈现了WebService的整个原理流程:

    1.       Client有需要,想调用一个服务,但不知道哪里去调用. 但知道UDDI Registry上可以查到。

    2.       果然UDDI记录了某个一个叫做Web Server A的服务器能提供这样的服务。

    3.       于是Client去Web Server A, 询问确切的调用方法。

    4.       Web Server A看到Client提出的“确切方法查询”之后,立即返回给它一个WSDL描述的xml文档这里记录他能提供的各类方法接口.

    5.       Client了解到这些之后,将这些xml的接口方法,封装成为HTTP请求, 发给Web Server A. 这些封装方式采用的是标准的SOAP方式, 实质是满足HTTP协议的一些SOAP的报文消息。

    6.       Web Server A回应的也是HTTP协议的SOAP包. 这样双方的请求-响应完全畅通。

    上面我们看到的是应用原理图, 进一步深入, 可以发现如下的协议架构图:

     

    图四: 协议结构

    上面我们已经花了很大的精力, 介绍了发现Service(UDDI), Service提供的接口描述(WSDL), 调用Service(SOAP), 以及传输(HTTP)的的整个过程。因此不再做介绍。这个技术的核心是SOAP.

    第三部分: 实践WebService

    看到上面的图那么复杂, 实质上SOAP+HTTP协议已经足够成熟,犯不着让我们通过xml生成带有SOAP变迁的HTML脚本, 有很多工具可以帮住我们实现。事实上,开发起来还是相当简便的。

    情况A: 已知存在Web Service, 客户端的开发可以通过以下步骤:

    1. 通过UDDI,查找到Client程序需要的Web Service的位置
    2. 通过WebService找到 WSDL接口描述文件
    3. 通过工具,将步骤2得到的WSDL文件,生成一个Client Stub, 这个实质上是代码, 也就是打了一个桩。把这个stub的代码归并到Client程序中.
    4. 每次Client需要调用WebService的时候,直接调用步骤4生成的Stub 接口,就实现了对Server端的调用。

    情况B: Server端的开发,同样无需做解析SOAP这样的破事,框架会帮我们做好。大致步骤如下:

    1. 实现WebServer需要提供的所有功能

    2.       利用WSDL文件(或者IDL)生成Server Stub, 这些代码将负责接收从外界获得的请求,并将其转发给Web Server的Service Implementation(实现代码)。当Service Implementation的代码处理完,产生结果之后,又会把结果交给Server Stub, 然后 Server Stub可以产生一个SOAP的响应. Server Stub + Server Implementation 合在一起, 称为Web Service Container, 这玩意儿就是让发送到WebService的HTTP请求,直接送到Server Stub上面的。

     

    图五:实际应用中的调用

    参考资料:

    三:WebService的实现原理

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

    1: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类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。

    2:SOAP

    WebService通过HTTP发送请求和接收结果。发送的请求内容和结果内容都采用xml格式封装,并增加了一些特定的HTTP消息头,
    这些特定的HTTP消息头和xml内容格式就是SOAP协议。
    SOAP协议=HTTP 协议+XML数据格式
    SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。
    打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

    3: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.直接告诉给客户端调用者。
  • 相关阅读:
    yum 本地 网络 openstack
    docker 负载均衡
    tomcat + nginx 负载均衡 动静分离 session会话配置
    K8S Ingress 之 traefik-ingress-controller
    CentOS7安装和配置rsync+inotify
    DAS,NAS,SAN在数据库存储上的应用
    inotify+rsync实现实时同步
    NFS网络文件系统
    CentOS7下rsync服务的基本详解和使用
    LVM--逻辑卷管理
  • 原文地址:https://www.cnblogs.com/xiaofuzi123456/p/11570855.html
Copyright © 2011-2022 走看看