基于JXTA进行模型设计的关键过程分析

2023-12-02 13:18

本文主要是介绍基于JXTA进行模型设计的关键过程分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.加入P2P网络

    节点启动基于JXTA平台开发的应用程序,首先通过加入NetPeerGroup,初始化平台对等组和网络对等组,并启动JXTA.然后可以启动NetPeerGroup中的发现服务(DiscoveryService)以发现通告,并做出相应的处理。JXTA首先会调用下面函数在本地缓存搜索想要搜索的满足相关属性通告, Enumeration<Advertisement>getLocalAdvertisements(int type,String attribute, String value),其中type有三种类型:DiscoveryService.PEER(对等体通告), DiscoveryService.GROUP(对等组通告), DiscoveryService.ADV(除前两种通告以外的所有通告)。Attribute即通告的各种属性,用的最多的即是“Name”,value支持通配符。当在本地缓存找不到想要的通告时,可以调用 intgetRemoteAdvertisements(String peerid,int type,String attribute, String value,int threshold)向其他对等体请求通告,具体使用过程见JXTA API。整个过程流程图如下图1所示。

                                           

                    

图1 加入P2P网络流程图

2.创建和发布对等组

    基于JXTA开发P2P应用程序,根据不同的服务需要,自然需要创建不同的对等组。创建对等组过程中需要用到的JXTA API有:

    Ø  DiscoveryService.getLocalAdvertisement()读取缓存中的对等组信息,以判定是否需要创建新的对等组通告;

    Ø  PeerGroup.getAllPurposePeerGroupImplAdvertisement()获得对等组通告模版,用于创建新的对等组通告;

    Ø  PeerGroup.newGroup()创建指定名称、描述信息的新的PeerGroup;

    Ø  DiscoveryService.remotePublish()用于发布新创建的组通告,以确保其他对等体能够通过getRemoteAdvertisements()函数搜索到组通告。

    其过程流程图如下图2所示。

图2 创建发布对等组流程图

3.加入对等组

    对等体通过发现服务发现特定对等组后,可以请求加入对等组。过程如下:对等体首先实例化一个AuthenticationCredential类的对象,以获取授权证书;然后通过PeerGroup.getMembershipService()获取对等组对应的成员服务,成员服务使用MembershipService.apply()方法生成对等体对应的身份加入到对等组中。流程图如下图3所示所示。

图3 加入对等组

该Qos信息的订阅与发布的实现过程,侧重于对等体之间的发现服务以及对等体之间的直接交互,并没有对加入对等组采用授权证书的安全认证方式,而是在获取组通告后,直接使用PeerGroup.newGroup()方法加入对等组中。

4.利用管道发送和接收消息

    管道通信是JXTA中对等体通信的核心。实现这部分功能用到以下JXTA API:

    Ø  net.jxta.pipe.PipeService定义了JXTA管道服务的API

    Ø  net.jxta.pipe.InputPipe 用于建立输入管道,接受管道消息

    Ø  net.jxta.pipe.PipeMsgListener接收消息事件的侦听接口

    Ø  net.jxta.pipe.PipeMsgEvent 包含管道的所有接收事件

    Ø  net.jxta.pipe.OutputPipe 用于建立输出管道,发送管道消息

    Ø  net.jxta.pipe.OutputPipeListener发送消息事件侦听接口,该接口用于接收OutputPipe解决事件,用于对等体获取OutputPipe以与远程对等体通信。

    Ø  net.jxta.endpoint.Message 定义了使用管道服务实现从管道接收和发送数据的接口。接收消息端和发送消息端交互过程如下图4所示。

 

图4 管道发送接受消息过程

5.使用JxtaSocket进行通信

    为了方便熟悉TCP/IP网络编程的人更快的熟悉JXTA对等体通信,JxtaSocket本质上就是封装了一个可靠双向管道。

    JxtaServerSocket中定义了下列方法:

    Ø  bind:绑定到指定对等组中的管道

    Ø  accept:等到指定对等组中的JxtaSocket连接

    Ø  setSoTimerout:设定ServerSocket超时

    JxtaSocket定义了下列方法:

    Ø  getOutputStream():返回socket输出流

    Ø  getInputStream():返回socket输入流

    Ø  setSoTimeout():设置Socket超时。

    具体交互过程如下图3.7所示。

 

图5 使用JxtaSocket进行通信过程

       JXTA的Java语言实现中同时封装了JxtaBiDiPipe作为对等体间双向通信的方式。相比较直接使用管道通信方式,JxtaSocket和JxtaBiDiPipe处理对等体间通信有更大的优势。该订阅发布模型实现中选择直接使用输入管道和输出管道进行通信。  

这篇关于基于JXTA进行模型设计的关键过程分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445489

相关文章

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx