基于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

相关文章

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生