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

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,