应用程序框架:P2P 应用程序框架

理解 P2P 计算技术方面最好思路方法是仔细观察个实际 P2P 应用这个月Todd Sundsted 将带您体验这样个应用他描述了如何安装、配置这个应用以及它是如何工作

在 P2P 计算领域方面我们只写了篇文章现在已经是转变时候了根据 "The practice of peer-to-peer computing: Introduction and history(对等计算实战:介绍和历史)"读者反馈意见我认识到:读者对于使用和理解 P2P 应用兴趣远比我预想最初我只把这个应用看成是这样种方便资源可以从中提取举例以阐明文章中所陈述观点结果表明某些读者希望得到更详细信息因此我将在这个月提供这方面信息

这个月我将不在高层次领域(高达 1000 英尺)继续讨论也不解决安全性问题相反我将在低层次领域(50 英尺)讨论应用框架

我真诚地希望这个转变将比现实生活中经常遇到转变更令人愉快

安装和执行
让我们从安装具体细节开始我略微更改了启动 P2P 应用过程在上个月些读者在启动应用时遇到了问题

在可以运行 P2P 应用的前必须下载两个 jar 文件 -- p2p.jar 和 spp.jar -- 以及配置文件 app.properties(请参阅参考资料)p2p.jar 文件包含 P2P 应用自身类文件spp.jar 文件包含 P2P 应用所使用消息传递库类文件

下载这些文件的后将这两个 jar 文件和包含配置文件目录添加到类路径中

如果您正在运行 Windows并且已经将这两个 jar 文件和配置文件下载到 c:\p2p 目录则可以如下设置类路径:

CLASSPATH=c:\p2p\p2p.jar;c:\p2p\spp.jar;c:\p2p
如果您正在运行 Linux、Solaris 或某个合适 UNIX 变体并且已经将这两个 jar 文件和配置文件下载到 /home/foo/p2p 目录可如下设置类路径:

export CLASSPATH=/home/foo/p2p/p2p.jar:/home/foo/p2p/spp.jar:/home/foo/p2p

(以上命令假设您正在运行 BASH 来作为命令 shell)我将如何在其它流行 shell(如 CSH)中设置环境变量问题留给您自己去考虑

旦设置了类路径就可以用以下命令启动应用:

java com.etcee.app.ki.Main

P2P 应用将显示个别致信息性标志和个命令提示来欢迎您

最后再说遍:我 P2P 应用定需要 Java 2 平台

配置文件
前几步将启动并运行 P2P 应用但是在能够很好地使用它的前必须编辑配置文件配置文件定义 P2P 应用使用端口、控制资源以及识别伙伴清单 1 演示了每个定义

清单 1. 举例配置文件

com.etcee.app.ki.port=7777
  com.etcee.app.ki.resource.0.name=share
  com.etcee.app.ki.resource.0..etcee.app.ki.resource.file.FileResource
  com.etcee.app.ki.resource.0.arg0=/home/foo/share
  com.etcee.app.ki.resource.1.name=tmp
  com.etcee.app.ki.resource.1..etcee.app.ki.resource.file.FileResource
  com.etcee.app.ki.resource.1.arg0=/tmp
  com.etcee.app.ki.peer.0=bass:7777
  com.etcee.app.ki.peer.1=salmon:7777
  com.etcee.app.ki.peer.2=perch:7777
  com.etcee.app.ki.peer.3=guppy:7777

部分由行组成它定义了 P2P 应用用来接收其它伙伴连接请求端口最好不要改变这行

第 2部分定义 P2P 应用管理资源您可能需要编辑这部分清单 1 定义了两个资源:share 和 tmp从应用观点来看资源只是实现 Resource 接口例子我们将马上讲到这点资源定义般具有以下基本形式:

清单 2. 资源定义

com.etcee.app.ki.resource.0.name=<name>
  com.etcee.app.ki.resource.0.=<implementation >
  com.etcee.app.ki.resource.0.arg0=<initialization argument>
  com.etcee.app.ki.resource.0.arg1=<initialization argument>
    .
    .






name 是给予资源名称它用来生成人们可读输出 是 Java 类名称可以将其化以创建资源P2P 应用在运行期间动态装入这个类并将其在其化期间argN 自变量被传递到新资源例如FileResource 类使用这些自变量定义目录来为文件提供服务您需要编辑目录自变量以指向您机器上某个目录

第 3部分定义 P2P 应用识别伙伴行都包含伙伴名称(或 IP 地址)和伙伴端口用这种方式定义伙伴显然不是可伸缩解决方案在以后文章中我们将看种更好解决方案

代码
除了对等通信采用 SPP(简单点到点)包的外P2P 应用不包含很多类首先我们先仔细查看最重要最后再看下 SPP 通信包

资源
P2P 应用主要组件是资源事实上P2P 应用只是允许和控制对已发布资源远程访问资源可以是任何可寻址事物 -- 文件系统、电话簿、数据库和目录每个资源都管理零个或多个适当类型项(文件系统资源管理文件电话簿资源管理电话号码)

为演示如何实现资源我创建了个简单文件系统资源类 FileResource如清单 3 所示这个文件系统资源管理零个或多个文件

清单 3. Resource 接口

public
  erface Resource
  {
    // The initialize method requires a TTDFactory instance
    // (which the factory uses to create the TTDItem instances
    // it s from the select method in response to a
    // query) and a String .gif' /> (which contains the arguments
    // from the configuration file).
    public
    void
    initialize(TTDFactory ttdfactory, String ar)
    throws ResourceException;
    // The select method requires a String instance that
    // s the selection criteria.  It s an .gif' />
    // of TTDItems, _disibledevent=0 >

消息中帧都有个类型(由 MIME 类型指明)和个主体帧中头是可选它用来描述主体中数据

构成完整而正确消息序列中帧类型取决于应用般来讲条消息由个控制帧和其后零个或多个数据帧组成数据帧包含控制帧所引用数据我们 P2P 应用就采用这种模式

消息出现在请求/响应对中个伙伴向另个伙伴发送请求那个伙伴再将响应发回给第个伙伴

请求消息中控制帧是命令帧它包含命令和为该命令提供所有参数如果有任何其它帧存在则这些帧包含命令帧所需信息

响应消息中控制帧是状态帧它包含状态(正确或)如果有任何其它帧存在则这些帧包含状态帧所引用信息如果向文件系统资源发出请求则该信息将包含所选文件内容

多帧消息模式优点在于:它允许在通信应用的间交换内容丰富消息SPP 在很多方面都类似于 BXXP(请参阅参考资料)

结束语
完全理解了框架的后我们就可以在下个月继续讨论 P2P 安全性了我们还将在 P2P 应用中集成安全性支持
Tags:  p2p的应用 p2p应用 应用程序框架设计 应用程序框架

延伸阅读

最新评论

发表评论