Serwer http pozostawia niezamknięty port

0

Witam wszystkich,
Pracuje ostatnio nad pewną aplikacją do której chciałbym zrobić prosty serwer http do obsługi różnych zapytań, oparty na node.js. Praca wygląda tak, że coś sobie dopisuje / zmieniam w aplikacji node, uruchamiam ponownie ten serwer w terminalu i testuje.

Ostatni raz gdy coś takiego robiłem, pracowałem na Windows i zamknięcie z poziomu konsoli aplikacji, zwalniało też port. Teraz jestem na Ubuntu i problem jest taki, że mimo zamknięcia aplikacji, port nadal jest zajęty. Obecnie muszę ręcznie zabijać proces, który zajmuje port, by móc znów przetestować zmiany w aplikacji.

Może macie jakieś pomysły jak to obejść, tak by ctrl+c w terminalu zwalniał również port ? Jedyny pomysł jaki teraz mam to zautomatyzować uruchamianie aplikacji i zabijanie procesu za pomocą pliku .sh .

1

Nie zauważyłem takiego zachowania na Linuksach (Kubuntu, Ubuntu oraz Mint), więc to raczej specyficzne dla Twojej konfiguracji/wersji node albo ... kodu.

Wklej najkrótszy możliwy kod, który powoduje takie zachowanie to zweryfikujemy.

Możesz też próbować obejść problem sposobami stąd: http://stackoverflow.com/questions/4075287/node-express-eaddrinuse-address-already-in-use-kill-server

0

Przykładowo jakiś pierwszy lepszy serwer http z internetu

//Lets require/import the HTTP module
var http = require('http');

//Lets define a port we want to listen to
const PORT=7654;

//We need a function which handles requests and send response
function handleRequest(request, response){
    response.end('It Works!! Path Hit: ' + request.url);
}

//Create a server
var server = http.createServer(handleRequest);

//Lets start our server
server.listen(PORT, function(){
    //Callback triggered when server is successfully listening. Hurray!
    console.log("Server listening on: http://localhost:%s", PORT);
});

Przy pierwszym uruchomieniu jest ok, przy kolejnych jednak powoduje błąd
Error: listen EADDRINUSE :::7654

Mimo zabicia aplikacji w terminalu
ps aux | grep node
zwraca nadal proces z uruchomioną aplikacją.

0

Problem rozwiązany.

http://stackoverflow.com/questions/10522532/stop-node-js-program-from-command-line
Prz domyślnych ustawieniach terminala w Ubuntu skrót:

ctrl+z - usypia proces
ctrl+c - zabija proces

Jakiś czas temu przestawiałem kilka skrótów na bardziej wygodne dla mnie, nadpisując domyślne znaczenie ctrl+c.

1 użytkowników online, w tym zalogowanych: 0, gości: 1