我是否在命令行中运行它?我是否将其作为 GUI 应用程序运行?我认为它通过本地网络发现可用的资源并为资源分配地址。接下来会发生什么?此信息是否写入其他应用程序可以读取的某个文件?我可以将 zeroconf 生成的地址放入浏览器的地址行并访问 Web 服务器吗(前提是 Web 服务器正在资源上运行)?
答案1
通常,每台提供服务的机器都会运行 Zeroconf 守护程序,客户端会在网络上搜索该守护程序。例如,在这个 Debian 机器上,有一个名为 的进程avahi-daemon
。要宣传服务,程序会与守护程序对话。一种简单的方法是使用 程序avahi-publish
,它会向守护程序注册服务:
avahi-publish -s myservice _http._tcp 12345 "Here it is"
直到该程序终止,avahi-browse
将会发现它:
$ avahi-browse -t _http._tcp
= eth0 IPv4 myservice Web Site local
hostname = [mymachine.local]
address = [192.168.1.123]
port = [12345]
txt = ["Here it is"]
大多数时候,您不会想运行单独的程序来发布服务,因此您的守护进程将有一些代码来执行此操作。这里有一些关于如何在 Python 中实现这一点的很好的例子。有一个简单的函数,你可以像这样调用它:
# Downloaded from http://stackp.online.fr/?p=35
# Thanks to Pierre
#
from ZeroconfService import ZeroconfService
import time
service = ZeroconfService(name="Joe's awesome FTP server",
port=3000, stype="_ftp._tcp")
service.publish()
再次强调,大多数时候您无需运行 avahi-browse,因为您的浏览器可能可以自行找到这些内容。例如,Mac 上的 Safari 可以查找“Bonjour”菜单。
您还可以使用 zeroconf 查找机器。我的机器可以使用以下.local
域名寻址:
ssh mymachine.local
即使机器不在 DNS 中也能工作。对于家庭网络非常有用!