为什么SSDP需要NOTIFY?

时间:2013-06-15 16:37:44

标签: networking network-programming network-protocols upnp ssdp

我希望有人可以清除我在upnp/ssdp协议使用的NOTIFY和M-SEARCH消息背后的混淆。

我的理解是当设备想要将自己通告给其他支持UPNP的设备时发送NOTIFY消息,并且当设备想要了解其他支持UPNP的设备时发送M-SEARCH消息。

那么,如果我的设备通过广播地址(对于SSDP,239.255.255.250)从其他设备收到M-SEARCH消息,我会以适当的格式回复它:

HTTP/1.1 200 OK 
 CACHE-CONTROL: max-age = seconds until advertisement expires
 DATE: when response was generated
 EXT: 
 LOCATION: URL for UPnP description for root device
 SERVER: OS/version UPnP/1.0 product/version
ST: search target
USN: advertisement UUID

这是我的问题。为什么NOTIFY消息首先存在?由于您在看到M-SEARCH时将设备信息发送回所请求的设备,因此在我看来,除非有人要求,否则无需事先通知NOTIFY设备信息,因为听广告的其他设备可能或可能在发送NOTIFY时无法使用。

换句话说,我想知道NOTIFY与M-SEARCH相比的确切目的,最好是使用它的实际例子。

或者我只是完全误解了这个协议?

1 个答案:

答案 0 :(得分:13)

示例:

  1. 控制点加入网络
  2. 控制点发送M-SEARCH,没有回复。
  3. 媒体渲染器加入网络
  4. 媒体渲染器发送NOTIFY
  5. 控制点通知NOTIFY,更新UI以显示新渲染器
  6. 如果没有NOTIFY控制点,如果想要注意新设备的出现,则必须不断轮询。离开网络的设备也是如此(尽管有时设备会意外离开,因此您无法信任要发送的再见者)。