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如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块