免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1677 | 回复: 0
打印 上一主题 下一主题

使用JXTA实现P2P通信 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-16 20:59 |只看该作者 |倒序浏览

使用JXTA实现P2P通信
摘要:Peer-to-Peer(P2P)网络被喻为第三代网络,采用的是点对点分散式网络架,它不需要服务器的中转,使用户与用户之间的连接更加方便、直接。JXTA是 Sun 公司为了构建跨平台、跨操作系统和跨编程语言的 P2P 应用而设计的网络开发平台,它定义了一组P2P底层通信协议,使简单、方便地构造P2P应用成为可能。本文介绍了如何使用JXTA实现P2P通信的方法。
关键词:P2P、JXTA、消息、通信
中图分类号:TP3
Achieve P2P Communication via JXTA
LI Han-Cao, ZHANG HONG, XU Yong-Jin
(Automation Department of Shanghai University, Yanchang Road 149 Box 284, 200072 )
Abstract: Peer-to-Peer (P2P), which is considered as the third generation of network, uses point-to-point network construction. Since it does not need the transfer of servers, it makes the communication between PC and PC easy and efficient. In order to achieve the P2P application across the platform, operation system, and program language, Sun Inc. designs JXTA project, which defines the basic P2P communication protocols. In this paper we introduced how to use JXTA to implement P2P communication.
Keywords:P2P, JXTA, Message, Communication
1.         P2P网络构架的由来
当今的网络构架,在大多数情况下,采用一种客户机/服务器(Client / Server,简称:C / S)的网络构架。它的主要特点是:需要有一个中央服务器来处理绝大部分的运算工作。客户端和服务端处在完全不同的角色,通常是客户端发送一个请求,处于支配的地位服务端获取这个请求进行计算,然后返回一个结果来响应这个请求。这类网络应用模型有一个明显的缺点:随着客户数目的增多,服务器端所需要占用的资源也随之增加,最终制约了客户端数目的增长。另外我们需要许多隐藏在Internet深处的服务的支持才能获取我们需要的服务,如DNS,路由。这也就是为什么即便每台机器都开设一个web server,也无法被全部被访问到。
P2P网络与C / S网络不同,在P2P网络中所有的设备都是平等的,彼此可以直接通信。这样P2P引导网络计算模式从集中式向分布式偏移,也就是说网络应用的核心从中央服务器向网络边缘的终端设备扩散,所有网络节点上的设备都可以建立P2P对话。
那么什么是P2P网络呢?P2P即Peer-to-Peer,称为对等连接或对等网络,是一种点对点计算模式。Brendon J. Wilson(JXTA一书的作者)曾经给P2P下过这样的一个定义:P2P使得任何网络设备可以为其他网络设备提供服务。简单地说就是:网络中的所有节点拥有平等的角色、行为、责任、义务,任意一个节点既可以做服务端,也可以做客户端。它的拓扑结构如图一所示


图一 P2P网络拓扑结构。
P2P给互联网的分布、共享精神带来了无限的遐想,从目前的应用来看,P2P的应用前景主要体现在:对等计算、协同工作、搜索引擎、文件交换。但是许多具有P2P结构的应用都存在一个问题,它们针对各自的应用对象使用不同的协议,而且这些协议在功能上又存在或多或少的重复。如:ICQ在实现及时消息传送的同时,又可以做简单的文件交换;而Napster(一种网上交换mp3的工具)在实现文件交换的同时,可以进行简单的及时消息的传送。显然这样不利于P2P网络的发展,开发者们迫切的需要一个与语言无关、有统一规范、具有良好鲁棒性的开发平台。JXTA正是在这种情况下出现的,它为P2P提供了一个简单、通用的平台。

2.         什么是JXTA
首先,JXTA是Sun公司为了构建P2P网络而制定的一组协议。JXTA并不是四个字母的缩写,它源于juxtapose,意思是可以平行放置的两个邻近实体。Sun公司选用它的目的是为了说明P2P网络并不是要取代C/S结构的网络,而是要与C/S相辅相成,互为补充发展。
其次,JXTA是P2P应用程序开发的运行平台。JXTA在设计时有如下几个目标:
l         操作系统无关
l         语言无关
l         为P2P应用提供服务和基础
JXTA的层次结构见图二。
图二 JXTA层次结构(该图摘自Jxta.org)。
l         核心层(JXTA Cores):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer通信、Peer监视和相关的安全原语。
l         服务层(JXTA Services):这一层包括对于P2P网络不是必需的、但很通用的功能。如查找、共享、索引、代码缓存和内容缓存的机制。
l         应用层(JXTA Applications):这一层包括了应用JXTA服务开发出来的完整的P2P应用程序。
JXTA中XML是大多数协议的基础。使用XML格式来创建协议是很好的选择;因为如果使用二进制格式会很难理解,而且解析起来很费力气,使用XML格式,很多解析器可以使用。
1)      JXTA中几个基本概念
l         对等机(Peer):虚拟通信点。Peer可以使用网络提供的基本服务,如rendezvous(集合点服务),router(路由服务),gateway(网关服务)等。
l         对等组(Peer Group):对等组是一种组织Peer并且发布组内的特定服务的方式。对等组可以创建、加入和退出。还可以对Peer成员进行一些限制。
l         端点(Endpoint):一个端点就是Peer的地址。端点不一定要是物理地址,它可以允许物理地址发生变化,如端点可以是一个IP地址加上一个端口。
l         管道(Pipe):Peer之间的虚拟通道。因为防火墙和其他障碍的存在,许多Peer并不能直接连接。这时,管道更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer对通信提供中继支持。
l         广告(Advertisement):一个广告就是一个XML文档,用来描述JXTA的消息、Peer、对等组或者服务等。
l         结合点(Rendezvous Peer):这是一种特殊的Peer,能够处理来自其他Peer的请求,可以方便在本地网络之外搜索广告。集合点通常拥有更多资源,并且可以存储大量的有关它周围Peer的信息。
2)        JXTA的安装与配置
JXTA是一个开放源代码的项目,可以从
http://www.jxta.org
上免费下载。具体的安装方法请参见shell / Jxta_Readme.html。第一次运行时,会出现一个图形界面的JXTA配置窗口,用于配置JXTA平台的网络环境,包括Peer的信息、TCP/IP和HTTP的配置、Rendezvous和Relay Peer,以及安全信息。

3.         基于JXTA的企业内部网模型构建
为了实现企业内部网的信息交互,现在许多企业需要依赖一些IM(Instant Messenger)软件工具。但是这些软件并不完全能满足企业的要求。比如MSN、AOL无法穿过企业的防火墙进行信息传输,而且它们的安全性能不是特别好。另外企业也希望这类软件能够开放源代码,这样可以设计符合自身的要求。因为JXTA本身是源代码开放的,另外JxtaUnicastSecure Pipe 使用传输安全层协议(TLS)来对通信管道提供安全保障,所以可以利用JXTA设计企业内部网络模型。
基于JXTA的企业网拓扑结构如图三所示。
图三 基于JXTA的企业网拓扑结构。
Pipe是Peer之间主要的通信机制之一。JXTA的Pipe是单向、异步的,类型包括:JxtaUnicast,JxtaUnicastSecure,JxtaPropagate。其中JxtaUnicast,JxtaUnicastSecure是一对一或多对一的管道,而JxtaPropagate是多对多的管道。JXTA提供了Pipe的API,主要有两个包组成:net.jxta.pipe以及net.jxta.impl.pipe。
Pipe通信过程的基本通信过程如图四所示:
图四 Pipe的基本通信过程。
l         接收方的Peer需要具备一个Pipe Advertisement,然后根据这个Pipe Advertisement创建一个Input Pipe,然后等待Messenger的到达。
l         发送方的Peer使用相同的Pipe Advertisement,并根据这个Pipe Advertisement创建一个Output Pipe以发送数据。要创建Output Pipe,它要先发送一个Pipe Binding Query Message给所有它所知道的Peers。
l         接收方收到这个Pipe Binding Query Message,看看自己缓存的Pipes中有没有匹配的Pipe ID。如果有,它就回复一个Pipe Binding Answer Message(包含了自己的Peer Advertisement)给对方。
l         发送方接收到Pipe Binding Answer Message后,将Peer Advertisement从中抽取出来。然后使用Peer Advertisement中的Endpoint信息来创建Output Pipe,这样发送方才可以发送数据。
由于在整个开发过程中有大量类似的Pipe的通信连接过程,我们将所有基本的过程放在一个P2PSocket的模块里。利用P2PSocket这个模块,可以开发一些P2P应用程序,如即时消息程序。用户通过P2PSocket建立连接之后,创建传输的消息,随后利用Output Pipe传输消息,在相应的Input Pipe的监听器将捕获这个事件,获得传输过来的消息,最终显示消息。
程序的流程如图五所示。
图五 P2PChat 流程图。
l         public void pipeMsgEvent ( PipeMsgEvent event ) :实现接口PipeMsgListener,每当有消息传送到输入管道的时候,事件将被捕获。
Public void pipeMsgEvent( PipeMsgEvent event){
    Message mi = event.getMessage( );   //得到消息。
    //从消息中根据Key—Value的形式抽取相关内容。
    //message:接收到的消息的具体内容 ;temp:发送消息方的用户名。
    MessageElement message = mi.getMessageElement(BaseMessage.CHAT);
    MessageElement temp = mi.getMessageElement(BaseMessage.IP);
}
l         public void toScreen ( String s ) :显示发出、接收到的字符
l         public boolean Send( Message msg ) :传送消息。消息本身是按照键值名(Key)和值(Value)的形式实现的。此方法封装在P2PSocket中。
public boolean Send( Message msg ){
    OutputPipe op = getOutputPipe( ) ; //输出管道,用于发送消息。
    ………
    op.send (mess) ;
}
运行结果如图六所示。
图六 P2PChat运行效果。
虽然使用Socket或其他网络编程方法同样可以实现这样的程序,但是采用基于JXTA的方法,使得我们不必考虑太多底层的东西,大大提高了P2P编程的效率。

结束语
JXTA为P2P上层应用程序的开发提供了一个统一、通用、便利的平台,使得P2P通信模式可以更广泛的为人们所利用。现在越来越多的企业将自己的公司设在不同的地方,这样就为各个子公司的局域网之间的信息交流提出了挑战。通过P2P可以加快企业公文传输的效率,准确性和安全性。同时降低相关操作的成本。增进员工之间的交流,特别是异地员工之间的交流,更加有效地利用企业内部的资源。

参考资料:
[1.]    Brendon J Wilson. JXTA. Indiana: New Rides Press, 2002。
[2.]    Sing Li. Making P2P interoperable: The JXTA command shell. Birmingham: Wrox Press, 2001。
[3.]    Project JXTA: Java Programmer’s Guide. CA: Sun Microsystems Inc, 2001。
[4.]    陈姝等。P2P技术的研究与应用。计算机工程与应用,2002 (13)。
[5.]   
http://www.jxta.org
maker:李含草 张宏 徐永晋

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12765/showart_141378.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP