JXTA开发手册(三)JXTA网络结构

2024-02-01 22:18

本文主要是介绍JXTA开发手册(三)JXTA网络结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第四章                       JXTA网络结构

网络组织

       JXTA网络是自组织的,多跳的,可配置的节点之间不具备紧密联系的网络。节点之间的连接是暂时的,节点之间的消息路由是不确定的,节点的加入离开和路由变化非常的频繁。

       节点将才用各种形式的方法,确保连接的建立。这些节点的组织采用,网络的组织由JXTA网络托管,一般包含下面几类的节点:

       ·最小限度的节点:最小限度节点可以发送和收取消息,但是不能缓存通告和为其他节点节点进行路由。这类节点运行在资源相对匮乏的设备之上(PDA,蜂窝电话)

       ·全业务节点:全业务节点在接受和发送消息的同时,也缓存收到的通告。当收到其他节点的资源查询请求时,节点搜索自己的通告缓存,查看是否有与之匹配的内容。如果有,就返回相应的应答。但是,全业务节点本身并不向前转发查询请求。JXTA网络中的大部分节点都属于这类节点。

       ·集中节点:集中节点和全业务节点一样,缓存有收到的通告的信息。但是,集中节点同时也向其他节点转发查询通告,以便帮助其他节点查找需要的资源。当一个节点加入到节点组中时,节点自动查找当前节点组的集中节点,如果不能找到集中节点,节点动态的升级自己为集中节点。任何集中节点本身也保有一个集中节点列表,以便自己也可以把这个节点作为集中节点。

       每个节点组中的节点都保存有自己的集中节点列表,并且可以根据自己需要保有很多个集中节点。集中节点是节点组中唯一可以看见全部查询信息的节点。消息含有默认的TTL7跳,并通过节点经过的节点列表进行回嗍。

       ·中继节点:中继节点保存着节点之间的路由信息,节点首先查找本地缓存的路由表,如果不能找到路由信息,节点将路由请求传送给中继节点,中继节点将返回路由信息。中继节点也担负着转发位于NAT之后,不能直接通信的节点之间的数据转发任务。

 

      共享资源分布索引(SRDI)

       JXTA2.0 J2SE平台提供了一种机制以提高JXTA网络资源定位的效率,这种机制叫做共享资源分布索引。中心节点上维护着一个边缘节点发出的通告列表,当边缘节点发布新的通告时,他们发送给所在节点组中心节点其发布的资源索引。采用这种中心——边缘节点层次,查询请求仅仅在中心节点之间传播,减少了在一次通告中参与查询的节点数目,这是非常有意义的。

       每个中心节点都包含有节点组内已知其他中心节点的列表。一个中心节点可以通过回溯重新得到其他中心节点的信息。中心节点周期性的选择随机数量的其他中心节点,并随机的选取自己列表中的中心节点信息进行交互。同时,也周期性的清除没有响应的其他中心节点。因此,中心节点之间维护了紧密联系的JXTA网络。

       当一个节点发布了新的通告,那么这个通告将会以通告的名称和ID作为关键字被索引。仅仅这些索引被传送给中心节点,以便减少中心节点上面存储的数据量。中心节点同样回把通告转发给其他的中心节点。

 

      查询

       网络的结构如下图所示,节点A是边缘节点,默认配置节点R1为其中心节点。当节点A初始一个查询请求,它首先将请求发送给中心节点R1,在本例中,同时也会通过广播将请求发送给同一子网下的其他节点。

       邻居节点之间的查询(也就是说在同一子网内的查询)通过广播方式发送给子网中其他的JXTA节点。如果子网中的其他节点的本地缓存中含有被查询的内容,那么它将直接给查询发起节点响应。

       子网外的资源查询请求被直接传送至中心节点。中心节点首先检索本地缓存是否满足查询,如果包含,直接返回查询结果,不再转发查询请求。如果中心节点包含此资源的SRDI,那么它会通告发布这个SRDI 的节点,令它响应查询节点的查询请求(这里主要中心节点仅仅存储的是SRDI,并不是通告本身)。

       如果中心节点不能包含节点的查询请求,那么中心节点将会启动limited-range walker算法,搜索含有此资源的其他中心节点。此算法伴随着一个计数器以便避免广播风暴。当找到包含此资源的节点时,节点将直接响应给发起查询的节点。

       整个SRDI工作模式如下图所示:节点2发布了一个新的通告,然后送SRDI至中心节点R3。通告索引存储在R3上,同时也将发布在节点组的其他中心节点之上。当节点1发送查询请求时,它首先将查询请求送至R1R1首先检查自己的本地缓存,如果不能满足查询将查询转发。当资源查询请求发送至p2是,p2直接给出查询响应。

 

防火墙和NAT

       防火墙内的节点可以直接给防火墙外的节点发送消息,但是防火墙外的节点通常不能向防火墙内的节点发送消息。

       为了JXTA节点可以穿透防火墙自由的互相通信,必须具备以下的几个条件:

       ·节点组内位于防火墙后面的节点必须知道至少一个位于防火墙外的组内节点。

       ·防火墙两端的节点必须能够支持HTTP协议。

       ·防火墙允许HTTP协议通过。

      

下图描述了一个穿透防火墙的典型场景,

JXTA节点A和节点B需要通信,但是节点A位于防火墙之后,采用C做中转。

      

这篇关于JXTA开发手册(三)JXTA网络结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

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

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

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并