ゼロからDartサービスエンドプロジェクトを作成します.

4148 ワード

先日、咸魚の文章を見ました.FutterとDartの三端一体化開発に、一部の人はDartを使ってサービスのコードを書いてみたいと思います.
DartVMの性能はJVMと非常に接近しており、Nodejsと同じ非同期ioの処理方式を加えるとNodejsと同レベルの同時性能を達成することができ、さらにより良い演算性能があり、ほとんどのNodejsの使用シーンに取って代わることができます.
この文章はみんなを連れてゼロからDartサービスエンドプロジェクトを作成します.本稿は知識点を少しずつカバーします.
  • 依存ライブラリのインストール
  • はAPIを作成し、GET要求のパラメータとPOST要求のbody
  • を読み取る.
  • mongodbまたは他のデータベースの接続
  • は、要求プリアンブルを作成し、dbオブジェクトを要求のコンテキスト
  • に拡張する.
  • はAOTコンパイルと配置
  • を行う.
    Dartを取り付ける
    MacOS:
     $ brew tap dart-lang/dart
     $ brew install dart
    
    Windows(chocollateyでインストール):
    c:\ choco install dart-sdk
    
    またはDartオフィシャル文書によるインストール
    Dartプロジェクトを作成します.
    フォルダを作成し、pbspec.yamlファイルを作成します.
    $ mkdir your_project && cd your_project
    $ touch pubspec.yaml
    
    pbspec.yamlファイルの内容:
    name: your_project
    version: 0.0.1
    environment:
      sdk: '>=2.3.0 <3.0.0'
    
    dependencies:
      serral: any
    
    ここに私たちはSerralに依存してexpressまたはkoaの代替品としてサービス開発を追加しました.ソースは200行しかありません.そして非常に簡単な拡張方法を約束しました.Serral APIドキュメントです.
    インストール依存:
    $ pub get
    
    あなたの最初のDartサービスを作成します.
    $ mkdir lib
    $ touch lib/main.dart
    
    編集lib/main.dart:
    import 'package:serral/main.dart';
    
    void main() {
      final app = Serral();
    
      //     
      app.before(app.addCorsHeaders);
    
      //        
      app.before((SerralCtx ctx) {
        print(ctx.request.uri.toString());
        ctx.context['dog'] = 100;
      });
    
      //        
      app.after((SerralCtx ctx) {
        print('end');
      });
    
      //          
      app.GET('/', getHome);
      app.POST('/dog', postDog);
    
      app.serve(port: 5100);
    }
    
    //     GET   
    void getHome(SerralCtx ctx) async {
      //    ctx.context,            
      print(ctx.context['dog']);
      //         
      print(ctx.params);
      ctx.send(200, 'hello: ${ctx.context['dog']}');
    }
    
    //     POST   
    void postDog(SerralCtx ctx) async {
      //    post     body
      print(ctx.body);
      //     ,            
      await Future.delayed(Duration(milliseconds: 300));
      ctx.send(200, 'order');
    }
    
    サービスを開始
    $ dart lib/main.dart
    
    はい、サービスはもう始まりました.
    serral runing: http://127.0.0.1:5100
    
    どのようにMongodbまたは他のデータドライバを使用しますか?
    モンゴを取り付けるdart:
    dev_dependencies:
      mongo_dart: any
    
    方案1、contextを利用してドライバを格納する:
    コードの作成
    import 'package:mongo_dart/mongo_dart.dart';
    
    import 'package:serral/main.dart';
    
    void main() async {
      Db db = new Db("mongodb://127.0.0.1:27017/test");
      await db.open();
    
      final app = Serral();
    
      app.before((SerralCtx ctx) {
        // add mongodb in context
        ctx.context['db'] = db;
      });
    
      app.GET('/', getHome);
    
      app.serve(port: 5100);
    }
    
    void getHome(SerralCtx ctx) async {
      Db db = ctx.context['db'];
            
      print(db);
      ctx.send(200, 'hello: ${ctx.context['dog']}');
    }
    
    スキーム2は、mixinを使用してSerralCtxを拡張します.
    import 'package:mongo_dart/mongo_dart.dart';
    
    import 'package:serral/main.dart';
    
    // mixin    SerralCtx           
    class MongoCtx with SerralCtx {
      Db db;
    }
    
    void main() async {
      Db db = new Db("mongodb://127.0.0.1:27017/test");
      await db.open();
    
      //    MongoCtx    SerralCtx      
      final app = Serral(()=> MongoCtx());
    
      app.before((MongoCtx ctx) {
        //             db      
        ctx.db = db;
      });
    
      app.GET('/', getHome);
    
      app.serve(port: 5100);
    }
    
    void getHome(MongoCtx ctx) async {
      //          db   
      print(ctx.db);
      ctx.send(200, 'hello: ${ctx.context['dog']}');
    }
    
    はい、上記の例を通して、サービスにフロントまたはバックの中間キーを簡単に追加できます.またはcontextオブジェクトの内容を拡張して、応答を要求する時に使いやすいです.
    AOTコンパイルと配置
    次にDartVMの性能を求めます.source-codeをAOTコンパイルします.AOTコンパイル後はsource-codeに対して1~2桁の性能を上げられます.
    AOTコンパイル:
    dart2aot lib/main.dart lib/main.aot
    
    darta otruntimeを使って生産バージョンを起動します.
    dartaotruntime lib/main.aot
    
    順序
    序文も最後に書いてもいいですよね?
    簡単なコードを通して、私達はすでにDart APIサービスを作成しました.そしてAOTコンパイルを行いました.それをもっと生産環境の下で実行するのに適しています.
    初めてDartの子供靴を学んで少し収穫することができることを望んで、読んでありがとうございます.