react学習ノート二----nodejsサーバー構築及び異常処理

2378 ワード

受けの部分
react学習ノート一-----react先端フレームの初歩的な構築
説明
  • 今回の学習ノートはreactと関係がないかもしれませんが、完全な練習をするためには、サーバーが必要です。
  • この練習で採用したnodejs+mysqlはサーバーとデータベースとして、なぜphp、javaを採用しないですか?ハハ、面倒くさいです。
  • 環境の説明
    1、mac os(10.13.6(17 G 65))2、mysq 5.7、nodejs+express 4
    nodejs+express 4環境構築
    これは詳しい手順を書かなくてもいいですよね?ネット上の教程は山ほどあって、同じくとても簡単です。
    新規プロジェクト
           ejs     ,            ,      
    express -e ejs nodeApi
    
    環境構築の取り組み
    nodejs環境構築自体は比較的簡単なので、環境構築に重点を置かない。
    nodejs異常によるサービス崩壊の問題
    説明:
    Nodejsの最大のハイライトは、イベント駆動にあり、I/Oモデルをブロックしないことで、Nodejsは強力な同時処理能力を持ち、ネットワークアプリケーションの作成に非常に適しています。NodejsのほとんどのI/O動作は非同期であり、つまりI/Oを扱う作業結果は基本的にコールバック関数で処理する必要があります。
              ,         ,           
    router.get('/', function(req, res, next) {
        run();
    });
    
    function async_error() {
        setTimeout(function(){
            throw new Error("Error");
        },10)
    }
    
    function run() {
        try {
            async_error();
        } catch (err) {
            console.log(err);
        }
    }
    
    上のdemoはasyncにあります。errot関数では、非同期のために異常を捉えることができません。直接nodejsサービスを切ってしまうことになります。もちろんtry...catchを使って捕獲してもいいですが、これはあまりにも面倒で複雑です。
    処理モード
  • ネット上にはいろんな方法があります。domain、es 6、clusterなどがあります。
  • 説明:domainは使用を勧めません。メンテナンスを放棄したようです。
  • 私はclusterを採用しています。もし使う上で問題があったり、書いたりしたら、ご指摘ください。
  •       :     :bin\www
    //               try catch    app.use(errorhandler)    ,
    //    nodejs     ,      try catch   ,     
    //      uncaughtException             i/o        ,
    //       ,    ,           
    //        cluster
    // cluster                 
    // (The cluster module allows you to easily create a network of processes that all share server ports),
    //                    socket,
    //      accept connection         ,           ,cluster         
    var cluster = require('cluster');
    var numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
        //      
        for (var i = 0; i < numCPUs * 2; i++){
            cluster.fork();
        }
        //        ,     
        cluster.on('exit', function(worker, code, signal) {
            console.log('worker ' + worker.process.pid + ' died and start a new worker ');
            cluster.fork();
        });
    
    }else{
        server.listen(port);
    }
    
    締めくくりをつける
  • 以上の処理方式を使用して、nodejsは異常を取得できないためにサービスがキャンセルされることはありません。
  • 切替:やはりtry…catchを覚えてください。
  • githubアドレス
    https://github.com/522011796/nodeApi