2016-08-16 6 views
0

:꿀꺽 - 웹 서버 내가 시작하고 다음과 같은 다른 꿀꺽 작업에 꿀꺽 - 웹 서버 중지하려고

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'); 
}); 

을 나는 성공적으로 서버를 시작할 수 있어요하지만 난 gulp webserver-stop 사용을 중지 할 때를 , 다음과 같은 오류가 발생합니다.

[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) 

나는 꿀꺽하고 이전에 자바 스크립트, 이 좀 해결하기 위해 어떤 도움과 유의 한 경험이 없다.

+0

너무 빨리 같은 포트에서 서버를 시작하려고합니다. 리스너를 종료하기 위해 이벤트를 내 보냈지 만 비동기 적이기 때문에 다른 리스너 콜백에서 다시 시작해야합니다. –

+0

위 작업에서 시작한 서버 인스턴스를 중지하고 싶습니다. 다른 꿀꺽 꿀꺽 삼키는 일이 가능할까요? – varun

+0

한 터미널에서'gulp webserver'를 실행하고 다른 터미널에서'gulp webserver-stop'을 실행하려고합니까? –

답변

3

gulp webserver을 실행 한 다음 gulp webserver-stop을 실행하면 두 가지 프로세스가 있습니다. 이 두 프로세스는 서로를 알지 못합니다.

그래서 webserver()webserver-stop에서 호출하면 다른 웹 서버 인스턴스가 시작됩니다. 그것은 이미 실행중인 인스턴스 나 그와 같은 것에 연결하지 않습니다. 그리고 이미 포트 8000에서 실행중인 웹 서버가 있기 때문에 EADDRINUSE 오류가 발생합니다.

대신에 webserver-stop 작업이 실행중인 웹 서버에 메시지를 보내야 작동이 중지됩니다.

이미 웹 서버를 실행 중이므로 HTTP를 통해 해당 메시지를 보낼 수도 있습니다. 이 작업을 달성하기 위해 middleware optiongulp-webserver의를 사용할 수 있습니다

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(); 
}); 

가 실행중인 웹 서버 인스턴스를 종료 브라우저에서 http://localhost:8000/_kill_을 이제 다른 터미널 창에서 gulp webserver-stop를 호출 할 수 있습니다하거나 열립니다.