我有一个需要使用WS-发现找到ONVIF相机,可能是在不同的逻辑网络单元运行蟒蛇。 有谁知道这是否可能?
(我在使用这个库的工作相同的逻辑网络中发现: https://github.com/hlamer/python-ws-discovery/blob/master/WSDiscovery.py )
有点搜索后,我遇到了“远程发现代理”这听起来前途,但我无法弄清楚他们究竟是什么。
我有一个需要使用WS-发现找到ONVIF相机,可能是在不同的逻辑网络单元运行蟒蛇。 有谁知道这是否可能?
(我在使用这个库的工作相同的逻辑网络中发现: https://github.com/hlamer/python-ws-discovery/blob/master/WSDiscovery.py )
有点搜索后,我遇到了“远程发现代理”这听起来前途,但我无法弄清楚他们究竟是什么。
ONVIF核心规范第7.4.2节发现代理介绍如何建立一个DP。 然而,在我的经验,我还没有发现支持远程发现任何ONVIF相机,很可能是因为,这样做,相机需要作为支持代理协议的网关。 因此,目前,在实践中,ONVIF远程发现是不可能的。
我偶然在这个问题迷迷糊糊地感到不安的是由罗恩·伍兹唯一的答案是不正确的,普通的误导性,但仍标记为接受的答案。 因此,尽管这个问题是三岁我决定为任何人谁将会在未来的正确读出它的答案。
ONVIF核心规范提供关于发现代理是并没有提供有关其工作的全部细节凝聚描述。 原因是很简单的:ONVIF规范没有定义它。 ONVIF是另一个标准的单纯用户: Web服务动态发现(WS-发现)1.1版 。 反过来说规范使用另一种标准: SOAP-过UDP版本1.1 。 而作为ONVIF无关与Discovery代理(除了使用它)不需要相机充当代理协议的网关。 在现实中发现代理服务器是运行在本地网络上的一些系统上的其他服务。
让我们来看看为什么可能需要发现代理,是很好的解决方案,如果你想发现Web服务(和ONVIF只是其中之一)跨本地网的边界。
在WS-发现的心脏在于SOAP-过度使用UDP多播IP地址协议。 这种技术的选择很简单:UDP是轻量级的,不需要建立连接,IP多播是从一个发送者传送一个数据包到多个接收者的非常有效的方式。 不幸的是IP多播数据包通常不被路由,并保持内部局域网。 此外组播可以将一个应变本地网络上,如果在使用它。 但是,尽管双方下我们有什么,我们有:听取通过UDP / IP发送组播消息作出相应的反应所需的终端设备。 这限制了WS-发现只有本地网络。
此外,每终端设备需要发送时加入组播组和预期(但不要求)发送多播消息“再见”的时候离开组播组的多播消息“你好”。
它使所有自然有其跟踪这些“你好”和“再见”的消息在本地网络上的一些服务,可以定期,但无法探本地网络往往以保持网络负载降到最低。 这种服务被称为发现代理。
事实上发现代理几乎是WS-查找客户端,但有两个重要补充:
发现代理需要立即发送的“Hello”消息,因为它接收到组播探测消息。 这让新客户知道有发现代理的网络和客户端上提供可以节省一些资源,并要求而不是做组播探测下一次发现代理。
让所有设备(那些由发现代理的手发现之前)的人谁请求,但这次它使用了HTTP的SOAP(从而通过单播TCP / IP)提供的信息。 这减少了高端客户负担,因为他们需要做的是连接到探索代理了可靠的TCP连接,并挖出所有可用终端设备的列表中一气呵成。
如通过发现代理副作用使用HTTP使得能够通过互联网执行WS查找探针。 发现代理仅仅是另一台Web服务器!
发现代理服务器使用完全相同的SOAP WSDL任何终端设备,因此所有从WS-发现客户需要的是使用HTTP的SOAP绑定来达到同样的结果,但更有效和整个互联网的结合,而不是UDP SOAP。
所以,在这里你可以得到发现代理你会问。 途径有它是: