start method

Future<void> start()

启动服务,只启动一次

Implementation

Future<void> start() async {
  if (_server != null) return;
  try {
    _server = await HttpServer.bind(InternetAddress.loopbackIPv4, _preferPort);
    _port = _server!.port;
  }on SocketException catch (e) {
    // 2. 如果是端口被占用,改用随机端口
    final code = e.osError?.errorCode;
    if (code == 48 || code == 98) {
      // 让系统分配一个空闲端口
      _server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
      _port = _server!.port;
    } else {
      rethrow; // 其他错误还是抛出去
    }
  } catch (e) {
    dev.log(' 服务启动错误: $e');
    rethrow;
  }
  _server!.defaultResponseHeaders.chunkedTransferEncoding = false;
  dev.log(' 服务启动: http://127.0.0.1:$port');
  _server!.listen(_handleRequest, onError: (e) {
    dev.log(' 服务报错: $e');
  });
}