- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试模拟 Pure Aloha 协议(protocol)。经过一些研究,我了解了该协议(protocol)的工作原理。简而言之,假设我们有 5 个节点并且帧大小是固定的。所有节点共享一个 channel 。当节点有数据要发送时,它会通过 channel 发送数据。如果两个或多个节点尝试同时(或在同一时间帧内)发送帧,则数据包会发生冲突,并且每个节点都必须再次重新发送数据包。碰撞帧必须在随机时间后重新传输,这将降低再次碰撞的可能性。
这就是我目前所拥有的。我有五个节点 [A-E]。这是五个站。每个节点都有自己的整数列表。这些是发送帧的时间。我生成了五个随机帧,结果如下:- 例如A 5、A 7、B 7、C 8、E 9。这些是随机生成的,意味着节点 A 在时间 = 5 和时间 = 7 时要发送两帧。帧 B 在时间 = 7 时要发送一帧。由于我们有两个帧试图同时发送一个帧,因此我们发生了冲突。
使用这段代码我得到以下结果...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Test_v1
{
public class Simulation
{
Utility utils = new Utility();
static Random random = new Random();
private Timer t1;
int currentTime;
int frameSize; //frame size in bits.
int channelCapacity; //channel capacity in bits.
int frameTime; //time to transmit one frame on the channel in milliseconds.
private List<Node> nodeList;
Node A;
Node B;
Node C;
Node D;
Node E;
int collisions = 0;
public Simulation()
{
frameSize = 10;
channelCapacity = 100;
frameTime = (frameSize / channelCapacity) * 100;
nodeList = new List<Node>();
A = new Node(); A.stationName = "Station A";
B = new Node(); B.stationName = "Station B";
C = new Node(); C.stationName = "Station C";
D = new Node(); D.stationName = "Station D";
E = new Node(); E.stationName = "Station E";
nodeList.Add(A);
nodeList.Add(B);
nodeList.Add(C);
nodeList.Add(D);
nodeList.Add(E);
generateFrames(5);
t1 = new Timer(100);
t1.Elapsed += new ElapsedEventHandler(IntervalTimerElapsed);
t1.Start();
}
protected void IntervalTimerElapsed(object sender, EventArgs e)
{
int framesOnChannel = 0;
foreach (Node n in nodeList)
{
for (int i = 0; i < n.queue.Count; i++)
{
if (currentTime == n.queue[i])
{
Console.WriteLine(currentTime + " " + n.stationName + " " + n.queue[i]);
framesOnChannel = framesOnChannel + 1;
collisions = collisions + 1;
if(framesOnChannel > 1)
n.queue[i] = BackOff(n) + currentTime;
}
else
{
Console.WriteLine(currentTime);
}
}
}
currentTime++;
if (framesOnChannel > 1)
{
Console.WriteLine("Frames on Channel:" + framesOnChannel + " Collision!");
}
else
{
Console.WriteLine("Frames on Channel:" + framesOnChannel);
}
framesOnChannel = 0;
if (currentTime > 10)
t1.Stop();
}
private void generateFrames(int load_G)
{
for (int i = 0; i < load_G; i++)
{
Node randomStation = getRandomNode();
randomStation.queue.Add(utils.RandomNumber(0, 10));
}
foreach (Node n in nodeList)
{
n.queue.Sort();
}
}
private int BackOff(Node node)
{
int k = node.attempts;
if (k > 10)
k = 10;
int R = (int)Math.Round(Math.Pow(2, k) - 1);
int backOffTime = random.Next(0, R) * frameTime;
return backOffTime + (frameTime * 2);
}
private Node getRandomNode(){
switch (random.Next(1, 6))
{
case 1:
return A;
case 2:
return B;
case 3:
return C;
case 4:
return D;
default:
return E;
}
}
}
}
到目前为止,我已经设法检测到何时发生碰撞。a) 我需要以某种方式将 Backoff 方法应用于那些在将来发生碰撞并发送它们的节点。当检测到碰撞但没有任何反应时,我应用了退避。在这种情况下,所有帧都应该发生冲突,因为要成功传输一个帧,必须在两个滴答的时间内只有一个帧。
b) 我需要计算成功传输的次数。如果在 2 个滴答内没有发送其他帧,则传输成功。例如,如果一个帧在时间 = 1 时发送。在时间 = 1 到时间 = 3 内必须没有其他帧才能成功。
在此先感谢您的帮助。如果有什么不清楚的地方请告诉我。
最佳答案
假设您想创建一个单线程模拟,您有两种选择 - 时间驱动模拟,或事件驱动模拟。两者之间的区别在于模拟时间(或模拟时钟)前进的方式。时间推进的方式决定了模拟运行的方式:
<强>1。时间驱动的模拟
在时间驱动的模拟中,时间连续运行,并在时序循环中以小的、离散的值递增。计时循环增加模拟时钟并迭代模拟的每个组件(例如节点、 channel 等),询问每个组件当前是否想要做某事。
模拟组件根据当前模拟时间(由计时循环传递)及其预定义行为做出决策。例如,节点可能决定在模拟时间 A、B 和 C 发送数据包。
完成每次迭代后,时序循环将仿真时间提前一个固定的小量,然后重新开始。在此模型中,要创建对实际时间的良好近似,时间增量必须非常小。
<强>2。事件驱动模拟
在事件驱动的模拟中,事情发生是因为是时候发生了。时间不会有争议地前进,而是从一个甚至另一个。在这样的模拟中,每个模拟元素(节点、消息、共享 channel 等)都会生成定时事件(比如“我需要在时间 XXX 发送数据包”,或“消息已在时间 XXX 到达”)。事件被放入按时间排序的队列中,定时循环一次一个地出列事件。
每当事件出队时,都会通过通知事件的所有相关实体来处理。例如,如果出队事件是“节点 A 在时间 5 通过 channel C 向节点 B 发送了一个数据包”,则通过将发送的数据包通知 channel C 来处理该事件。当获悉该事件时, channel C 可以反过来创建事件作为响应。例如,它可以创建一个新事件,表示“来自节点 A 的消息已在时间 6 通过 channel C 传递到节点 B”,从而创建一个模拟,其中消息需要 1 个模拟时间单位才能在 channel 中传播(在我的示例中,从时间 5 到时间 6)。这些响应事件被放回队列中,并按时间排序。
接下来,计时循环只是将下一个事件从队列中取出,并将模拟时钟提前到下一个事件的时间。这样,如果长时间没有模拟事件发生,事件循环就会向前跳过,这与时间驱动的模拟不同。
这是一种(通常)更好、更有效的系统模拟方法,但它也稍微复杂一些。
关于c# - 模拟纯 Aloha 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572368/
Aloha Editor附带一个图像插件,使用户能够内联编辑图像。但是,我还没有找到在编辑器中删除图像的方法。我在 Mac 上,我试过: 选择图像时按 Backspace 当光标位于图像前面时按 Ba
根据 Aloha Editor 文档,您可以监听“aloha-smart-content-changed”事件以寻求帮助,例如,将数据保存到您正在使用的任何持久性机制。这是我正在尝试做的一个例子:
如何在 aloha-multi split-expanded 框中添加新的 aloha-button。 (我想要添加无限数量的样式的能力。当然,不是通过管理员,而是硬编码) 最佳答案 为 Aloha
我正在尝试向 Aloha 内联编辑器 UI 工具栏添加一个按钮,以便在我的 Rails 应用程序中使用。用于普通 html 页面的代码工作正常。然而,在我的 Rails 应用程序中它不起作用,即使我复
我正在试验 Aloha 内联 HTML5 编辑器 (www.aloha-editor.com)。 我正在创建一个 CMS 系统,允许管理员上传文件以供下载。 这些将进入上传目录 (public_htm
除了 vis css,如何禁用工具栏中图像插件的裁剪按钮?配置不起作用。 Aloha.settings = { plugins: { image: {
我想在我的网站上使用 Aloha 编辑器,我从 [ http://aloha-editor.org/].Now 下载了它。我很困惑,因为下载的包中包含很多文件。 我选择了 aloha.js 和 alo
我已经按照 aloha-editor.org 中描述的如何“安装”aloha 编辑器进行了操作。 Aloha 编辑器已加载(如您在照片中所见)但未正确加载 你可以在这里看到照片: 这是我使用的一些 j
我想禁用 Aloha Editor边栏。我在不同的地方看到了以下代码,这对我不起作用: Aloha.settings = { sidebar: { disabled: true } }; 如果我在
我正在尝试模拟 Pure Aloha 协议(protocol)。经过一些研究,我了解了该协议(protocol)的工作原理。简而言之,假设我们有 5 个节点并且帧大小是固定的。所有节点共享一个 cha
关于如何扩展 Aloha 编辑器,是否有任何真正的帮助? 我想做的是扩展他们的 float 菜单——我想添加一个带有自定义字段的下拉列表。 例如,如果用户选择一个自定义字段,则会在 html 中添加一
我想使用 Aloha-Editor对于我的一个项目。默认的项目语言是德语,但我找不到任何方法来更改编辑器的语言。 (搜索了网络及其网站的指南。) 我唯一发现的是在为编辑器开发插件时如何使用 i18n,
在一个页面上,我想要有 2 个可以使用 aloha-editor 进行编辑的 div。对于一个字段,格式化工具栏应该可用,而对于另一字段,则只有插入工具栏可用。如何实现这一目标? 最佳答案 可以在每个
我需要将 Aloha 编辑器固定到特定位置,而不是在整个页面上跳来跳去。 有配置选项吗?有一个用于配置 Aloha 的“附加”选项,但我不知道如何应用,即使它能解决我的问题... 如果没有配置选项,也
有没有办法像侧边栏一样禁用 Aloha 的 ExtJS 工具栏? Aloha.settings = modules: ['aloha', 'aloha/jquery'] editabl
我正在努力自定义 Aloha 编辑器。我想删除可编辑内容周围的黄色边框: 在 Github 上,有人提出了同样的问题,给出的答案是, the highlight plugin shows the us
我在 Web 应用程序中使用 Aloha。它工作得很好,可以做我需要做的一切。唯一的问题是,一旦我尝试添加以下设置来自定义工具栏, Aloha.settings = { ... too
我正在使用 Aloha 编辑客户网站上的内容,并希望在保存时删除所有额外的 DOM 元素和属性。 段落标签来自: 到: 我想删除所有这些添加的元素。我错过了 Aloha API 中的销毁调用吗?
我在我的项目中使用 aloha editor 2。一切正常,但我不知道如何添加/显示工具栏,以便我可以在页面中加粗或添加表格。我看到那里的文档并了解到这些事情可以通过编程完成,但在 Aloha 编辑器
我一直在使用 Aloha Editor 创建 example of a simple editor ,但我还没有成功让它在 Opera 中工作。菜单不会出现,文本区域不可编辑。 在所有其他浏览器中似乎
我是一名优秀的程序员,十分优秀!