以下内容纯属个人想法以及看过的一些相关信息,如有不足之处,还请及时指出,大家共同进步~~
为什么需要设备发现
随着接入互联网、物联网的设备越来越多,设备之间的通信也更加频繁和重要,而设备发现能更好的提升终端用户的体验。你可以想象以下的一些场景。
-
当你需要打印手机或者电脑上的文档时,点击 打印 能自动弹出可用的打印机设备,然后就可以选择一个直接打印。而不需要再配置打印机IP相关信息,是不是很方便?
-
目前电动汽车的智能座舱也很火,尤其多屏互动,比如你在手机上看到了一个有趣的视频,想分享给后排的朋友,此时你点击分享按钮,自动弹出车上的几个显示设备,你选择一个或多个进行分享。当然要想实现这种场景,还要结合投屏、镜像等功能,关于这块,会单独写一篇。
-
华为开源出来的openharmony操作系统,主打分布式,其中也包含了设备发现功能。
总之如果想减少用户的操作,设备自动发现十分的重要。下面我们再看下有哪些相关的技术。
设备(服务)发现相关技术
-
蓝牙
蓝牙的GAP(Generic Access Profile)就是保证不同的Bluetooth产品可以互相发现对方。 -
zeroconf
zeroconf是一个零配置网络协议,其不光实现服务发现,还包含 地址自动获取、域名解析(无需dns服务器)。苹果上的Bonjour、Linux上的avahi都属于zeroconf的实现。其中的服务发现主要是使用dns-sd协议。 -
dns-sd
github上有dns-sd相关的实现库,对于android开发者来说,NSD服务已经实现了dns-sd。可以直接使用NSD相关sdk进行开发。 -
ssdp
简单服务发现协议,是UPnP标准中的一个核心协议。 -
coap
这里要注意,原生的coap是不支持服务发现的,我所说的是openharmony中的libcoap,其基于原生的libcoap增加了发现功能。
https://gitee.com/openharmony/third_party_libcoap -
Android上的设备发现
推荐一个大牛对于jmDNS、Android NSD、Google Nearby 的分析
https://andriydruk.com/post/mdnsresponder/
以及大牛自己的实现(很遗憾,由于战争的原因,好像不更新了,希望世界和平~~)
https://github.com/andriydruk/RxDNSSD
以上就是目前个人所看到的设备(服务)发现相关的一些信息,个人更倾向跨平台的,例如基于 dns-sd 协议。安卓的nsd和苹果的bonjour可以互发现。
重要的一点
设备(服务)发现不是独立存在的,往往需要结合其他的技术,例如网络连接、投屏技术。
希望大佬们能够分享你们看到的相关信息和想法~~