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.直接告诉给客户端调用者。
  • 相关阅读:
    「日常训练」Single-use Stones (CFR476D2D)
    「日常训练」Greedy Arkady (CFR476D2C)
    「Haskell 学习」二 类型和函数(上)
    「学习记录」《数值分析》第二章计算实习题(Python语言)
    「日常训练」Alena And The Heater (CFR466D2D)
    Dubbo 消费者
    Dubbo 暴露服务
    Rpc
    git fail to push some refs....
    Spring Cloud (6)config 客户端配置 与GitHub通信
  • 原文地址:https://www.cnblogs.com/xiaofuzi123456/p/11570855.html
Copyright © 2011-2022 走看看