我需要模拟由N个节点组成的 radio 通信网络,这些网络具有以下属性:

  • 节点要么发送然后接收数据,要么接收然后发送数据,但不能同时发送。
  • 空中发送的
  • 数据被当时处于接收模式的所有节点接收。
  • 如果两个或更多节点同时发送数据,则数据将丢失。
  • 节点之间没有时间同步。

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

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

    最佳答案

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

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

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

    09-30 15:47
    查看更多