2016-08-16 11 views
0

を私が起動し、以下のようなさまざまなゴクゴクタスクで、Webサーバを飲み込む停止しようとしています停止:スタートと飲み込む、ウェブサーバ

gulp.task('webserver', ['build'], function() { 
    gulp.src([config.build, config.base]) 
    .pipe(webserver({ 
    livereload: false, 
    directoryListing: false, 
    open: true 
    })); 
}); 

gulp.task('webserver-stop', function() { 
    var stream = gulp.src([config.build, config.base]) 
     .pipe(webserver()); 
    stream.emit('kill'); 
}); 

私が正常にサーバを起動することができていますが、私は​​の使用を停止しようとすると、次のエラーが発生します。

[19:36:30] Finished 'webserver-stop' after 27 ms 
events.js:160 
    throw er; // Unhandled 'error' event 
^

Error: listen EADDRINUSE 127.0.0.1:8000 
at Object.exports._errnoException (util.js:1008:11) 
at exports._exceptionWithHostPort (util.js:1031:20) 
at Server._listen2 (net.js:1253:14) 
at listen (net.js:1289:10) 
at net.js:1399:9 
at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:65:16) 
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:84:10) 

私は、この前にしてください修正する 任意の助けを一口とJavaScriptとの有意な経験を持っていません。

+0

同じポートでサーバを起動するのが速すぎます。リスナーを強制終了するイベントが発生しましたが、非同期であるため、別のリスナーコールバックで再起動する必要があります。 –

+0

私は上記のタスクで開始したサーバーインスタンスを停止します。それは別のグルプの仕事から可能ですか? – varun

+0

ある端末から 'gulp webserver'を実行し、別の端末から' gulp webserver-stop'を実行しようとしていますか? –

答えて

3

gulp webserverを実行してから​​を実行すると、2つのプロセスがあります。これらの2つのプロセスはお互いに何も知らない。

webserver()webserver-stopで呼び出すと、別のWebサーバーインスタンスが開始されます。すでに実行中のインスタンスやそのようなものには接続しません。そして既にポート8000​​で稼働しているWebサーバーが1台あるので、EADDRINUSEエラーが発生します。

代わりに、webserver-stopタスクが実行中のWebサーバーにメッセージを送信して、シャットダウンする必要があります。

既にWebサーバーを実行しているので、HTTP経由でそのメッセージを送信することもできます。あなたはこれを達成するためにgulp-webservermiddleware optionを使用することができます。

var gulp = require('gulp'); 
var webserver = require('gulp-webserver'); 
var http = require('http'); 

gulp.task('webserver', function() { 
    var stream = gulp.src(['.']) 
    .pipe(webserver({ 
     livereload: false, 
     directoryListing: false, 
     open: true, 
     middleware: function(req, res, next) { 
     if (/_kill_\/?/.test(req.url)) { 
      res.end(); 
      stream.emit('kill'); 
     } 
     next(); 
     } 
    })); 
}); 

gulp.task('webserver-stop', function (cb) { 
    http.request('http://localhost:8000/_kill_').on('close', cb).end(); 
}); 

今、あなたは、実行中のWebサーバインスタンスをシャットダウンするには、ブラウザで別の端末ウィンドウで​​または単にオープンhttp://localhost:8000/_kill_を呼び出すことができます。

関連する問題