您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于JXTA的P2P局域网即时通信应用的设计
局域网即时通信应用的设计陈睿,陈磊**作者简介:陈睿,(1987-),男,在读硕士,主要研究方向:数字电视。通信联系人:陈磊,(1967-),男,博士,副教授,主要研究方向:数字电视、图像通信领域.E-mail:leichen@bupt.edu.cn(北京邮电大学信息与通信工程学院,北京100876)5摘要:点对点网络(peer-to-peer,简称P2P)是一种分布式的应用结构,它能够将任务或者工作量分散到各个对等点上,这个特点让其在这个飞速发展的网络中变得十分流行。而JXTA作为SUN推出的P2P平台,由于其功能强大几乎是Java程序员在开发P2P应用时的唯一选择。本文对一个局域网即时通信应用进行了需求分析,展示了部分交互机制。同时指出了JXTA库设计上的问题,并给出了部分的关键代码。10关键词:计算机应用技术;P2P;JXTA;即时通信中图分类号:TP311.1DesignofaJXTA-basedPeer-to-PeerIMapplicationwithinLAN15CHENRui,CHENLei(SchoolofInformationandCommunicationEngineering,BeijingUniversityofPostsandTelecommunications,Beijing100876)Abstract:ThatPeer-to-peer(P2P)networkingisadistributedapplicationarchitecturethatpartitionstasksorworkloadsbetweenpeers,makesitmoreandmorepopularintherapid20developpingInternet.AsaP2PplatformpublishedbySUN,JXTAisalmosttheonlychoicewhendevelopingP2PapplicationsonJavaduetoitsstrongfeatures.Inthispaper,needsanalysisoftheapplicationisdonewhensomeinteractionmechanismisalsoshowed.Meanwhile,someissuesfromJXTAareindicated,alongwithsomekeycode.Keywords:ComputerApplication;P2P;JXTA;InstantMessaging250引言互联网发展初期,网络上的服务完全依靠大型服务器强大的处理能力和网络带宽提供。然而互联网的魅力在于能把思维中的想法和创新快速的转化为现实,其发展速度是计算机硬件完全无法比拟的,因此服务器的性能严重制约互联网的发展。正是在这样的背景下,P2P30应运而生[1]。互联网的主要目的是对信息进行快速的收集和分发,因此即时通信软件作为人们在网络上互相通信交流的主要形式一直都是互联网应用的核心。因此在这方面的开发一直层出不穷,而且在即时通信软件上掌握的用户群甚至比操作系统更为忠诚。JXTA作为SUN推出的P2P开发平台在Java领域有着巨大的优势,它很好的将底层的35通信连接抽象为通信管道(Pipe)的形式,让开发者集中于上层结构的设计。1JXTA介绍JXTA是Sun微系统对等网络的标准,这是一个努力的方向,以它来促进和探究分布式计算的新方法。“JXTA”这个名字既用来指代这个标准,也用来指代研究出来的技术,这种技术处于传输平台和P2P通信协议的环绕之中。其开发组织被取名为单词“juxtapose(并置)”40中国科技论文在线的简易形式[2]。1.1JXTA结构JXTA的体系结构分为三层,如图1所示:•JXTA核心JXTA核心包括最小以及最重要的对于P2P网络很常见的要素。它包括建立允许P2P应45用的核心机制(节点发现)、通信传输(包括防火墙和NAT穿越)、对等点和对等点组的建立以及相关的安全要素。•服务层服务层包含一些对于P2P网络操作不是绝对必要但是很常见并且应当具有的网络服务。这些服务例如查找、排序、指向、存储系统、文件共享、分布式文件系统、资源整合和出租、50协议转化、认证以及PKI(PublicKeyInfrastructure,即公共密钥基础)服务。•应用层应用层包括整合程序的实现,例如P2P即时通信、文件资源共享、娱乐内容管理和传递、P2P电邮系统、分布式拍卖系统以及其它很多[3]。55图1JXTA结构图Fig.1StructureofJXTA2需求分析本软件要求实现局域网内的即时通信功能,具体的内容有节点的发现、对等点之间的一60对一通信、对等点到对等点组的一对多通信、对等点之间的文件传输和视音频传输,并且需要具有良好的扩展性。3网络模型设计JXTA非常适合用于即时通信应用,因为平台本身基于P2P技术设计,避免了大量信息通过中心节点造成过度负载,从而引起系统变慢和崩溃的情况发生。由于程序基于Java65Applet开发,所有节点均通过中心服务器获取程序,这里采用P2SP的非完全集中式的网络结构,所有节点均与服务器相连,所有的上下线信息均通过服务器同步和分发,而节点获得组内其他节点的在线状态后可以不通过服务器与节点直接相连,这样既有P2P的负载分散特性又有C/S结构的能够集中式同步节点状态的优点[4][5]。通过对程序进行分层设计可以使程序的模块分工明确,减少模块之间的功能耦合度,降低程序的复杂度,并且有利于日后对程序进行模块添加[6]。程序的分层定义如下:75z网络层最底层,这里是物理的以太网,用来维持节点之间通信的基础。z中间层由JXTA提供的对等点发现协议、端点路由协议以及管道和Socket等组成,用来封装底层网络和为上层的应用层提供接口。80z应用层通过调用JXTA的节点发现、消息传送等功能来实现文本传送、文件传输以及视频音频通信等具体通信方式。4模块设计本程序从功能上分为三大模块:用户界面(GUI)模块、通信模块、资源模块。其中资源85模块生成和存储这个应用所需要的所有资源,包括:用户的各种管道广告信息、用户信息、本机网络资源以及国际化资源。三个模块相互协作构成本软件的基本框架,如图3所示:程序开始时通过入口函数传入用户名、语言等信息,并完成网络模块和用户界面模块的初始化。下面介绍用户界面模块和通信模块的设计。4.1用户界面模块用户界面是软件和用户之间交互的最主要方式,属于之前设计的三层结构中的应用层。95本软件作为网页版网管系统的子系统,使用Javaapplet实现。因此不能像桌面应用拥有丰富的操作空间和层次结构,设计的原则是简单明了,并且由于是嵌在网页中的程序,对其可靠性的要求更高,否则容易导致一系列的崩溃。本程序是一个与QQ、MSN类似的聊天工具,不同点在于其部署环境为网页,因此界面上应该尽量简洁,减少弹出窗口的使用。其总体结构如图4所示。100这里使用了Swing进行界面开发,Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。通信模块通信模块是程序能够与外界相交互的最重要的组成部分。本程序的通信机制是基于110JXTA协议开发的,由于JXTA的节点发现机制Discovery从运行到发现新节点所需时间过长,非常不适合用于局域网,因此决定重新制定新的节点发现机制。JXTA用于通信的组件包括Pipe和Socket,具体的使用情况如下:1)JxtaBiDiPipe,用于节点之间的文字通信,以及信令传输。2)JxtaSocket,用于节点之间的字节流传输,这里用于文件传输。1153)JxtaPropagatedPipe,广播型的文本通信,用于对等点组内的通信使用。4.2.1发现机制的设计JXTA提供了对等点发现协议(PeerDiscoveryProtocol),对等点使用这个协议来通告它们的资源,同时也用来发现被其它对等点发布出来的JXTA资源。在网络中,它通过两种方式来完成发现工作:在本地网络上发送多播信息;如果本地没120有想要的节点就会使用集合点(RendezvouzPeer)之间的通信来发现外网的对等点。采用了多播的方式进行查找,在网络规模较大时容易产生网络风暴或者泛洪,并且由于所有的地址信息都要通过哈希函数转化,物理上相近的节点转化后可能在遍历顺序上相距甚远,导致发现效率的降低。在实际使用时发现,使用JXTA的发现协议有时会需要10秒甚至更多的时间来发现已上线的节点,使用效果不佳,因此在程序中选择自己设计更简单更适合局域网使用的发现机130制来完成节点上下线的信息发布工作。图6上线发现交互Fig.6interactionofon-linediscovery135中国科技论文在线在自己设计的发现流程中,服务器起到很重要作用,对等点组内的所有节点的在线状态信息和用户信息全部储存在这里,节点和服务器通过建立JxtaBidiPipe进行通信,避免了因为多播产生泛洪的风险。一个节点首先要通过已知的服务器的广告来与之建立BidiPipe,传送上线信息后服务器更新在线列表并将上线信息分发给组内其他的节点,其他节点根据获得的信息与之建立连接140就可以进行通信了。图7初始化流程Fig.7processofinitiation1454.2.2管道信息定义在程序中JxtaSocket通过Socket实现文件传输功能,管道则负责文本信息和控制信号的传输。JXTA提供了单向、双向和广播管道对单工、双工和多播的字符串信息传播模式进行了底层支持。但是仅有信息传播的管道是无法完成通信的,需要对信息进行规范定义,双方发150送合法的信息方能实现通信。JXTA的管道内传播单元为Message,Message由名字空间和消息实体组成,其中消息实体可以为字符串或者另一个Message。在程序中的Message定义如下:通过对消息格式对统一定义可以方便地进行信息分拣、消息发送接收和分发,并且有利于消息类型的扩充和管道资源的集中管理。4.2.3修改JXTA库160另外,在开发的过程中发现JXTA中存在相同节点在下线后再次上线会出现超时的问题,因此对JXTA包进行了修改。EndpointRouter负责记录链接上的JXTA节点的路由信息,然而当一个节点第二次上线时,由于其BidiPipe的端口是随机选择的,因此第二次的端口信息和第一次相同的可能性很小,而之前保存的路由信息会导致无法连接,就无法完成点对点的通信。165这里将EndpointRouter的类文件进行反编译,在其中添加如下代码:if(addr==null){returnfalse;}Desti
本文标题:基于JXTA的P2P局域网即时通信应用的设计
链接地址:https://www.777doc.com/doc-315321 .html