dart - 如何使用多个隔离来处理请求

标签 dart dart-io dart-isolates

如何设置 Dart 服务器以使用所有可用内核来处理即将到来的请求(例如,通过使用多个隔离来处理请求)?

最佳答案

使用 shared: true HttpServer.bind 的论据.例子:

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 - 如何使用多个隔离来处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30318723/

相关文章:

Dart 构造函数初始化顺序

dart - 如何将标准输入(不止一行)捕获到 Dart 中的字符串?

dart - 需要 Dart 镜像 instantiate() 函数

firebase - flutter Isolate 中的共享偏好

Dart:使用 RandomAccessFile 替换文件内的内容

communication - Dart 作为 worker 隔离

dart - 构造函数未在静态属性上调用

ruby-on-rails - 在 rails 3.1+ 中提供 Assets 的未编译版本

Flutter Bloc 与多个流?

dart - 带有sendData的HTTPRequest.request似乎无法正常工作