灵活、可靠和便携的服务发现

phi*_*hag 5 python language-agnostic service-discovery

我正在寻找一种方法,让 LAN 中的客户端无需任何配置即可找到我的服务器应用程序的所有实例。我不想自己破解某些东西,而是想使用现有的解决方案。就我个人而言,我需要用 Python 完成它,但我很高兴听到任何其他语言的解决方案。

那么为什么我不使用avahiOpenSLP或其他一些Zeroconf / SLP解决方案?好吧,还有一些额外的标准,我的印象是上述系统都不符合它们。

我正在寻找一种解决方案:

  • 灵活。它必须不需要超级用户权限,即只使用端口>1024。
  • 固体。它必须在一台机器上允许多个相同和不同服务类型的服务,并在启动广告服务器的实例停止或崩溃时继续广告服务。
  • 便携式。它必须几乎可以在任何地方运行,或者至少在 *BSD、Debian/gentoo/RedHat/SuSe Linux、Mac OS X、Solaris 和 Windows NT 上运行。
  • 。理想情况下,一个 Python 脚本就是整个解决方案。我对地址自动配置或类似的东西一点也不感兴趣,尽管我不情愿地接受一个具有许多我不需要的功能的解决方案。此外,任何一次性设置都是严格禁止的。

我期待这样的事情:

def registerService(service): # (type, port)
    if listen(multicast, someport):
        if fork() == child:
            services = [service]
            for q in queriesToMe():
                if q == DISCOVERY:
                    answer(filter(q.criteria, services))
                elif q == ADVERTISE and q.sender == "localhost":
                    services.append(q.service)
    else:
        advertiseAt("localhost", service)
Run Code Online (Sandbox Code Playgroud)

phi*_*hag 3

我编写了一个符合所有这些条件的应用程序/库(当前是 Python 和 CLI 界面)。它称为minusconf。事实证明分叉甚至没有必要。