vistawcf:利用Vista和WCF中强大P2P通信功能

  在我们多数人考虑点对点 (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 所示网格中 4个节点中每个节点都和网格中其他所有节点相连换言的如果网格中有 N 个节点则每个节点都保持 N-1 个连接我们将达到此标准网格视为全连接网格全连接网格很少被用作适合思路方法;要了解原因让我们注意下各节点间连接

  网格中节点基本上都使用现有常用传输方式进行通信和所有现代操作系统Windows Vista 利用 TCP/IP 和 UDP 进行网络通信如果 TCP/IP 是全连接网格所选传输方式那么由 N 个节点组成全连接网格中每个节点都必须创建或接收 N-1 个套接字随着 N 值增加此模型显然变得不可行例如如果假定个 N=1000 情况那么每个节点都将需要保持 999 个套接字这简直就行不通

  要解决可伸缩性和 WAN 连接性问题您必须诉诸于部分连接网格如图 2 中所示顾名思义部分连接网格中节点只和网格中其他少量节点相连就 P2P 来说这些相邻节点被称作邻居通常来说部分连接网格对每个节点资源需求更少从而大幅提高了网格可伸缩性从理论上讲部分连接网格规模可以扩大到包括全球所有计算机上所有应用


  部分连接网格

  图 2 部分连接网格

  加入网格 节点加入网格方式取决于所使用网格技术但通常来讲预期节点必须用网格名来解析网格中已有个或多个节点物理地址如果您假设个部分连接网格,网格名解析结果就是网格中可用物理地址个子集在接收到网格中个或多个物理节点物理地址后预期节点必须立即连接到这些地址中个、部分或全部地址连接到网格的后新添加节点必须立即让自己准备好响应来自其他预期节点后续网格名解析请求

  网格名解析是个复杂主题这种复杂性在很大程度上是在许多情况下网格名解析要依赖于个或更多其他网格为清楚介绍说明问题请想下美国邮政局使用网格再具体点说假定我需要向我朋友 Rusty 邮寄个包裹要邮寄这个包裹我可能需要去个邮局如果我不知道距离我最近邮局地点我会到 Internet 上查找最近邮局地址从抽象意义上说要“连接”到美国邮政局网格需要我先访问所有网格中最大网格(即 Internet)才能解析最近节点地址换言的您可以使用个网格去解析包含在另个网格中地址我将在本文 PNRP 部分详细讨论这个概念

  和其他节点通信 旦节点连接到某网格它就可以通过以下两种方式的和其他节点进行通信:网格扩散(也称多方消息传送)或定向消息传送顾名思义网格扩散是试图将消息发送到网格中所有节点般而言网格中某节点可通过将消息发送到它所有邻居而将消息传播到其他所有节点在接收到消息后发送节点邻居负责将该消息转发给它邻居以此类推相比的下定向消息传送指是试图将消息直接发送到网格中某特定节点在部分连接网格中发送节点可能未和目标接收节点相连如果真是这样发送节点必须将消息发送给它个或多个邻居其中某个邻居可能会和目标接收节点相连如果是这样该邻居就会将消息转发给目标接收节点如果不是这样则该邻居会推测它哪个邻居自身可能会和目标接收节点相连

  网格很少处于静态在多数 P2P 应用节点可能会频繁加入和离开网格可能是由于网络连接变动引起也可能是由于在使用即时消息传送应用用户启动和终止应用引起除了网格中自然变动的外多数网格技术都具备些维护自身机制通常而言网格维护目标就是修复或调整网格以使其更高效或更稳健地运行要注意到每个网格技术实现网格维护方式都区别点很重要


最新评论

发表评论