总结:PeerSim cycle-based
来源:互联网 发布:碰撞检测算法 编辑:程序博客网 时间:2024/05/08 07:24
1.搭建
此列表表示检查这些备选方案的顺序。 也就是说,如果多个返回true,那么第一个将被取。 注意,这个类只检查这些线索,不检查配置是否一致或有效。
ConfigContainer 这个类是Configuration中使用的配置数据的容器; 看到类的更多信息。
1.
|——private Map<String, Integer> protocols; //存放{lnk=1, avg=0}
|父类
IdleProtocol://是存储邻居节点链路的一个静态容器
第一步参照:http://hyhx2008.github.io/peersimshi-yong-jiao-cheng-1-ru-men.html (内容有介绍cycle-based 和 event-based,有详细的讲解cycle-based的example。也有作者自己添加的,但是没有提到如何实现)
第一步运行后出错
解决参照:http://blog.csdn.net/jo_say/article/details/6437385 运行成功 (该博客只是能成功配置及运行,没有其它拓展)
-cp后面需要注明classpath,例如: java -cp peersim-1.0.5.jar;jep-2.3.0.jar;djep-1.0.0.jar peersim.Simulator example/config-example1.txt
2.
第二步参照:http://m.blog.csdn.net/article/details?id=39318011 (也是只有搭建,后期没有拓展)
3.调试
首先,先载入配置文件
Simulator: loading configuration
ConfigProperties: File C:\Users\Administrator.YJVJ16GQQCQ4SCT\Desktop\peersim-1.0.5\example\config-example1.txt loaded.
main方法执行步骤:
(1)Simulator的main()方法加载配置并执行实验。 独立实验的数量由配置参数“simulation.experiments”给出。 在所有实验中,配置是相同的,只有随机种子在实验之间不重新初始化。
(2)加载配置目前通过使用构造函数ParsedProperties.ParsedProperties(String [])构造ParsedProperties的实例来完成。 参数args只是传递给这个类。 然后,此类用于初始化配置。
(3)加载配置后,通过调用适当的引擎运行实验,其标识如下:
CDSimulator
: if CDSimulator.isConfigurationCycleDriven()
returns trueEDSimulator
: if EDSimulator.isConfigurationEventDriven()
returns true4.教程
找到中文教程:http://hyhx2008.github.io/peersimshi-yong-jiao-cheng-2-jie-xi-cycle-basedmo-shi-fang-zhen.html (是第一步中第一个链接。有图片,有示例。)
http://blog.csdn.net/qianfu111/article/details/7286021有几种P2P仿真平台对比。
项目结构:
ConfigProperties 用于处理配置文件的类。 通过处理文件,系统资源和命令行来扩展属性的功能。——>子类
ParsedProperties
ParsedProperties 扩展类配置属性与基本解析功能。
整体释义:
笔记:
P2P网络是由节点组成的,节点是协议的容器。Node接口提供了对Node 节点所包含的协议的访问方法,并为节点提供了固定的ID。这是一个特定的协议,被设计用来在Cycle-based模型中运行,它只CDProtocol 定义了在每一个周期中要运行的操作。
一般都由协议来实现,这个接口为其它协议提供了访问邻居节点集合Linkable 的服务,节点间相同的linkable协议类的实例定义了一个覆盖网络。
实现了这个接口的类可以在仿真期间的某个时间点调度执行,这些类Control 一般用于观察或修改仿真过程。
整体流程:
读取配置文件(通过命令行参数传递进来),然后仿真器初始化网络中的节点和节点中的协议,每个节点都拥有相同的协议栈。节点和协议的实例是通过克隆来创建的,只有一个原型是通过构造方法创建,其它的节点和协议都是从这个原型中克隆而来。基于这个原因,协议类中clone方法的实现是很重要的。
2.
初始化操作,设置每个协议的初始状态。初始化阶段是由Control对象控制运行的,仅在实验开始时运行一次。在配置文件中,初始化的组件可以由init前缀识别,在下面讨论的initializer对象也是controls,但为了标记其功能以区别于一般的Control对象,它被配置用来在初始阶段运行。
3.
在初始化完成后,Cycle-based引擎在每一个周期中调用所有组件(protocols和controls)一次,直到完成了指定的周期数,或者某个组件决定终止仿真为止。在PeerSim中每一个对象(controls和protocols)都被赋以一个Scheduler对象,它定义了什么时候本组件将会被执行。在默认情况下,所有对象都会在每个周期中运行。但我们也可以配置一个protocol或control只在某些特定的周期中运行,也可以在每一个周期中指定组件的执行顺序。
摘取:
在Peersim中首先要建立节点(节点模型),之后把节点连接起来(拓扑模型)
节点是由一个类实现的,当被实例化后,每个节点将拥有独立的内存空间和协议栈
节点由ID和INDEX两个量来标识,
其中ID是在节点初始化后不会发生变化的,所以在任何时候ID都可以唯一地标识一个节点,它可以被理解为代表了现实中节点的IP地址,
而INDEX则是和网络动态演进相关的一个标识,当仿真一轮结束后,执行“洗牌”(Shuffle)动作后,节点的INDEX可能会变化。
当在网络中查找某个节点时,总是按照INDEX遍历所有节点,以搜寻ID为某个特定值的节点。
ConfigContainer:
|——maxdepth=100;
|——private Map<String, Integer> protocols; //存放{lnk=1, avg=0}|——private Map<String, Integer> protocols; //存放{lnk=1, avg=0}
CommonState:
|
|——private static Node node; //存放current node
|父类
CDState:
|
|——
-------------------------------------------------------------------------------------------------------------------Network:
|——public static Node prototype = tmp; //原型节点
|——static Node[] node = null; //存放了网络中所有节点
|——reset(); //两个Protocol中AverageFunction(此步什么也没做)和IdleProtocol()。 reset()中创建原型节点,克隆原型节点生成50000个new GeneralNode(),GeneralNode下包含IdleProtocol和AverageFunction两个协议。
GeneralNode:
|——index //在节点列表的内部表示中设置此节点的索引
|——protected Protocol[] protocol = null; //存放了protocol[]={"protocol.avg","protocol.lnk"} //IdleProtocol
|——protected Node[] neighbors; //Neighbors |——
SingleValueHolder:
|——value; //通过本类中setValue()方法赋值。
|——setValue(double); // (i*step+min.double)赋值(i是Node(i))
|父类
AverageFunction-----implements------- CDProtocol
-------------------------------------------------------------------------------------------------------------------
CDSimulator
|——runInitializers(); //两个Control中WireKOut()和LinearDistribution()。 WireKOut时node[i]上的protocol[1]向邻居生出20条边,即构成图,在node[i]的IdleProtocol下包含Node[20]存放邻居节点。 LinearDistribution时可以得到AverageFunction的父类SingleValueHolder中的value通过setValue(i*step+min.double)赋值(i是Node(i))。
|——private static Control[] controls = new FullNextCycle(" "); //含有3个controls,前两个赋值,第三个默认[control.avgo AverageObserver(),control.shf Shuffle(),FullNextCycle()] |——private static Scheduler[] ctrlSchedules = new Scheduler(" ");
|——loadControls(); //给controls[3]赋值,给ctrlSchedules[3]赋值。 controls[]是对 (AverageObserver, Shuffle,FullNextCycle)这三个实现类的初始化。 ctrSchedules[]为Scheduler();
Scheduler
网上也很少找到peersim的资源,本文也是有cycle-based , 对于cycle-based的大体解释应该还是有点用途的,了解cycle模拟需要一步一步的debug调试。总体来说难度不大,只是相关资源欠缺,且质量不太高。
阅读全文
0 0
- 总结:PeerSim cycle-based
- Peersim 学习日记 02 初步认识Cycle-based
- peersim配置记录及调试cycle模式自带example的笔记
- peersim简介
- PeerSIm简介
- PeerSim初学
- 剑指PeerSim
- Physics-based Animation 学习总结
- P2P模拟器之peersim
- 研究PeerSim中
- peerSim配置文件解析
- Peersim kademlia manual - note
- PeerSim的基本概念
- Peersim导入Eclipse中
- Peersim如何解析文件
- Chord implementation for Peersim
- PBR (policy-Based routing,策略路由)总结
- 论文:Recommendation Based on Contextual Opinions 总结
- DD系统构建-MBR(5)加载loader文件
- sql
- java基础(四):实现变量值交换的三种方法
- linux 线程同步机制包装类
- 优先队列
- 总结:PeerSim cycle-based
- python setup.py egg_info“ failed with error code 1”
- Java中时间日期格式转换
- linux sed流编辑器示例讲解
- HDU-1728-逃离迷宫
- C++中的单例模式和工厂模式
- UI--UIControl及其子类
- linux 共享内存的使用
- 单列模式