2009-10-07 12 views
5

Bir ağ üzerinden avahi ile sunulabilecek verileri veren bir program yazmaya çalışıyorum. Baktığım belgeler, servisi dbus ile kaydetmem ve avahi'ye bağlamam gerektiğini söylüyor, ancak bunu yapmak için gereken belgeler oldukça seyrek. Bunun için iyi bir dokümantasyon bilen var mı? Bunları baktığımız:Avahi tarafından yayınlanacak bir program oluşturma

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

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

yüzden herhangi işaretçiler yararlı olacaktır, avahi hiç nasıl çalıştığını gerçekten alışılmadık olduğum .

cevap

0

Avahi olan "adil" temelde "Çoklu Yayın tabanlı DNS" protokoldür ZeroConfig bir istemci uygulaması. "Verilerinizin" kullanılabilirliğini uç noktalar üzerinden yayınlamak için Avahi'yi kullanabilirsiniz. Gerçek veriler başka yollarla alınmalıdır, ancak normalde sizin beğeninize ait bir yöntemle "çağrılan" bir son noktaya kayıt olursunuz. Programınız Java ile yazılmış ise

-3

, o zaman yerel ağda Bonjour hizmetlerini kayıt API kullanabilir (ve göz) için kolay sağlayan avahi4j kullanabilirsiniz. http://avahi4j.googlecode.com

10

Sorunun dört yıl önce sorulduğu düşünülürse, bu cevabın çok geç olduğunu anlıyorum. Ancak, başkalarına yardımcı olabilir.

aşağıdaki kullanarak bir hizmeti duyurdu avahi/dbus: bunu doğrulamak için avahi-gözatmasını kullanma

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) 

gerçekten yayınlanır:

[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"] 
İlgili konular