main.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'dart:isolate';
  4. import 'package:angel_framework/angel_framework.dart';
  5. import 'package:args/args.dart';
  6. import 'package:dart_angel_benchmark/dart_angel_benchmark.dart'
  7. as dart_angel_benchmark;
  8. main(List<String> args) async {
  9. var argParser = ArgParser()
  10. ..addOption('type',
  11. abbr: 't', allowed: ['mongo', 'postgres'], defaultsTo: 'mongo');
  12. try {
  13. var argResults = argParser.parse(args);
  14. serverMain(StartConfig(0, argResults));
  15. for (int i = 1; i < Platform.numberOfProcessors; i++) {
  16. var onError = new ReceivePort();
  17. onError.first.then((data) {
  18. print(data);
  19. if (data is List) {
  20. Zone.current.errorCallback(data[0], data[1] as StackTrace);
  21. }
  22. });
  23. Isolate.spawn(serverMain, StartConfig(i, argResults),
  24. onError: onError.sendPort);
  25. }
  26. } on ArgParserException catch (e) {
  27. stderr
  28. ..writeln('fatal error: ${e.message}')
  29. ..writeln('usage: bin/main.dart [options...]')
  30. ..writeln()
  31. ..writeln(argParser.usage);
  32. exitCode = 1;
  33. }
  34. }
  35. void serverMain(StartConfig config) {
  36. var app = Angel(
  37. //logger: Logger('tfb'),
  38. );
  39. // hierarchicalLoggingEnabled = true;
  40. //app.logger.onRecord.listen((rec) {
  41. // print(rec);
  42. // if (rec.error != null) print(rec.error);
  43. // if (rec.stackTrace != null) print(rec.stackTrace);
  44. //});
  45. app
  46. .configure(dart_angel_benchmark.configureServer(config.argResults))
  47. .then((_) async {
  48. var http = AngelHttp.custom(app, startShared);
  49. var server = await http.startServer('0.0.0.0', 8080);
  50. var url =
  51. Uri(scheme: 'http', host: server.address.address, port: server.port);
  52. print('Instance #${config.id} listening at $url');
  53. });
  54. }
  55. class StartConfig {
  56. final int id;
  57. final ArgResults argResults;
  58. StartConfig(this.id, this.argResults);
  59. }