2009-12-16 30 views
12

Tôi có một số ứng dụng tôi muốn hiển thị với zeroconf.Cách đơn giản nhất để xuất bản qua Zeroconf/Bonjour?

  1. Có cách nào dễ dàng để thực hiện việc này không?
  2. Quản trị viên mạng của tôi có cần quản lý điều gì để bật tính năng này không?

Python hoặc sh sẽ thích hợp hơn. Đề xuất dành riêng cho hệ điều hành chào mừng bạn đến với Linux và OS X.

Trả lời

9

Hoặc bạn chỉ có thể sử dụng bash:

dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...] 

này hoạt động bằng cách mặc định trên OS X. Ví nixes * khác, hãy tham khảo trang avahi-publish người đàn ông (mà bạn có thể cần phải cài đặt thông qua quản lý gói ưa thích của bạn) .

+0

"Cách giải quyết dễ dàng" không còn khả dụng – bjoernz

+0

@bjoernz Tôi đã cập nhật câu trả lời của mình để phản ánh mối liên kết. – Zack

8

Tôi muốn giới thiệu pybonjour.

+2

Nghe hay đấy. Lưu ý rằng hiện tại [không hỗ trợ Python 3.x - xem vấn đề # 5] (http://code.google.com/p/pybonjour/issues/detail?id=5). –

+1

Lần phát hành gần đây nhất 2009 ... –

7

pybonjour dường như không được duy trì tích cực. Tôi đang sử dụng python-zeroconf.

pip install zeroconf 

Dưới đây là một đoạn trích từ một kịch bản tôi sử dụng để công bố một Twisted-Autobahn WebSocket vào một thiết bị iOS:

from zeroconf import ServiceInfo, Zeroconf 

class WebSocketManager(service.Service, object): 
    ws_service_name = 'Verasonics WebSocket' 
    wsPort = None 
    wsInfo = None 

    def __init__(self, factory, portCallback): 
     factory.protocol = BroadcastServerProtocol 
     self.factory = factory 
     self.portCallback = portCallback 
     self.zeroconf = Zeroconf() 

    def privilegedStartService(self): 
     self.wsPort = reactor.listenTCP(0, self.factory) 
     port = self.wsPort.getHost().port 

     fqdn = socket.gethostname() 
     ip_addr = socket.gethostbyname(fqdn) 
     hostname = fqdn.split('.')[0] 

     wsDesc = {'service': 'Verasonics Frame', 'version': '1.0.0'} 
     self.wsInfo = ServiceInfo('_verasonics-ws._tcp.local.', 
            hostname + ' ' + self.ws_service_name + '._verasonics-ws._tcp.local.', 
            socket.inet_aton(ip_addr), port, 0, 0, 
            wsDesc, hostname + '.local.') 
     self.zeroconf.register_service(self.wsInfo) 
     self.portCallback(port) 

     return super(WebSocketManager, self).privilegedStartService() 

    def stopService(self): 
     self.zeroconf.unregister_service(self.wsInfo) 

     self.wsPort.stopListening() 
     return super(WebSocketManager , self).stopService() 
Các vấn đề liên quan