LAN 内のクライアントが構成なしでサーバー アプリケーションのすべてのインスタンスを検索する方法を探しています。自分で何かをハッキングする代わりに、既存のソリューションを使用したいと考えています。個人的には、Python で行う必要がありますが、他の言語での解決策について聞いてうれしいです。
では、なぜavahiやOpenSLPなどのZeroconf / SLPソリューションを使用しないのでしょうか? 追加の基準がいくつかありますが、前述のシステムのいずれもそれらに一致しないという印象を受けました。
私は次のような解決策を探しています:
- フレキシブル。スーパーユーザー権限を必要としないでください。つまり、1024 を超えるポートのみを使用してください。
- 固体。1 台のマシンで同じサービス タイプと異なるサービス タイプの複数のサービスを許可し、アドバタイズ サーバーを開始したインスタンスが停止またはクラッシュした場合でも、サービスのアドバタイジングを継続する必要があります。
- ポータブル。ほぼどこでも、または少なくとも *BSD、Debian/gentoo/RedHat/SuSe Linux、Mac OS X、Solaris、および Windows NT で実行する必要があります。
- 光。理想的には、1 つの Python スクリプトがソリューション全体になります。アドレスの自動構成などにはまったく興味がありませんが、必要のない機能がたくさんあるソリューションをしぶしぶ受け入れます。さらに、1 回限りのセットアップは厳禁です。
私は次のようなものを期待しています:
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)