avahi

2009-10-07 8 views
5

द्वारा प्रसारित करने के लिए एक प्रोग्राम बनाना मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जो डेटा को आउटपुट करता है जिसे avahi के साथ नेटवर्क पर परोसा जा सकता है। प्रलेखन मैंने देखा है कि मुझे सेवा को डीबीस के साथ पंजीकृत करना है और फिर इसे avahi से कनेक्ट करना है, लेकिन ऐसा करने के लिए प्रलेखन बहुत दुर्लभ है। क्या किसी के लिए अच्छा दस्तावेज पता है? -Dbus अजगरavahi

:-avahi अजगर http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html#exporting-objects

: मैं इन पर देख रहे हैं किया गया है http://www.amk.ca/diary/2007/04/rough_notes_python_and_dbus.html

मैं वास्तव में कैसे avahi बिल्कुल काम करता है के साथ अपरिचित हूँ, इसलिए किसी भी संकेत दिए गए मददगार होगा ।

उत्तर

0

अवही ZeroConfig का क्लाइंट कार्यान्वयन "बस" है जो मूल रूप से "मल्टीकास्ट आधारित DNS" प्रोटोकॉल है। आप अंतराल के माध्यम से अपने "डेटा" की उपलब्धता प्रकाशित करने के लिए अवही का उपयोग कर सकते हैं। वास्तविक डेटा को किसी अन्य माध्यम से पुनर्प्राप्त किया जाना चाहिए, लेकिन आप आमतौर पर एक अंत-बिंदु पंजीकृत करेंगे जिसे आपकी पसंद के तरीके के माध्यम से "आह्वान" किया जा सकता है।

-3

यदि आपका प्रोग्राम जावा में लिखा गया है, तो आप avahi4j का उपयोग कर सकते हैं जो आपके स्थानीय नेटवर्क पर बोनजोर सेवाओं को पंजीकृत (और ब्राउज़) करने के लिए आसान उपयोग API प्रदान करता है। http://avahi4j.googlecode.com

10

मुझे एहसास है कि यह जवाब चार साल पहले पूछे जाने पर बहुत देर हो गया है। हालांकि, यह दूसरों की मदद कर सकता है।

निम्नलिखित का उपयोग कर एक सेवा की घोषणा की 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"]