2009-10-07 8 views
5

私はavahiでネットワーク経由で提供できるデータを出力するプログラムを作成しようとしています。私が見たドキュメントでは、dbusでサービスを登録してavahiに接続する必要があると言われていますが、これを行うためのドキュメントはかなり疎です。誰もそれについての良い文書を知っていますか?私はこれらを見てきた:avahiによってブロードキャストされるプログラムを作成する

のpython-dbusの: http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html#exporting-objects

のpython-のavahi: http://www.amk.ca/diary/2007/04/rough_notes_python_and_dbus.html

私はのavahiがすべてでどのように機能するかと本当に慣れていないんだ、ので、任意のポインタが参考になります。

答えて

0

Avahiは、基本的に「マルチキャストベースのDNS」プロトコルであるZeroConfigのクライアントの実装です。 Avahiを使用してエンドポイントを介して "データ"の可用性を公開することができます。実際のデータは他の手段で取得する必要がありますが、通常は好きな方法で呼び出すことができるエンドポイントを登録します。

-3

あなたのプログラムがJavaで書かれている場合は、使いやすいAPIを提供するavahi4jを使用して、ローカルネットワーク上でBonjourサービスを登録(および参照)することができます。

10

私はあなたの質問が4年前に尋ねられたと考えて、この回答はかなり遅いことを認識しています。しかし、それは他人を助けるかもしれない。

次は、のavahi/dbusのを使用してサービスを発表:

import avahi 
import dbus 
from time import sleep 


class ServiceAnnouncer: 
    def __init__(self, name, service, port, txt): 
     bus = dbus.SystemBus() 
     server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER) 
     group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), 
           avahi.DBUS_INTERFACE_ENTRY_GROUP) 

     self._service_name = name 
     index = 1 
     while True: 
      try: 
       group.AddService(avahi.IF_UNSPEC, avahi.PROTO_INET, 0, self._service_name, service, '', '', port, avahi.string_array_to_txt_array(txt)) 
      except dbus.DBusException: # name collision -> rename 
       index += 1 
       self._service_name = '%s #%s' % (name, str(index)) 
      else: 
       break 

     group.Commit() 

    def get_service_name(self): 
     return self._service_name 


if __name__ == '__main__': 
    announcer = ServiceAnnouncer('Test Service', '_test._tcp', 12345, ['foo=bar', '42=true']) 
    print announcer.get_service_name() 

    sleep(42) 

それが実際に公開されていることを確認するためのavahi-ブラウズを使用する:

[email protected]:~$ avahi-browse -a -v -t -r 
Server version: avahi 0.6.30; Host name: els-mifr-03.local 
E Ifce Prot Name           Type     Domain 
+ eth0 IPv4 Test Service         _test._tcp   local 
= eth0 IPv4 Test Service         _test._tcp   local 
    hostname = [els-mifr-03.local] 
    address = [10.9.0.153] 
    port = [12345] 
    txt = ["42=true" "foo=bar"] 
関連する問題