포트 80으로 서버를 실행하고 xmlHTTPrequest 를 사용하려고 하면이 오류가 발생합니다.Error: listen EADDRINUSE
포트 80에서 서버를 실행하는 동안 요청을하고 싶다면 nodejs에 왜 문제가 있습니까? 웹 브라우저의 경우 문제가되지 않습니다. 서버가 실행되는 동안 인터넷에서 서핑 할 수 있습니다.
서버는 다음과 같습니다
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
그리고 요청 :
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
답변
EADDRINUSE
listen()
서버를 바인드 하려는 포트 번호 가 이미 사용 중임을 의미합니다 .
따라서 귀하의 경우 포트 80에서 서버를 이미 실행 중이어야합니다.
이 포트에서 다른 웹 서버를 실행중인 경우 해당 서버 뒤에 node.js를 배치하고이를 통해 프록시해야합니다.
listening
서버가 실제로 수신 중인지 확인하려면 다음 과 같은 이벤트를 확인해야합니다.
var http=require('http');
var server=http.createServer(function(req,res){
res.end('test');
});
server.on('listening',function(){
console.log('ok, server is running');
});
server.listen(80);
답변
나에게 정말로 도움이 된 것은 :
killall -9 node
그러나 이것은 시스템 프로세스를 죽일 것입니다.
와
ps ax
작동하는지 확인할 수 있습니다.
답변
killall -9 node
Patrick이 제안한 전술 한 내용 은 예상대로 작동하고 문제를 해결하지만 이유에 대한이 답변의 편집 부분을 읽으십시오.kill -9
최선의 방법이 아닐 수 수 있습니다.
게다가 맹목적으로 모든 것을 죽이지 않고 단일 프로세스 를 목표로 할 수 있습니다. 활성 프로세스를 .
이 경우 먼저 해당 포트에서 실행중인 프로세스의 프로세스 ID (PID)를 가져 오십시오 (예 : 8888).
lsof -i tcp:8888
이것은 다음과 같은 것을 반환합니다 :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 57385 You 11u IPv6 0xac745b2749fd2be3 0t0 TCP *:ddi-tcp-1 (LISTEN)
그런 다음 그냥하십시오 (ps-실제로 하지 않습니다 . 아래에서 계속 읽으십시오).
kill -9 57385
여기 에 대해 좀 더 읽을 수 있습니다 .
편집 : 나는 오늘 상당히 관련있는 주제를 읽고 있었는데 왜 내가 kill -9
프로세스가 아닌지에 대한 이 흥미로운 스레드를 우연히 발견했습니다 .
일반적으로 kill -9 전에 kill -15 를 사용하여 대상 프로세스가 자체적으로 정리 될 수있는 기회를 제공해야합니다. (프로세스는 SIGKILL을 포착하거나 무시할 수 없지만 SIGTERM을 포착 할 수 있으며 종종 포착합니다.) 프로세스가 수행중인 작업을 완료하고 정리할 기회를주지 않으면 손상된 파일 (또는 다른 상태)이 주변에 남을 수 있습니다. 다시 시작한 후에는 이해할 수 없습니다.
따라서 언급했듯이 위의 프로세스를 다음과 같이 더 잘 종료해야합니다.
kill -15 57385
편집 2 : 여기 여러 번 주석에서 언급 했듯이이 오류는 프로세스를 정상적으로 종료하지 않은 결과입니다. 즉, 많은 사람들이 CTRL + Z를 사용하여 노드 명령 (또는 다른 명령)을 종료합니다 . 실행중인 프로세스를 중지하는 올바른 방법은 클린 종료를 수행하는 CTRL + C 명령을 실행하는 것입니다.
프로세스를 올바르게 종료하면 종료하는 동안 해당 포트가 해제됩니다. 이렇게하면 프로세스를 다시 실행하기 전에 프로세스를 스스로 종료하지 않고도 프로세스를 다시 시작할 수 있습니다.
답변
Skype는 포트 80에서 수신 대기하므로 Node.js 또는 다른 앱에서 포트 80에서 수신하려고하면이 오류가 발생합니다.
옵션에 액세스하고 고급-> 연결-> 포트 80 사용을 클릭하여 Skype에서 해당 동작을 해제 할 수 있습니다 (확인 해제)
추신 : 변경 후 Skype를 다시 시작하는 것을 잊지 마십시오!
답변
포트 80에서 수신 대기중인 프로세스를 강제 종료해야합니다.
Killall은 실행중인 모든 노드 앱을 종료합니다. 그렇게하고 싶지 않을 수도 있습니다. 이 명령을 사용하면 알려진 포트에서 수신 대기중인 하나의 앱만 종료 할 수 있습니다.
유닉스를 사용하는 경우 다음 명령을 시도하십시오 :
sudo fuser -k 80/tcp
답변
오류 이유 : 통화 중을 사용하려고합니다
port number
Windows / Mac을위한 두 가지 가능한 솔루션
- 현재 사용중인 무료 포트 번호
- 현재 프로그램의 다른 포트 번호를 선택하십시오
1. 사용 가능한 포트 번호
윈도우
1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F
맥
netstat를 시도해 볼 수 있습니다
netstat -vanp tcp | grep 3000
OSX El Capitan 이상 (또는 netstat가 -p를 지원하지 않는 경우)의 경우 lsof를 사용하십시오
sudo lsof -i tcp:3000
이렇게해도 문제가 해결되지 않으면 Mac
사용자는이 문제에 대한 완전한 토론을 참조 할 수 있습니다 (Mac에서 프로세스 3000 포트 잠금 찾기 및 종료).
2. 포트 번호를 변경 하시겠습니까?
윈도우
set PORT=5000
맥
export PORT=5000
답변
컨트롤러 환경에서 다음을 사용할 수 있습니다.
pkill node
스크립트를 실행하기 전에 작업을 수행해야합니다.
이 명령은 모든 node
프로세스 즉, 하나의 인스턴스 만 실행하는 컨테이너가있는 경우에는 옳을 수 있습니다.
다른 시나리오에서는 프로그래밍 방식으로 찾은 특정 프로세스 ID 또는 이름을 종료하는 명령을 사용하는 것이 좋습니다. 프로세스가 호출 된 경우처럼 node-server-1 할 수 있습니다 pkill node-server-1
.
이 리소스는 다음을 이해하는 데 도움이 될 수 있습니다.
https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/