- 5
- 0
- 约5.1千字
- 约 6页
- 2017-08-31 发布于重庆
- 举报
JXTAP2P编程技术例程一
JXTA P2P编程技术例程(1)
作者:yxiong2000 | 日期:2004-07-30 | 字体:大 中 小
在这个例子中,我们会设计和编写一个分布式JXTA应用,可以解决并行计算问题。我们将用一个反复使用的形式建立这个应用,在每步中扩大它的能力和 使用到的API集。这些原代码只能覆盖最重要的部分,需要全部代码可以到网站上查询
一些大型计算问题的子集可以用并行的方法解决。一个工作的并行执行意味着你可以将一个问题分解为几个小的子问题, 这些子问题又可以被同时的被执行。当一个子问题结束后,它将返回自己的结果到主程序,主程序将这些返回的小结果组合为更大的答案。
举个例子,考虑将任何2个整数间的质数列出来的工作。质数就是那些只能被它自己和1整除的自然数。 那些可以被1和其他比自己小的数整除的叫合数。因此,最简单的方法产生一个质数列表就是在自然数列表中消除所有的合数,剩余的就是质数了。
这个方法反复消除一系列自然数中的合数。它将列表中的每个数都用2到它的平方根去除。如果任何一个数被这样除了之后没有余数,那么这个数就是合数,并且对它作上标记。 当这些反复(工作)结束了之后,所有的被标记的数将被消除,剩下的就是质数了。
但是如果是一个很长的列表,有数百万的长度,那么我们将它分为几个小一点的列表,然后对每个列表执行上述方法。每个子计算被分发到网络上不同的机器去执行,充分利用分布的计算资源。质数的查询是这些可以被并行分解的大型问题集中的一个,现在流行的P2P风格的软件有不少,比如SETI@HOME工程,它的目标是对来自外太空的信号解码,寻找外星智能生物,类似的工程还有让用户共享出他们空闲CPU的资源去模拟蛋白质的折叠或者解码DNA串。
在这个应用中,主程序将向用户请求2个数,然后产生一个在2数之间包含所以质数的数列。这个主程序将首先在JXTA网络上尝试找到提供质数查询服务的的其他peer,然后将列表的片段分发给它们去执行。当一个peer完成了它的那一部分,它将返回这个片段中质数的数组。
为了这样的分配能够进行,我们要让所有peer能够在网络上通告(advertise)它具备质数查询的能力以让其他的peer可以找到并连接它。
JXTA Application Design
可能这个应用最不平常的一个方面就是,每个peer既扮演主程序(master process)的角色和一个从属程序的角色(slave),也有可能一个从属程序还要决定是否进一步的分解这个问题到的子任务。这种服务模式/客户模式操作是P2P程序设计的实质。我们将它定义为SM/CM操作
消息定义
当我们设计一个JXTA程序的时候,我们必须忍受JXTA是一个基于消息的系统:2个peer中的主要协议(contract)主要是通过消息。这样,设计程序的第一个工作就是定义消息传递。在这个质数查询应用中,一个peer传递一条包含2个边界数的消息给另外一个peer,接受的一方计算在这2个边界数中的质数,返回到以前的peer
net.jxta.endpoint.Message 类 概括出一个消息的感念,它允许赋予任何一个消息集一个键(KEY)。我们将在下表中用键-值 来表示这个类的实例
Table 16.1. Request Message
Key Value
ServiceConstants.LOW_INT Lower boundary of the (sub)list
ServiceConstants.HIGH_INT Upper boundary of the (sub)list
Table 16.2. Response Message
Key Value
ServiceConstants.LOW_INT Lower boundary of the (sub)list
ServiceConstants.HIGH_INT Upper boundary of the (sub)list
ServiceConstants.PRIMELIST A string containing all primes between the bounds of the list. The primes are separated by ; characters.
服务的定义与发现
下一步,我们必须定义一个让主程序找到从属程序的方法,换句话说,我们比如让peer预先了解到提供这个服务的其他peer。
就象早先提及的那样,一个JXTA服务是用它的module类和specification定义的。因此, 我们将为这个质数查询服务module和specification定义一个通告. 然后让一个peer提供
原创力文档

文档评论(0)