为啥在 SSDP 中需要 NOTIFY?

Posted

技术标签:

【中文标题】为啥在 SSDP 中需要 NOTIFY?【英文标题】:Why is NOTIFY necessary in SSDP?为什么在 SSDP 中需要 NOTIFY? 【发布时间】:2013-06-12 02:54:57 【问题描述】:

我希望有人能澄清我对upnp/ssdp 协议使用的 NOTIFY 和 M-SEARCH 消息的目的背后的困惑。

我的理解是,当设备想要向其他支持 UPNP 的设备宣传自己时会发送 NOTIFY 消息,而当设备想要了解其他支持 UPNP 的设备时会发送 M-SEARCH 消息。

那么,如果我的设备通过广播地址 (for 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】:

例子:

    控制点加入网络 控制点发送 M-SEARCH,没有收到任何回复。 媒体渲染器加入网络 媒体渲染器发送 NOTIFY 控制点通知 NOTIFY,更新 UI 以显示新的渲染器

如果没有 NOTIFY 控制点,如果它想在出现新设备时注意到它们,它就必须不断地轮询。离开网络的设备也是如此(尽管有时设备会意外离开,因此您不能相信要发送的再见)。

【讨论】:

+1。此外,定期通知允许控制点推断设备已离开网络,即使该设备无法发送 BYEBYE

以上是关于为啥在 SSDP 中需要 NOTIFY?的主要内容,如果未能解决你的问题,请参考以下文章

我用Wireshark抓包时过滤关键词用了http。 但是为啥我抓的包没有http协议,里面只有SSDP的协议。上个图

支付宝异步通知notify_url与return_url

win32 WM_NOTIFY 与 WM_COMMAND

PHP 进行支付宝开发中return_url和notify_url的区别分析

为啥方法 wait() 在没有 notify() 的情况下工作?

WooCommerce:通过 notify_URL 使用 PayPal