unetstack - 如何找到相邻节点的地址和位置坐标?
问题描述
我正在 UnetStack 中实现一个算法,我正在尝试编写一个代理来从相邻节点获取所需的参数。我想向所有相邻节点发送广播消息,这些相邻节点应回复其地址和位置坐标。我该如何实现?我知道我需要访问相邻节点的 NodeInfo 服务,但不确定广播传输和接收要遵循什么服务/协议。
解决方案
做这件事有很多种方法:
- 您可以
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 可能是您安排响应以管理网络负载的解决方案。
推荐阅读
- c - C 循环不能正确运行循环的所有方面。仅在循环的特定部分循环
- java - java - 以不区分大小写的顺序输出文本
- javascript - jQuery setAttribute 中的图像没有改变
- f# - F# 中推断的柯里化函数签名
- python - 从 AWS 胶水 pythonshell 作业中的有效负载中检索 s3 路径
- javascript - 通过 Get 方法将数据发送到 NodeJS 服务器
- unicode - sapui5 对话框中未显示 Unicode 字符“^2”
- java - 是什么导致了这个与 ClassLoader 和 File 相关的 NullPointerException?
- java - 根据响应重试 WebClient
- python - 带有 Tkinter GUI 的简单计算器