Dart 如何使用多个隔离服务请求

Dart 如何使用多个隔离服务请求,dart,dart-io,dart-isolates,Dart,Dart Io,Dart Isolates,如何将Dart服务器设置为使用所有可用的内核来接收请求(例如,通过使用多个隔离来服务请求)?使用HttpServer.bind的shared:true参数。例如: import 'dart:io'; import 'dart:isolate'; import 'package:shelf/shelf.dart' as shelf; import 'package:shelf/shelf_io.dart' as shelf_io; import 'package:args/args.dart'

如何将Dart服务器设置为使用所有可用的内核来接收请求(例如,通过使用多个隔离来服务请求)?

使用
HttpServer.bind的
shared:true
参数。例如:

import 'dart:io';
import 'dart:isolate';

import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:args/args.dart' show ArgParser;

main(List<String> args) {
   var parser = new ArgParser()
   ..addOption('address', abbr: 'a', defaultsTo: '0.0.0.0')
   ..addOption('port', abbr: 'p', defaultsTo: '9393')
   ..addOption('isolates', abbr: 'i', defaultsTo: '3');
   var arguments = parser.parse(args);

   var nbOfIsolates = int.parse(arguments['isolates']);
   for (int i = 1; i < nbOfIsolates; i++) {
      Isolate.spawn(_startShelfServer, [arguments['address'], int.parse(arguments['port'])]);
   }
   _startShelfServer([arguments['address'], int.parse(arguments['port'])]);
}

_startShelfServer(List args) async {
   String address = args[0];
   int port = args[1];

   var helloWorldHandler = (shelf.Request request) => new shelf.Response.ok("Hello World - from isolate ${Isolate.current.hashCode}");  
   var handler = const shelf.Pipeline()
   .addHandler(helloWorldHandler);
   var server = await HttpServer.bind(address, port, shared: true);
   await shelf_io.serveRequests(server, handler);
   print('Serving at http://${server.address.host}:${server.port} - isolate: ${Isolate.current.hashCode}');    
}
导入'dart:io';
导入“dart:隔离”;
导入“包装:货架/货架.省道”作为货架;
导入“包装:货架/货架io.dart”作为货架io;
导入“package:args/args.dart”显示ArgParser;
主(列表参数){
var parser=新的ArgParser()
…addOption('address',缩写为'a',defaultsTo:'0.0.0')
…addOption('port',缩写为'p',defaultsTo:'9393')
…addOption('insulates',缩写为'i',defaultsTo'3');
var参数=parser.parse(args);
var nbOfIsolates=int.parse(参数['isolates']);
对于(int i=1;inew shelf.Response.ok(“helloworld-来自隔离${isolate.current.hashCode}”);
var handler=const shelf.Pipeline()
.addHandler(helloWorldHandler);
var server=await-HttpServer.bind(地址、端口、共享:true);
等待shelf_io.ServerRequests(服务器、处理程序);
打印('在http://${server.address.host}:${server.port}-isolate:${isolate.current.hashCode}提供服务');
}

这是否回答了您的问题?