3

我需要设计一个新的 API 来模拟具有大量属性的联网设备,这些属性根据设备的类型变化很大。属性集不是完全任意的,它是一大组已知属性。也就是说,新设备带来了新属性,因此情况永远不会完全解决。

网络设备本身一直来来去去,因此这是 API 设计的核心部分。此外,最好通过观察者模式的某些变体来获取属性/属性集的更新。

注意:我不是在谈论网络管理,尽管这听起来可能是这样。也就是说,这些系统上的 API 可能非常适合/值得一看。

所以我的问题是,你知道开源世界中有什么好的 API,我可以从中学习并从中获得一些灵感吗?

该系统将基于 Java,因此示例最好来自密切相关的语言,例如 Java(当然 :))、C#、Scala 和其他类似的静态类型语言。

4

3 回答 3

1

我不确定您的 API 到底打算做什么,但我猜测由于网络设备“一直来来去去”并且您想使用观察者模式,因此您正在寻找可以获取网络上当前状态的更新。

你看过SLP吗?这是一个发布/订阅协议,可以做你想做的事:它允许网络设备通过网络广播他们的存在和属性,也可以监听其他人。它通过 TCP 和 UDP(单播和多播)工作。

周围有几个 java 实现(例如jslp),但我从未对它们完全满意(所以我最终编写了自己的)。就 C# 而言,我很难找到一个。

于 2009-11-25T03:08:16.677 回答
0

不能肯定我完全理解你的问题,但我会试一试。

您是否正在寻找一种允许设备在网络上公开其属性的方法?如果是这样,除非您编写现在理解与设备交互的代码,否则真的没有什么好方法。在你有了类似的东西之后,你所需要的只是一个类,它将属性数据保存在你喜欢的某种类型的数据结构中。对于更新,您可能需要定期轮询设备,除非它们有一种方法可以在其属性更改时进行报告:

Dictionary<string, Dictionary<string, string>> deviceAttributes = new 
   Dictionary<string, Dictionary<string, string>>();

void AddAttribute(string deviceIdentifier, string attribute, string value)
{
   if(!deviceAttributes.Keys.Contains(deviceIdentifier))
      deviceAttributes.Add(deviceIdentifier, new Dictionary(attribute, value);
   else
      deviceAttributes[deviceIdentifier].Add(attribute, value);
}

如果每个设备都有某种标准方法来检索感兴趣的属性,您可以编写代码来接受任何数组,并使用 for 或 foreach 循环将其添加到数据结构中。如果没有更具体的了解您正在尝试做什么,我真的不能说更多。

于 2009-11-23T23:48:51.853 回答
0

我可能会查看 LDAP/ActiveDirectory/ADAM(User Mode Active Directory) 。. . 博学的穴居人

于 2009-12-10T04:19:27.113 回答