在我们多数人考虑点对点 (P2P) 应用程序时,自然而然就会想到即时消息传送应用程序、简单文件共享程序和游戏。一般情况下,在我们考虑分布式应用程序设计时,已经习惯于默认选择客户端/服务器模型,几乎很少会想到 P2P 模型,哪怕是一闪而过的念头,尤其是对于业务应用程序更是如此。我们为什么都关注于客户端/服务器模型,其主要原因很简单:P2P 应用程序的开发过程一惯都成本高昂且耗时过长。
从传统意义来说,P2P 应用程序开发所面临的难题包括:需要开发用于消息交换的专用协议;必须查找并连接隐藏在“网络地址转换”(NAT) 或防火墙背后的某应用程序的实例;需要支持在广域网 (WAN) 中定位各应用程序所需的惯常基础结构。尽管上述难题可以克服,但已造成大量阻碍,这样就导致我们很多人都从未想过 P2P 应用程序所能提供的杰出的协作功能。
这些阻碍将随着 Windows Vista™ 和附带的 .NET Framework 3.0 版本的发布而明显改善。在将 Windows Vista 的增强功能与“对等名称解析协议”(PNRP)、People Near Me (PNM) 和 Windows® Communication Foundation 中引进的 PeerChannel 功能相结合的情况下,我们又向 P2P 应用程序跨进了一大步。我个人期望在发布 Windows Vista 之后,P2P 的舞台会更加绚丽多彩。
Windows Vista 中的 P2P 开发是一个极其广泛的主题,没有任何一篇文章可以将其阐述完整。因此,我不会去尝试完成这样一个不可能的任务,而是会介绍 Windows Vista 中一些不同的 P2P 技术,并为您对 P2P 开发工作提供背景资料。
除了假定您已基本了解 Windows 窗体之外,我还假设您已略微熟悉 Windows Communication Foundation 应用程序的编写。
P2P 基本原理:网格网络
在深入探讨具体的 P2P 技术之前,研究 P2P 应用程序的一些基本原理很重要。对初学者而言,P2P 应用程序是一个与该应用程序的其他实例直接相连的应用程序。在 P2P 语言中,该应用程序的每个实例都叫做一个节点。通常将这些节点连接和命名后的组合称为网格。因此,推动 P2P 应用程序开发的技术经常被称作网格技术。PNRP、PeerChannel(在 Windows Communication Foundation 中)和 PNM 都是 Windows Vista 中网格技术的例子。
网格技术 所有 Windows Vista 网格技术所生成的网格在拓扑结构上都大致相同。通常来讲,网格拓扑是网格中各节点间连接模式的抽象体现。为了解释清楚,请在脑海中设想一个网格。我敢断定,您所设想的网格在某种程度上与图 1 中所示的网格相似。

图 1 全连接网格
图 1 所示网格中四个节点中的每个节点都与网格中的其他所有节点相连。换言之,如果网格中有 N 个节点,则每个节点都保持 N-1 个连接。我们将达到此标准的网格视为全连接网格。全连接网格很少被用作适合的方法;要了解原因,让我们注意一下各节点间的连接。

