我正在 UnetStack 中实现一个算法,我正在尝试编写一个代理来从相邻节点获取所需的参数。我想向所有相邻节点发送广播消息,这些相邻节点应回复其地址和位置坐标。我该如何实现?我知道我需要访问相邻节点的 NodeInfo 服务,但不确定广播传输和接收要遵循什么服务/协议。
1 回答
2
做这件事有很多种方法:
- 您可以
RangeReq
使用requestLocation
set to发送true
。这请求对等节点将其位置坐标传回。成功后,您将收到一个已填写RangeNtf
的字段。location
使用 2 节点网络的示例 shell 会话:
> ranging << new RangeReq(to: 31, requestLocation: true)
AGREE
ranging >> RangeNtf:INFORM[from:232 to:31 range:999.99976 offset:-348702972
rxTime:2042489677 peerLocation:1000.0,0.0,-15.0]
- 您可以使用远程服务来请求信息。为此,请确保响应节点启用了远程控制 (
remote.enable = true
)。然后向它发送一个请求,将它的位置发送给你,你很快就会以RemoteTextNtf
.
示例会话:
> rsh 31, '?node.location'
AGREE
[31]: [1000.0, 0.0, -15.0]
- 您可以编写自己的代理在每个节点上运行,并
DatagramNtf
使用您自己的特殊 PDU 监听特定的,并使用从节点信息服务获取的信息来响应那些。这是最灵活的,但需要您从头开始开发代理。
请注意,1 和 2 都不是广播请求,而是对特定节点的请求。如果你想用广播做类似于选项 2 的事情,你可以这样做:
> rsh 0, '?node.location'
AGREE
[31]: [1000.0, 0.0, -15.0]
但请记住,如果所有节点都尝试立即响应,则此垫子不适用于网络拥塞。如果这被证明是一个问题,选项 3 可能是您安排响应以管理网络负载的解决方案。
于 2021-02-08T04:16:31.113 回答