You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					182 lines
				
				4.3 KiB
			
		
		
			
		
	
	
					182 lines
				
				4.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# bonjour
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A Bonjour/Zeroconf protocol implementation in pure JavaScript. Publish
							 | 
						||
| 
								 | 
							
								services on the local network or discover existing services using
							 | 
						||
| 
								 | 
							
								multicast DNS.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](https://travis-ci.org/watson/bonjour)
							 | 
						||
| 
								 | 
							
								[](https://github.com/feross/standard)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Installation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								npm install bonjour
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var bonjour = require('bonjour')()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// advertise an HTTP server on port 3000
							 | 
						||
| 
								 | 
							
								bonjour.publish({ name: 'My Web Server', type: 'http', port: 3000 })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// browse for all http services
							 | 
						||
| 
								 | 
							
								bonjour.find({ type: 'http' }, function (service) {
							 | 
						||
| 
								 | 
							
								  console.log('Found an HTTP server:', service)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Initializing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var bonjour = require('bonjour')([options])
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The `options` are optional and will be used when initializing the
							 | 
						||
| 
								 | 
							
								underlying multicast-dns server. For details see [the multicast-dns
							 | 
						||
| 
								 | 
							
								documentation](https://github.com/mafintosh/multicast-dns#mdns--multicastdnsoptions).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Publishing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `var service = bonjour.publish(options)`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Publishes a new service.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options are:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `name` (string)
							 | 
						||
| 
								 | 
							
								- `host` (string, optional) - defaults to local hostname
							 | 
						||
| 
								 | 
							
								- `port` (number)
							 | 
						||
| 
								 | 
							
								- `type` (string)
							 | 
						||
| 
								 | 
							
								- `subtypes` (array of strings, optional)
							 | 
						||
| 
								 | 
							
								- `protocol` (string, optional) - `udp` or `tcp` (default)
							 | 
						||
| 
								 | 
							
								- `txt` (object, optional) - a key/value object to broadcast as the TXT
							 | 
						||
| 
								 | 
							
								  record
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IANA maintains a [list of official service types and port
							 | 
						||
| 
								 | 
							
								numbers](http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `bonjour.unpublishAll([callback])`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Unpublish all services. The optional `callback` will be called when the
							 | 
						||
| 
								 | 
							
								services have been unpublished.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `bonjour.destroy()`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Destroy the mdns instance. Closes the udp socket.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Browser
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `var browser = bonjour.find(options[, onup])`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Listen for services advertised on the network. An optional callback can
							 | 
						||
| 
								 | 
							
								be provided as the 2nd argument and will be added as an event listener
							 | 
						||
| 
								 | 
							
								for the `up` event.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options (all optional):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `type` (string)
							 | 
						||
| 
								 | 
							
								- `subtypes` (array of strings)
							 | 
						||
| 
								 | 
							
								- `protocol` (string) - defaults to `tcp`
							 | 
						||
| 
								 | 
							
								- `txt` (object) - passed into [dns-txt
							 | 
						||
| 
								 | 
							
								  module](https://github.com/watson/dns-txt) contructor. Set to `{
							 | 
						||
| 
								 | 
							
								  binary: true }` if you want to keep the TXT records in binary
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `var browser = bonjour.findOne(options[, callback])`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Listen for and call the `callback` with the first instance of a service
							 | 
						||
| 
								 | 
							
								matching the `options`. If no `callback` is given, it's expected that
							 | 
						||
| 
								 | 
							
								you listen for the `up` event. The returned `browser` will automatically
							 | 
						||
| 
								 | 
							
								stop it self after the first matching service.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options are the same as given in the `browser.find` function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `Event: up`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emitted every time a new service is found that matches the browser.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `Event: down`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emitted every time an existing service emmits a goodbye message.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `browser.services`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An array of services known by the browser to be online.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `browser.start()`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Start looking for matching services.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `browser.stop()`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Stop looking for matching services.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `browser.update()`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Broadcast the query again.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Service
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `Event: up`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emitted when the service is up.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `Event: error`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emitted if an error occurrs while publishing the service.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.stop([callback])`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Unpublish the service. The optional `callback` will be called when the
							 | 
						||
| 
								 | 
							
								service have been unpublished.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.start()`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Publish the service.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.name`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The name of the service, e.g. `Apple TV`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.type`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The type of the service, e.g. `http`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.subtypes`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An array of subtypes. Note that this property might be `null`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.protocol`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The protocol used by the service, e.g. `tcp`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.host`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The hostname or ip address where the service resides.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.port`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The port on which the service listens, e.g. `5000`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.fqdn`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The fully qualified domain name of the service. E.g. if given the name
							 | 
						||
| 
								 | 
							
								`Foo Bar`, the type `http` and the protocol `tcp`, the `service.fqdn`
							 | 
						||
| 
								 | 
							
								property will be `Foo Bar._http._tcp.local`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.txt`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The TXT record advertised by the service (a key/value object). Note that
							 | 
						||
| 
								 | 
							
								this property might be `null`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `service.published`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A boolean indicating if the service is currently published.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								MIT
							 |