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

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用