本文介绍一个自已创建的消息产生器EachToOneMessageGenerator
,即每隔interval
,hosts
每个节点都创建一个消息,不同于MessageEventGenerator
(每隔interval
,整个网络只产生一个消息)。
1. 消息事件产生器
The ONE源码包提供了4种消息事件产生方式,分别是:
MessageEventGenerator
每隔interval
,整个网络只产生一个消息OneToEachMessageGenerator
整个仿真期间最多产生tohosts
个消息OneFromEachMessageGenerator
整个仿真期间最多产生hosts
个消息MessageBurstGenerator
每隔interval
,每个源节点hosts
为每个目的节点tohosts
产生一个新消息
相关博文如下:
本文旨在创建一个消息事件产生器EachToOneMessageGenerator
,即每隔interval
,hosts
每个节点都创建一个消息。
2. EachToOneMessageGenerator
2.1 仿真结果
先看下由EachToOneMessageGenerator
产生的消息创建报告CreatedMessagesReport,相关的设置文件如下:
Events1.class = EachToOneMessageGenerator
Events1.hosts = 10,20
Events1.tohosts = 30,40
Events1.interval = 25,35
Report.report2 = CreatedMessagesReport
产生的消息创建报告CreatedMessagesReport,取部分如下(重点看下fromHost
和toHost
列):
# time ID size fromHost toHost TTL isResponse
32.0000 M1 984638 p10 p34 300 N
32.0000 M2 800811 p11 p34 300 N
32.0000 M3 922110 p12 p31 300 N
32.0000 M4 829931 p13 p33 300 N
32.0000 M5 945131 p14 p33 300 N
32.0000 M6 575923 p15 p32 300 N
32.0000 M7 795971 p16 p39 300 N
32.0000 M8 902337 p17 p37 300 N
32.0000 M9 771601 p18 p34 300 N
32.0000 M10 506241 p19 p31 300 N
2.2 源代码
其实代码还是比较简单,继承MessageEventGenerator
,重写nextEvent()
方法。源代码如下:
public class EachToOneMessageGenerator extends MessageEventGenerator {
private int nextFromOffset; //next index to use from the "from" range
...
@Override
public ExternalEvent nextEvent() {
int responseSize = 0; /* no responses requested */
int msgSize;
int interval;
int from;
int to;
from = this.hostRange[0] + nextFromOffset;
to = drawToAddress(hostRange, from);
msgSize = drawMessageSize();
MessageCreateEvent mce = new MessageCreateEvent(from, to, getID(),
msgSize, responseSize, this.nextEventsTime);
if ((this.hostRange[0] + nextFromOffset) == (this.hostRange[1]-1)) {
/*** move to next interval ***/
interval = drawNextEventTimeDiff();
this.nextEventsTime += interval;
this.nextFromOffset = 0;
} else {
this.nextFromOffset++;
}
if (this.msgTime != null && this.nextEventsTime > this.msgTime[1]) {
this.nextEventsTime = Double.MAX_VALUE; //next event would be later than the end time
}
return mce;
}
}
3. 讨论
细心的你,会发现,上述代码产生的消息都是在同一个时间产生的,更加合理的做法是每个host
都是独立的,即每个host
都是每隔interval
(如从[25, 35]
随机选取)产生一个消息。如果您有思路,期待与我分享。
事实上,消息事件产生器对应于网络的data traffic models,最近在想,什么样的data traffic models才是更合理的,这多半取决于应用,那么应用与data traffic models是怎么对应的,在找这方面的资料,但没什么收获,求分享。