将一台联网设备中的信息直接共享给另一台设备根本不是一个新想法。毕竟,象 LapLink 这样的远程访问软件,已经问世了近 20 年,可以从远程计算机移动文件和文件夹,传送应用程序设置和目录以及更新已在另一台 PC 上存储的文件。
然而,当今的对等通信需要另外一个高级的层次。象 LapLink 这样的程序主要是设计用来把文件级信息从一台 PC 推到另一台,而 P2P 平台的目标则更进一步:共享数据并链接可能不兼容的应用程序。
推动 P2P 通信的引擎由 XML 通信驱动。事实上,所有新兴的 P2P 平台都依靠 XML 使数据变得可消化的,这是用户可能在台式机、便携式计算机、PDA、Pocket PC 或甚至服务器上工作的世界中必需的一个步骤。而且 XML 通信和协议构建在许多推荐标准中,在 P2P 开发社区中,正在迅速接受这些标准。
下面,我们将提供一些 XML 如何使下一代信息共享应用程序成为可能的示例。我们还将提供一些特定于应用程序的样本代码,并清楚地说明这些代码是如何支持核心 P2P 功能的。
项目 JXTA为 P2P 开发人员世界定义标准的主要工作之一,“项目 Juxtapose”(通常称作 JXTA),是基于 XML 消息传递。在开始这一由 Sun Microsystems 资助的项目时,工程师们分析了现有的 P2P 应用程序以确定这些平台有哪些公共元素。然后,他们筹划了一套协议,设计成提供一个可以在其上构建服务和应用程序的层。JXTA 设计师想使这些层又薄又小,成为一种与 TCP/IP 类似的不显眼的链接技术。这里是一些如何实现这一目的的示例。
JXTA 的核心概念之一是广告思想,命名、描述和发布 P2P 资源的存在的一种 XML 结构化的文档。资源可以是一个对等点、一个对等点组或一个服务。JXTA 规范包含一套基本的广告,每个广告都可以分解成使用 XML 模式的多个子类型。
通过这样的广告进行通信的设备不必具有靠自己进行语法分析和创建 XML 文档的能力;希望在 JXTA 网络中包含低功率设备(如手机)的开发人员可以用一个有限系列的标准 XML 消息对设备进行预编程。
清单 1 是一个 PipeAdvertisement,它描述了一个管道。在 JXTA 环境中,管道是用于发送和接收消息的通信通道。异步地处理消息。因为管道是单向的,所以有输入管道和输出管道。
清单 1. PipeAdvertisement
<?xml version="1.0" encoding="UTF-8"?> <jxta:PipeAdvertisement> <Name> name of the pipe</Name> <Id> Pipe Id </Id> <Type> Pipe Type </Type> </jxta:PipeAdvertisement> |
下一个示例是一个对等点组广告。在 JXTA 中,对等点组是提供一套公共环境的协作对等点的集合。这个组懂得使用这组指定的组协议。
清单 2. 对等点组广告
<xs:complexType name="PGA"> <xs:element name="GID" type="JXTAID"/> <xs:element name="MSID" type="JXTAID"/> <xs:element name="Name" type="xs:string" minOccurs="0"/> <xs:element name="Desc" type="xs:anyType" min0ccurs="0"/> <xs:element name="Svc" type="jxta:serviceParam" minOccurs="0" maxOccurs="unbounded"/> </xs:complexType> |
XML 定义的其它关键 JXTA 实体包括对等点,即可以表示另一个对等点所需协议的任何实体;设计成数据报的消息,包含一个信封和带主体的协议头堆栈;以及使用称为 UUID 的 128 位数据的标识来引用诸如对等点、广告或服务等实体。
Globus 项目
定义 P2P 通信的另一个尝试来自 Globus 项目,这是一个组织,致力于通过共享标准使得全球范围内的计算网格成为可能。
“网格计算”的定义有一些不同,因为这一技术仍是新兴的。根据 Globus 的定义,网格是“使软件应用程序能够集成由遍布各地的各种不同组织管理的工具、显示器、计算和信息资源的持久环境”。换而言之,网格是可以把信息和进程作为一个单个实体共享的计算机和软件的任何全异集合。
在希望关注概念的同时,一些公司正开始倾向于新兴的标准主体。各种主要计算机行业厂商,包括 IBM、Compaq、Cray、SGI、Sun、Fujitsu、Hitachi、NEC 和 Microsoft,都支持 Globus 标准。Platform Computing,一家网格计算公司,已经发行了 Globus Toolkit,Platform Globus 的一个商业版本。
Globus 的开放式网格服务体系结构(Open Grid Services Architecture,OGSA)是尝试定义 Web 服务在计算网格中应该如何起作用的方案。这个体系结构使用一套逐步流行的基于 XML 的协议,象 W3C 这样的实体都支持这些协议。这些协议包括 Web 服务描述语言(Web Services Description Language,WSDL)、SOAP 和 WS-Inspection,WS-Inspection 是一种用于定位由服务供应商发布的服务描述的一种 XML 语言。
Web 服务描述语言(WSDL)对 Globus 实现尤为重要,它为 XML 文档定义了一个模式,用于把 Web 服务描述为对消息进行操作的端点。消息可以包含面向文档的有效负载或 RPC 有效负载。WSDL 允许以多种消息格式和网络协议描述端点及表示它们的消息。还定义了 WSDL 与 SOAP 1.1、HTTP GET/POST 和 MIME 一起使用的绑定约定。
WSDL 是 OGSA 框架的核心。OGSA 将服务之间的连接定义为网格服务接口,它们在 WSDL 中称为 portType。在网格服务的 serviceType 中指定了网格服务支持的一组 portTypes。OGSA 将 serviceType 定义为一个 WSDL 可扩展性元素。
下面是 serviceType 的一个 WSDL 文档示例:
清单 3. serviceType 的 WSDL 文档
<wsdl:definitions name="ServiceTypeExample" targetNamespace="http://gridExample/Aggregate3.wsdl" xmlns:tns="http://gridExample/Aggregate3.wsdl" xmlns:gsdl="http://schemas.gridforum.org/gridServices/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://gridExample/someNamespace" xmlns:ns2="http://gridExample/someOtherNamespace" xmlns:comp="http://gridExample/myCompatibilities.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/"> <gsdl:serviceType name="IAggregate3"> <wsdl:documentation> Steve's first serviceType </wsdl:documentation> |
Jabber
Jabber 消息传递框架也是在新兴的 P2P 环境中 XML 使用的另一个示例。即时消息传递是现有 P2P 环境中最广泛部署的技术之一。
Jabber 一直作为非商业性开放源码项目的一种独立存在方式,后来形成一家开发了“可扩展即时消息传递”的商业框架的公司(Jabber Inc.)。这一框架包含它自己的通信协议和服务器体系结构,并且是基于多位置之间交换 XML 文档内容的概念。
Jabber Inc. 框架中的所有消息(包括即时消息内容、存在更改和配置更新)都作为 XML 片段传递。商业 Jabber 软件使服务器 API 和协议环境 — 基于 XML 的消息传递和存在协议(XML-based Messaging and Presence Protocol,XMPP)可供开发人员使用。
Jabber 对 XML 的依赖性允许它将其客户机与 Web 页面内容集成在一起。有了商业版的 Jabber,那些将即时消息传递 WebClient 嵌入它们页面中的企业可以通过 Jabber XML 消息更改那一页面的内容,而无需下载并刷新页面。XML 包含一个指向内容服务器上某个位置的 URL。
要获得外部服务 — 特别是认证服务 — Jabber 提供了它的 XML 数据库扩展(XML Database Extension,XDB)。XDB 使验证和建立 IM 用户的特权成为可能。用户要与其它 IM 用户共享的信息存储在外部 SQL 或 LDAP 数据库中。XDB 组件使用外部数据库,并使用标准 XML 回过来与 Jabber 服务器通信。
XML Web 服务
尽管如此,另一个对 P2P 方法 — 并且日益对各种公司开发人员 — 来说很重要的功能是将应用程序扩展到 Web 服务框架中。根据总部在马萨诸塞州剑桥的 IT 分析公司 Forrester Research 最近的分析,企业 IT 部门将在下一年中逐步使用 Web 服务使内部及与外部业务伙伴之间的协作更简便。
Microsoft 的观点(根据其在 2001 年后期所持的观点)是:XMl Web 服务适合于企业应用程序集成,通过公共因特网尝试将伙伴应用程序配合起来,并建立链接伙伴、供应商和后端企业系统的“企业生态系统”。
但是,根据 Microsoft 最近关于“Global XML Web Services Architecture”这一主题的白皮书,当前 XML Web 服务尚缺少一些重要功能。特别是,Microsoft 的作者指出,当前 XML Web 服务标准未能提供:一个持久的端到端安全性体系结构;关键路由能力,如一种指定消息路径的适当方法和动态配置那些路径的能力;消息传递的端到端保证;以及用于公司之间商业的灵活过程和基于赔偿的交易方案。
Microsoft 发布了它的“全球 XML Web 服务(Global XML Web Services)”框架,构建在 SOAP 上的四个规范。其中两个规范 WS-Security 和 WS-License 是为确保 Web 服务通信安全性而设计的。其它两个,WS-Routing 和 WS-Referral,提供了在各种通信系统上寻址和传送 SOAP 消息的一种方法。
WS-Security 是无状态的 SOAP 扩展,描述应该如何将数字凭证放置在 SOAP 消息内,以及应该如何将凭证与消息相关联以确保消息完整性和机密性。下面的样本消息说明了 WS-Security 中凭证的使用:
清单 4. WS-Security 中凭证的使用
<?xml version="1.0" encoding="utf-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <S:Header> <m:path xmlns:m="http://schemas.xmlsoap.org/rp"> <m:action>http://fabrikam.org/getQuote</m:action> <m:to>soap://fabrikam.org/stocks</m:to> <m:from>mailto:johnsmith@fabrikam.com</m:from> <m:id>uuid:84b9f5d0-33fb-4a81-b02b-5b760641c1d6</m:id> </m:path> <wsse:credentials xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/01/secext"> <wsse:binaryLicense wsse:valueType="wsse:x509v3" wsse:encodingType="xsd:base64Binary" xsi:type="wsse:BASE64_BINARY_LICENSE"> MIIEZzCCA9CgAwIBAgIQEmtJZc0rqrKh5i... RnSNBe8DQveqD6a3gUACyZ6XVe3u </wsse:binaryLicense> </wsse:credentials> </S:Header> <S:Body> <tru:StockSymbol xmlns:tru="http://fabrikam.org/payloads">QQQ</tru:StockSymbol> </S:Body> </S:Envelope> |
WS-License 描述如何将公共许可证格式(例如,X.509 和 Kerberos 票券)用作 WS-Security 凭证。同时,WS-Routing 是无状态的 SOAP 扩展,用来通过传输(例如,TCP、UDP 和 HTTP)异步发送 SOAP 消息。WS-Referral 是 SOAP 扩展,它能够动态配置消息路径上的 SOAP 节点之间的路由。