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

相关文章

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意