使用golang信道或互斥体模拟无线电通信

问题描述 投票:0回答:1

我需要模拟由N个节点组成的具有以下属性的无线电通信网络:

  1. 节点要么发送然后接收数据,要么接收然后发送数据,但不能同时发送。
  2. 无线发送的数据被当时处于接收模式的所有节点接收。
  3. 如果两个或多个节点同时发送数据,则数据将丢失。
  4. 节点之间没有时间同步。

在Go中,如果我使用通道来模拟传输介质,则数据将被序列化,只有一个接收器会获取数据,而不是全部。

而且,如果两个发送方尝试同时发送,我也无法想到一种“破坏”数据的方法。无论我是否使用互斥锁,发件人之一都将成功发送其消息。

go mutex channel goroutine
1个回答
0
投票

为什么不使用Golang频道创建发布者和订阅者模块。

创建一个集中式排队系统,您的所有发送者和接收者节点都将在其中注册自己。如果有任何节点发送数据,它将进入该模块并从发送者列表中选择发送者通道并开始在其上进行写操作。接收者也是如此。

您必须为每个节点创建一个通道,并将其注册到中央发布/订阅模块。这肯定会解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.