|
使用 Java 语言编写一个最基本的 P2P 应用是非常容易的,这里笔者给出一个简单的例子,以供读者参考。给出这个例子的另一目的则在于表明,在网络中传送文件和消息是很方便的。然而若要为 P2P 应用建立一个鲁棒性很好的平台则很困难。这个 P2P 例子中缺少了许多应有的重要特性。其中,例如安全性等特性也是当今许多流行的 P2P 应用所缺乏的。另外一些特性(例如消息路由和分布查询等)则在某些应用中得到了实现,例如 Gnutella 就能够支持简单的消息路由以及分布查询。
图 1 中显示了一个典型 P2P 应用的系统框图。为了支持文件共享,这个 P2P 系统只负责与抽象的资源进行交互,而具体资源则从 Resource 接口中获得。这些具体资源可以是任何可定位的信息,包括文件系统、数据库、词典或是一个电话本。
图 1. P2P 应用的主体设计框图

MessageServer 类是这个 P2P 应用的核心。它能够与其他的对等网络获得联系,并将消息转发到合适的地方。
该类的具体代码在文件 p2p.jar 中(可以在 资料 部分下载此文件)。读者可以试着在命令行环境下,输入 java -jar p2p.jar,就能够运行这个简单的 P2P 应用程序。
这个程序会从它所在的目录中寻找名为 p2p.properties 的属性文件。在属性文件中可以定义要下载的资源以及它所知道的同位体信息。您所下载的 jar 文件中还含有一个属性文件的样本,可以对它进一步修改。
如图 2 所示,用户可以通过简单的命令行界面与该 P2P 程序交互。如果已选择了某个 peer 或是正在访问某些远程资源,则该程序会将相关的信息显示出来。
图 2. 程序的初始运行界面

任何时候,用户只要在提示符后面输入一个问号(?),屏幕上就会显示出一系列选项(如图 3 所示)。如果用户还没有选择 peer,输入问号时,就会显示出该程序的所有已知的 peer;否则则显示已选定 peer 能够访问到的资源。只要在提示符后面输入某个 peer 或资源的名字,就能够选定它们。
图 3. 显示 peer 和资源列表

在图 3 中,用户选择了名为 "guppy" 的 peer,然后显示 guppy 能够获得的资源。在选定 peer 和资源之后,用户就能够访问并控制该资源(如图 4)。如果选定的是一个文件系统资源,那么对该资源对象的访问就意味着从远程 peer 将该对象拷贝到本地 peer 中。
图 4. 列出可控制的资源对象
上一篇:网络新潮文化:Wiki不完全手册
下一篇:常见硬件术语手册
|