基于JXTA的P2P即时通讯系统的设计与改进

http://www.paper.edu.cn

基于 JXTA 的 P2P 即时通讯系统的设计与改进
贲兴龙
河海大学,南京(210098)
E-mail: benxinglong@163.com

摘 要:课题研究用 JXTA 技术搭建了一个 P2P 即使通讯系统,由于 JXTA 原有的发现服务 实时性差,很难实时的反应用户在线状态,不能符合即时通信系统的要求,作者重新设计了 一个用户状态服务来解决该问题,改服务基于 JXTA 多播管道。经过试验测试,该用户状态 服务能够很好的解决该问题。 关键词:JXTA,对等网络,即时通讯

1 前言
即时通讯 (Instant Message)软件是目前互联网上使用最为广泛的软件之一。虽然目前 主流聊天软件如(MSN,QQ)为了解决传统 C/S 模式中服务器端压力过大问题,融入了 P2P 技 术, 但是还仅限于聊天信息和文件的传输部分, 用户登录和在线用户的查找部分还是需要依 赖集中式服务器。当用户数量很庞大时,必须要购买昂贵的服务器进行扩容,不仅增加了成 本,而且在对系统的可扩展性有很大影响[1]。本文旨在引入 JXTA[2][3][4]技术,来解决目前存 在的主要问题。 本文基于 JXTA,采用 JAVA SWT[5]技术,实现了一个简单的即时通讯系统。本系统不 依赖于中心服务器,能够发现在线用户,在用户之间传送聊天信息。并且增加了一个用户状 态服务[5],实时的跟踪用户状态,用来改进原来 JXTA 发现服务实时性差的不足,该服务可 以作为 JXTA 的标准服务,供其它基于 JXTA 的系统采用。

2 JXTA 简介
JXTA 是 Sun 公司向业界推出的较新技术。该技术的目的是为 P2P 的网络应用开发提 供一个统一的平台。JXTA 最早起源于 2000 年的夏天,现在大家把 JXTA 看成是 P2P 的平 台,JXTA 的目标是要解决几个技术与商业上的难题。第一是解决众多 P2P 系统互不相通的 问题。Sun 认为,只有互通才能真正发挥出 P2P 的优势。所以 Sun 决定出面发布一个平台, 使所有 P2P 系统都能连接起来,只有 Sun 这样位置中立、但在技术上有雄厚实力被大家认 可的公司才有希望做成这一平台。JXTA 的另外一个目的就是找寻一套数量最少、概念最简 单的系统构成的“积木”。如果成功,这几块积木就会是今后大家构架信息系统的基本模块, 从而帮助人们摆脱像 Windows 或 TCP/IP 这样的传统软件带来的包袱。 它是由一系列网络协 议构成的,用任何语言都可以实现,并不只限于 Java,只有彻底独立于操作系统、网络传输 技术以及程序设计语言,才真正达到了跨平台,而这样的技术,最容易受到业界的认同。

2.1 JXTA 层次结构
JXTA 层次结构如图 2.1 所示。

-1-

http://www.paper.edu.cn

图 2.1 JXTA 层次结构图

(1) 核心层(JXTA Cores):这一层封装了P2P网络所需要的最根本的东西,包括了构建 P2P程序的核心机制,如广告发现、通讯(包括穿越防火墙和NAT)、对等点和对灯组的创建 以及相关的安全原语。 (2) 服务层(JXTA Services):这一层包括对于P2P 网络不是必需的、但很通用的功能。 如查找、共享、索引、缓存机制、分布式文件系统等。 (3) 应用层(JXTA Applications):这一层包括了应用JXTA服务开发出来的完整的P2P应 用程序。

2.2 JXTA 中几个基本概念
(1)对等点(Peer):虚拟通信点。Peer 可以使用网络提供的基本服务,如rendezvous(集合 点服务)、router(路由服务)、gateway(网关服务)等。 (2)对等组(Peer Group):对等组是一种组织Peer并且发布组内的特定服务的方式。 对等组 可以创建、加入和退出。还可以对Peer成员进行一些限制。 (3)端点(Endpoint):一个端点就是Peer的地址。端点不一定要是物理地址,它可以允许 物理地址发生变化,如端点可以是一个IP地址加上一个端口。 (4)管道(Pipe):Peer之间的虚拟通道。 因为防火墙和其他障碍的存在, 许多Peer并不能直 接连接。这时,管道更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer 对通信提供中继支持。 (5)消息(Message):JXTA服务和应用通过JXTA Messages来通讯,消息是对等点间数据 交换的基本单元。 (6)广告(Advertisement):一个广告就是一个XML文档,用来描述JXTA的消息、Peer、对 等组或者服务等。 (7)集合点(Rendezvous Peer):这是一种特殊的Peer,能够处理来自其他Peer的请求,可 以方便在本地网络之外搜索广告。 集合点通常拥有更多资源, 并且可以存储大量的有关它周 围Peer的信息。 (8)IDS:对等点、对等组、管道和其它 JXTA 资源需要被唯一标识。JXTA ID 是一种标

-2-

http://www.paper.edu.cn

识 JXTA 资源和服务的标准方式[6]。

3.系统设计
3.1 总体介绍
本系统是一个类似 MSN 的即时通讯系统,实现了用户之间的聊天功能。系统不需要 中心服务器,能够完成对等点的发现和对等点间消息的传输。系统由 3 个主要模块组成:登 录模块、用户列表模块、通讯模块[7]。 登录模块主要完成初始化对等点,加入聊天对等组。初始化对等点包括对等点名字的 输入、PeerID 的生成、集合点的指定、JXTA 网络和对等点发现服务的启动;加入聊天对等 组包括聊天对等组的发现和加入。 用户列表模块主要完成发现和显示所有在聊天组内的在线用户, 该模块没有采用 JXTA 原有的对等点发现服务(Peer Discovery Protocol) ,而是自己设计了一个用户状态服务(User State Service)。因为 JXTA 的对等点发现服务是基于广告(Advertisement)的发现, 广告有一定 的时效,所以不能保证对等点发现的实时性,因此不适合用来设计实时聊天系统。而用户状 态服务基于 JXTA 多播管道,可以实时的将组内对等点的状态变化通知组内的所有对等点。 通讯模块主要完成对等点间的消息传递即聊天功能。该模块采用JXTA双向管道 (JxtaBiDiPipe),完成对等点间消息的传输。

3.2 系统实现
3.2.1 登录模块 登录模块界面如图 3.1 所示。

图 3.1 登录模块界面

用户输入用户名,点击登录后,系统主要按照以下顺序完成相应工作: (1)初始化该对等点基本信息,基本信息包括:①按照用户名,生成 PeerID;②指定 需要连接到的集合点。 (2)创建和启动 JXTA 默认的对等组 NetPeerGroup,启动 JXTA 的发现服务。如果需要 连接到到集合点,则启动集合点服务(RendezVousService),并等待连接到集合点。 (3)加入聊天对等组。加入过程如下:在本地寻找对等组广告,如果找不到,则自己 创建对等组广告,并发布这个广告。然后根据对等组广告创建对等组,并加入。

-3-

http://www.paper.edu.cn

3.2.2 用户列表模块 用户列表模块界面如图 3.2 所示。

图 3.2 用户列表界面

本模块没有采用 JXTA 本身的发现服务, 而是重新设计了一个用户状态服务(User State Service),用来实时的展现用户的在线状态,并用户界面上列出组内所有的在线用户。用户 状态服务采用 JXTA 多播管道,定时在聊天组内广播用户在线状态信息,以此来实时的判断 用户的在线状态。 User State Service 主 要 由 UserStateProtocol 、 MessageProcessor 、 MessageQueue 、 StateController 四部分组成。 (1) UserStateProtocol UserStateProtocol 主要规定了用户状态服务的相关协议, 包括用户在线状态、 消息类型、 协议封装数据字段以及创建用户状态消息的接口。 (2) MessageQueue MessageQueue 用来缓冲所有接收到的用户状态消息,并按先来先服务的策略,对每一 个消息进行处理。 (3) MessageProcessor MessageProcessor 专门用来处理 MessageQueue 中的消息。处理过程如下: ①判断消息类型,目前消息有 FIRST_ON_LINE、ON_LINE、OFF_LINE 三种,根据 需要可以增加其它的状态。 ②根据消息类型,进行相关处理。如果消息状态是 FIRST_ON_LINE,则该消息是用 户刚登陆时的组内广播消息, 给在线用户列表增加这个用户, 并保存接收到这条消息的时间 到用户 LastUpdate 时间字段,并且广播自己的状态消息,以便刚登陆的用户获取目前的在 线用户信息;如果消息状态是 ON_LINE,则该消息是用户状态维护信息,更新用户的 LastUpdate 时间字段为当前接收到消息的时间;如果消息状态是 OFF_LINE,则从在线用户 列表中,删除该用户。 ③刷新在线用户列表,将用户在线信息反映到用户界面上。 (4) StateController

-4-

http://www.paper.edu.cn

对于一些特殊状况,如用户突然掉线了,这个时候,组内其他用户就不会再接受到该 掉线用户的在线状态信息,但是该用户不应该出现在用户列表中,这个时候,就需要一种机 制来处理这种状况。StateController 用来定时发送用户状态消息和检测已经不在线的用户。 检测机制采用超时机制,每个用户都有一个 LastUpdate 字段,代表该用户最后发送状态更 新信息的时间。 StateController 每隔一段时间 (如 1 分钟) 便检测一次所有用户的 LastUpdate 时间,用来和当前时间进行比较,如果超过某个特定时间(如 2 分钟) ,就代表该用户已经 不在线了,需要从用户列表中删除。 按照这种超时机制,即使是有用户出现了突然状况,也可以在约定的时间内检测到, 这样就能比较实时的反应用户在线状态。 3.2.3 通讯模块 通讯模块界面如图 3.3 所示。

图 3.3 聊天界面

通讯模块采用 JXTA 双向管道来进行消息传输。 当用户登录之后,启动一个线程,在线程里创建 JxtaServerPipe,不停轮询,等待其他 用户发来的消息。当用户 A 想与用户 B 聊天时,只要建立一个到用户 B 的 JxtaBiDiPipe, 该 JxtaBiDiPipe 和用户 B 的 JxtaServerPipe 进行连接。 聊天消息是用 XML 进行封装的,不同的消息可以定义不同的命名空间,以便接收端 进行区别。 而且一条消息可以包含多部分信息, 比如区分消息的版本、 消息发送者名字等等。 接收端对接收到的消息进行解析处理,然后显示到聊天对话界面里。

4 总结
本文作者的创新点在于基于 JXTA 多播管道,创建了一个用户状态服务,用来实时的 跟踪用户的在线状态,以改进 JXTA 原有发现服务的不足。并在改进的基础上,创建了一个 P2P 即时通讯系统。该系统经过测试,局域网内能够很好的运行;在互联网环境下,指定合 适的聚集点,也可以运行,只是稳定性还有一定问题,需要进一步完善。

-5-

http://www.paper.edu.cn

参考文献
[1] 罗杰文: Peer to Peer (P2P)综述,中科院计算技术研究所 2005-11-3 [2] 许斌. Java P2P 网络编程技术[M] . 北京:清华大学出版社,2003. [3] Brendon J Wilson. JXTA. Indiana: New Rides Press, 2002 [4] Project JXTA:http://www.jxta.org [5] http://www.eclipse.org/swt/ [6] Project JXTA: JXTA v2.3.x: Java Programmer’s Guide. CA: Sun Microsystems Inc, 2001 [7] 符巍 郑雪峰:基于JXTA 的P2P即时通信系统设计《微计算机信息》2006年第22卷第8-2 期

The Design and Improvement of P2P Instant Message System Based on JXTA
Ben Xinglong
Hohai university,Nanjing(210098) Abstract The subject build an P2P Instant Message System using JXTA technology. Because of JXTA’s original discovery service lack of real time ability and it is hard to reflect the online state of user, author design a User State Service to fix up this problem. This User State Service is based on JXTA Propagate Pipes. After test by experiment, this User State Service can work well. Keywords: JXTA, P2P, IM

-6-


相关文档

JXTA框架下P2P即时通信系统的设计
基于JXTA的P2P即时通信系统设计
基于JXTA的P2P局域网即时通信应用的设计
基于P2P的即时通信系统的设计
基于Jxta的P2P即时通信软件的Java实现
基于P2P的即时通信系统的研究
基于JXTA的P2P远程学习系统的设计与实现
P2P环境下即时通信软件的设计
基于P2P技术的即时通信系统研究与实现
基于JXTA平台的P2P文件共享系统的设计与实现
电脑版