Add HttpMultiServer.bind utility (#16)

We have a few places where we want to allow listening on 'any' hostname
for the case where the server may be both access locally with something
like "localhost" and externally with something like the servers
4 files changed
tree: b02979b8492f0e1646a16a0d2da852d5c12230e6
  1. .gitignore
  2. .test_config
  3. .travis.yml
  7. analysis_options.yaml
  8. lib/
  9. pubspec.yaml
  10. test/

An implementation of dart:io‘s HttpServer that wraps multiple servers and forwards methods to all of them. It’s useful for serving the same application on multiple network interfaces while still having a unified way of controlling the servers. In particular, it supports serving on both the IPv4 and IPv6 loopback addresses using HttpMultiServer.loopback.

import 'package:http_multi_server/http_multi_server.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as shelf_io;

void main() {
  // Both and http://[::1]:8080 will be bound to the same
  // server.
  HttpMultiServer.loopback(8080).then((server) {
    shelf_io.serveRequests(server, (request) {
      return new shelf.Response.ok("Hello, world!");